| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | package conf_testimport (	"encoding/json"	"testing"	"v2ray.com/core/testing/assert"	. "v2ray.com/core/tools/conf"	"v2ray.com/core/transport/internet"	"v2ray.com/core/transport/internet/headers/http"	"v2ray.com/core/transport/internet/headers/noop"	"v2ray.com/core/transport/internet/kcp"	"v2ray.com/core/transport/internet/tcp"	"v2ray.com/core/transport/internet/websocket")func TestTransportConfig(t *testing.T) {	assert := assert.On(t)	rawJson := `{    "tcpSettings": {      "connectionReuse": true,      "header": {        "type": "http",        "request": {          "version": "1.1",          "method": "GET",          "path": "/b",          "headers": {            "a": "b",            "c": "d"          }        },        "response": {          "version": "1.0",          "status": "404",          "reason": "Not Found"        }      }    },    "kcpSettings": {      "mtu": 1200,      "header": {        "type": "none"      }    },    "wsSettings": {      "path": "/t"    }  }`	var transportSettingsConf TransportConfig	assert.Error(json.Unmarshal([]byte(rawJson), &transportSettingsConf)).IsNil()	ts, err := transportSettingsConf.Build()	assert.Error(err).IsNil()	assert.Int(len(ts.TransportSettings)).Equals(3)	var settingsCount uint32	for _, settingsWithProtocol := range ts.TransportSettings {		rawSettings, err := settingsWithProtocol.Settings.GetInstance()		assert.Error(err).IsNil()		switch settings := rawSettings.(type) {		case *tcp.Config:			settingsCount++			assert.Bool(settingsWithProtocol.Protocol == internet.TransportProtocol_TCP).IsTrue()			assert.Bool(settings.IsConnectionReuse()).IsTrue()			rawHeader, err := settings.HeaderSettings.GetInstance()			assert.Error(err).IsNil()			header := rawHeader.(*http.Config)			assert.String(header.Request.GetVersionValue()).Equals("1.1")			assert.String(header.Request.Uri[0]).Equals("/b")			assert.String(header.Request.Method.Value).Equals("GET")			var va, vc string			for _, h := range header.Request.Header {				switch h.Name {				case "a":					va = h.Value[0]				case "c":					vc = h.Value[0]				default:					t.Error("Unknown header ", h.String())				}			}			assert.String(va).Equals("b")			assert.String(vc).Equals("d")			assert.String(header.Response.Version.Value).Equals("1.0")			assert.String(header.Response.Status.Code).Equals("404")			assert.String(header.Response.Status.Reason).Equals("Not Found")		case *kcp.Config:			settingsCount++			assert.Bool(settingsWithProtocol.Protocol == internet.TransportProtocol_MKCP).IsTrue()			assert.Uint32(settings.GetMTUValue()).Equals(1200)			rawHeader, err := settings.HeaderConfig.GetInstance()			assert.Error(err).IsNil()			header := rawHeader.(*noop.Config)			assert.Pointer(header).IsNotNil()		case *websocket.Config:			settingsCount++			assert.Bool(settingsWithProtocol.Protocol == internet.TransportProtocol_WebSocket).IsTrue()			assert.String(settings.Path).Equals("/t")		default:			t.Error("Unknown type of settings.")		}	}	assert.Uint32(settingsCount).Equals(3)}
 |