|
|
package cmd |
|
|
|
|
|
import ( |
|
|
"testing" |
|
|
"time" |
|
|
|
|
|
"github.com/stretchr/testify/assert" |
|
|
|
|
|
"github.com/spf13/viper" |
|
|
) |
|
|
|
|
|
|
|
|
func TestServerConfig(t *testing.T) { |
|
|
viper.SetConfigFile("server_test.yaml") |
|
|
err := viper.ReadInConfig() |
|
|
assert.NoError(t, err) |
|
|
var config serverConfig |
|
|
err = viper.Unmarshal(&config) |
|
|
assert.NoError(t, err) |
|
|
assert.Equal(t, config, serverConfig{ |
|
|
Listen: ":8443", |
|
|
Obfs: serverConfigObfs{ |
|
|
Type: "salamander", |
|
|
Salamander: serverConfigObfsSalamander{ |
|
|
Password: "cry_me_a_r1ver", |
|
|
}, |
|
|
}, |
|
|
TLS: &serverConfigTLS{ |
|
|
Cert: "some.crt", |
|
|
Key: "some.key", |
|
|
SNIGuard: "strict", |
|
|
}, |
|
|
ACME: &serverConfigACME{ |
|
|
Domains: []string{ |
|
|
"sub1.example.com", |
|
|
"sub2.example.com", |
|
|
}, |
|
|
Email: "haha@cringe.net", |
|
|
CA: "zero", |
|
|
ListenHost: "127.0.0.9", |
|
|
Dir: "random_dir", |
|
|
Type: "dns", |
|
|
HTTP: serverConfigACMEHTTP{ |
|
|
AltPort: 8888, |
|
|
}, |
|
|
TLS: serverConfigACMETLS{ |
|
|
AltPort: 44333, |
|
|
}, |
|
|
DNS: serverConfigACMEDNS{ |
|
|
Name: "gomommy", |
|
|
Config: map[string]string{ |
|
|
"key1": "value1", |
|
|
"key2": "value2", |
|
|
}, |
|
|
}, |
|
|
DisableHTTP: true, |
|
|
DisableTLSALPN: true, |
|
|
AltHTTPPort: 8080, |
|
|
AltTLSALPNPort: 4433, |
|
|
}, |
|
|
QUIC: serverConfigQUIC{ |
|
|
InitStreamReceiveWindow: 77881, |
|
|
MaxStreamReceiveWindow: 77882, |
|
|
InitConnectionReceiveWindow: 77883, |
|
|
MaxConnectionReceiveWindow: 77884, |
|
|
MaxIdleTimeout: 999 * time.Second, |
|
|
MaxIncomingStreams: 256, |
|
|
DisablePathMTUDiscovery: true, |
|
|
}, |
|
|
Bandwidth: serverConfigBandwidth{ |
|
|
Up: "500 mbps", |
|
|
Down: "100 mbps", |
|
|
}, |
|
|
IgnoreClientBandwidth: true, |
|
|
SpeedTest: true, |
|
|
DisableUDP: true, |
|
|
UDPIdleTimeout: 120 * time.Second, |
|
|
Auth: serverConfigAuth{ |
|
|
Type: "password", |
|
|
Password: "goofy_ahh_password", |
|
|
UserPass: map[string]string{ |
|
|
"yolo": "swag", |
|
|
"lol": "kek", |
|
|
"foo": "bar", |
|
|
}, |
|
|
HTTP: serverConfigAuthHTTP{ |
|
|
URL: "http://127.0.0.1:5000/auth", |
|
|
Insecure: true, |
|
|
}, |
|
|
Command: "/etc/some_command", |
|
|
}, |
|
|
Resolver: serverConfigResolver{ |
|
|
Type: "udp", |
|
|
TCP: serverConfigResolverTCP{ |
|
|
Addr: "123.123.123.123:5353", |
|
|
Timeout: 4 * time.Second, |
|
|
}, |
|
|
UDP: serverConfigResolverUDP{ |
|
|
Addr: "4.6.8.0:53", |
|
|
Timeout: 2 * time.Second, |
|
|
}, |
|
|
TLS: serverConfigResolverTLS{ |
|
|
Addr: "dot.yolo.com:8853", |
|
|
Timeout: 10 * time.Second, |
|
|
SNI: "server1.yolo.net", |
|
|
Insecure: true, |
|
|
}, |
|
|
HTTPS: serverConfigResolverHTTPS{ |
|
|
Addr: "cringe.ahh.cc", |
|
|
Timeout: 5 * time.Second, |
|
|
SNI: "real.stuff.net", |
|
|
Insecure: true, |
|
|
}, |
|
|
}, |
|
|
Sniff: serverConfigSniff{ |
|
|
Enable: true, |
|
|
Timeout: 1 * time.Second, |
|
|
RewriteDomain: true, |
|
|
TCPPorts: "80,443,1000-2000", |
|
|
UDPPorts: "443", |
|
|
}, |
|
|
ACL: serverConfigACL{ |
|
|
File: "chnroute.txt", |
|
|
Inline: []string{ |
|
|
"lmao(ok)", |
|
|
"kek(cringe,boba,tea)", |
|
|
}, |
|
|
GeoIP: "some.dat", |
|
|
GeoSite: "some_site.dat", |
|
|
GeoUpdateInterval: 168 * time.Hour, |
|
|
}, |
|
|
Outbounds: []serverConfigOutboundEntry{ |
|
|
{ |
|
|
Name: "goodstuff", |
|
|
Type: "direct", |
|
|
Direct: serverConfigOutboundDirect{ |
|
|
Mode: "64", |
|
|
BindIPv4: "2.4.6.8", |
|
|
BindIPv6: "0:0:0:0:0:ffff:0204:0608", |
|
|
BindDevice: "eth233", |
|
|
FastOpen: true, |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
Name: "badstuff", |
|
|
Type: "socks5", |
|
|
SOCKS5: serverConfigOutboundSOCKS5{ |
|
|
Addr: "shady.proxy.ru:1080", |
|
|
Username: "hackerman", |
|
|
Password: "Elliot Alderson", |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
Name: "weirdstuff", |
|
|
Type: "http", |
|
|
HTTP: serverConfigOutboundHTTP{ |
|
|
URL: "https://eyy.lmao:4443/goofy", |
|
|
Insecure: true, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
TrafficStats: serverConfigTrafficStats{ |
|
|
Listen: ":9999", |
|
|
Secret: "its_me_mario", |
|
|
}, |
|
|
Masquerade: serverConfigMasquerade{ |
|
|
Type: "proxy", |
|
|
File: serverConfigMasqueradeFile{ |
|
|
Dir: "/www/masq", |
|
|
}, |
|
|
Proxy: serverConfigMasqueradeProxy{ |
|
|
URL: "https://some.site.net", |
|
|
RewriteHost: true, |
|
|
Insecure: true, |
|
|
}, |
|
|
String: serverConfigMasqueradeString{ |
|
|
Content: "aint nothin here", |
|
|
Headers: map[string]string{ |
|
|
"content-type": "text/plain", |
|
|
"custom-haha": "lol", |
|
|
}, |
|
|
StatusCode: 418, |
|
|
}, |
|
|
ListenHTTP: ":80", |
|
|
ListenHTTPS: ":443", |
|
|
ForceHTTPS: true, |
|
|
}, |
|
|
}) |
|
|
} |
|
|
|