diff --git a/tools/conf/socks_test.go b/tools/conf/socks_test.go new file mode 100644 index 000000000..319fd4607 --- /dev/null +++ b/tools/conf/socks_test.go @@ -0,0 +1,87 @@ +package conf_test + +import ( + "encoding/json" + "testing" + + "v2ray.com/core/common/net" + "v2ray.com/core/common/protocol" + "v2ray.com/core/proxy/socks" + "v2ray.com/core/testing/assert" + . "v2ray.com/core/tools/conf" +) + +func TestSocksInboundConfig(t *testing.T) { + assert := assert.On(t) + + rawJson := `{ + "auth": "password", + "accounts": [ + { + "user": "my-username", + "pass": "my-password" + } + ], + "udp": false, + "ip": "127.0.0.1", + "timeout": 5 + }` + + config := new(SocksServerConfig) + err := json.Unmarshal([]byte(rawJson), &config) + assert.Error(err).IsNil() + + message, err := config.Build() + assert.Error(err).IsNil() + + iConfig, err := message.GetInstance() + assert.Error(err).IsNil() + + socksConfig := iConfig.(*socks.ServerConfig) + assert.Bool(socksConfig.AuthType == socks.AuthType_PASSWORD).IsTrue() + assert.Int(len(socksConfig.Accounts)).Equals(1) + assert.String(socksConfig.Accounts["my-username"]).Equals("my-password") + assert.Bool(socksConfig.UdpEnabled).IsFalse() + assert.Address(socksConfig.Address.AsAddress()).Equals(net.LocalHostIP) + assert.Uint32(socksConfig.Timeout).Equals(5) +} + +func TestSocksOutboundConfig(t *testing.T) { + assert := assert.On(t) + + rawJson := `{ + "servers": [{ + "address": "127.0.0.1", + "port": 1234, + "users": [ + {"user": "test user", "pass": "test pass", "email": "test@email.com"} + ] + }] + }` + + config := new(SocksClientConfig) + err := json.Unmarshal([]byte(rawJson), &config) + assert.Error(err).IsNil() + + message, err := config.Build() + assert.Error(err).IsNil() + + iConfig, err := message.GetInstance() + assert.Error(err).IsNil() + + socksConfig := iConfig.(*socks.ClientConfig) + assert.Int(len(socksConfig.Server)).Equals(1) + + ss := protocol.NewServerSpecFromPB(*socksConfig.Server[0]) + assert.Destination(ss.Destination()).EqualsString("tcp:127.0.0.1:1234") + + user := ss.PickUser() + assert.String(user.Email).Equals("test@email.com") + + account, err := user.GetTypedAccount() + assert.Error(err).IsNil() + + socksAccount := account.(*socks.Account) + assert.String(socksAccount.Username).Equals("test user") + assert.String(socksAccount.Password).Equals("test pass") +}