|
@@ -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)
|
|
|
|
|
+}
|