mirror of
https://github.com/apernet/hysteria.git
synced 2025-04-03 04:27:39 +03:00
166 lines
3.6 KiB
Go
166 lines
3.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// TestClientConfig tests the parsing of the client config
|
|
func TestClientConfig(t *testing.T) {
|
|
viper.SetConfigFile("client_test.yaml")
|
|
err := viper.ReadInConfig()
|
|
assert.NoError(t, err)
|
|
var config clientConfig
|
|
err = viper.Unmarshal(&config)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, config, clientConfig{
|
|
Server: "example.com",
|
|
Auth: "weak_ahh_password",
|
|
Transport: clientConfigTransport{
|
|
Type: "udp",
|
|
UDP: clientConfigTransportUDP{
|
|
HopInterval: 30 * time.Second,
|
|
},
|
|
},
|
|
Obfs: clientConfigObfs{
|
|
Type: "salamander",
|
|
Salamander: clientConfigObfsSalamander{
|
|
Password: "cry_me_a_r1ver",
|
|
},
|
|
},
|
|
TLS: clientConfigTLS{
|
|
SNI: "another.example.com",
|
|
Insecure: true,
|
|
PinSHA256: "114515DEADBEEF",
|
|
CA: "custom_ca.crt",
|
|
},
|
|
QUIC: clientConfigQUIC{
|
|
InitStreamReceiveWindow: 1145141,
|
|
MaxStreamReceiveWindow: 1145142,
|
|
InitConnectionReceiveWindow: 1145143,
|
|
MaxConnectionReceiveWindow: 1145144,
|
|
MaxIdleTimeout: 10 * time.Second,
|
|
KeepAlivePeriod: 4 * time.Second,
|
|
DisablePathMTUDiscovery: true,
|
|
},
|
|
Bandwidth: clientConfigBandwidth{
|
|
Up: "200 mbps",
|
|
Down: "1 gbps",
|
|
},
|
|
FastOpen: true,
|
|
Lazy: true,
|
|
SOCKS5: &socks5Config{
|
|
Listen: "127.0.0.1:1080",
|
|
Username: "anon",
|
|
Password: "bro",
|
|
DisableUDP: true,
|
|
},
|
|
HTTP: &httpConfig{
|
|
Listen: "127.0.0.1:8080",
|
|
Username: "qqq",
|
|
Password: "bruh",
|
|
Realm: "martian",
|
|
},
|
|
TCPForwarding: []tcpForwardingEntry{
|
|
{
|
|
Listen: "127.0.0.1:8088",
|
|
Remote: "internal.example.com:80",
|
|
},
|
|
},
|
|
UDPForwarding: []udpForwardingEntry{
|
|
{
|
|
Listen: "127.0.0.1:5353",
|
|
Remote: "internal.example.com:53",
|
|
Timeout: 50 * time.Second,
|
|
},
|
|
},
|
|
TCPTProxy: &tcpTProxyConfig{
|
|
Listen: "127.0.0.1:2500",
|
|
},
|
|
UDPTProxy: &udpTProxyConfig{
|
|
Listen: "127.0.0.1:2501",
|
|
Timeout: 20 * time.Second,
|
|
},
|
|
})
|
|
}
|
|
|
|
// TestClientConfigURI tests URI-related functions of clientConfig
|
|
func TestClientConfigURI(t *testing.T) {
|
|
tests := []struct {
|
|
uri string
|
|
uriOK bool
|
|
config *clientConfig
|
|
}{
|
|
{
|
|
uri: "hysteria2://god@zilla.jp/",
|
|
uriOK: true,
|
|
config: &clientConfig{
|
|
Server: "zilla.jp",
|
|
Auth: "god",
|
|
},
|
|
},
|
|
{
|
|
uri: "hysteria2://john:wick@continental.org:4443/",
|
|
uriOK: true,
|
|
config: &clientConfig{
|
|
Server: "continental.org:4443",
|
|
Auth: "john:wick",
|
|
},
|
|
},
|
|
{
|
|
uri: "hysteria2://saul@better.call:7000-10000,20000/",
|
|
uriOK: true,
|
|
config: &clientConfig{
|
|
Server: "better.call:7000-10000,20000",
|
|
Auth: "saul",
|
|
},
|
|
},
|
|
{
|
|
uri: "hysteria2://noauth.com/?insecure=1&obfs=salamander&obfs-password=66ccff&pinSHA256=deadbeef&sni=crap.cc",
|
|
uriOK: true,
|
|
config: &clientConfig{
|
|
Server: "noauth.com",
|
|
Auth: "",
|
|
Obfs: clientConfigObfs{
|
|
Type: "salamander",
|
|
Salamander: clientConfigObfsSalamander{
|
|
Password: "66ccff",
|
|
},
|
|
},
|
|
TLS: clientConfigTLS{
|
|
SNI: "crap.cc",
|
|
Insecure: true,
|
|
PinSHA256: "deadbeef",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
uri: "invalid.bs",
|
|
uriOK: false,
|
|
config: nil,
|
|
},
|
|
{
|
|
uri: "https://www.google.com/search?q=test",
|
|
uriOK: false,
|
|
config: nil,
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.uri, func(t *testing.T) {
|
|
// Test parseURI
|
|
nc := &clientConfig{Server: test.uri}
|
|
assert.Equal(t, nc.parseURI(), test.uriOK)
|
|
if test.uriOK {
|
|
assert.Equal(t, nc, test.config)
|
|
}
|
|
// Test URI generation
|
|
if test.config != nil {
|
|
assert.Equal(t, test.config.URI(), test.uri)
|
|
}
|
|
})
|
|
}
|
|
}
|