diff --git a/tools/conf/transport_test.go b/tools/conf/transport_test.go new file mode 100644 index 000000000..8f3658f66 --- /dev/null +++ b/tools/conf/transport_test.go @@ -0,0 +1,98 @@ +package conf_test + +import ( + "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") + assert.String(header.Request.Header[0].Name).Equals("a") + assert.String(header.Request.Header[0].Value[0]).Equals("b") + assert.String(header.Request.Header[1].Name).Equals("c") + assert.String(header.Request.Header[1].Value[0]).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) +}