v2ray-core/tools/conf/transport_test.go

108 lines
3.0 KiB
Go

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")
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)
}