mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
67 lines
2.5 KiB
Go
67 lines
2.5 KiB
Go
package config
|
|
|
|
import (
|
|
"io"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Главное свойство ClientArgs: строка, показанная пользователю, разбирается
|
|
// обратно в тот же конфиг. Иначе экран "какая команда работает" начинает врать.
|
|
func TestClientArgsRoundTrip(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
args []string
|
|
}{
|
|
{"minimal", validClientArgs()},
|
|
{"udp transport", append(validClientArgs(), "-transport", "udp")},
|
|
{"tcp mode", append(validClientArgs(), "-mode", "tcp")},
|
|
{"tcp mode kcp", append(validClientArgs(), "-mode", "tcp", "-kcp-mtu", "900", "-kcp-interval", "40", "-kcp-acknodelay=false")},
|
|
{"obf", append(validClientArgs(), "-obf-profile", "rtpopus3", "-obf-key", testObfKey)},
|
|
{"obf timing", append(validClientArgs(), "-obf-profile", "rtpopus", "-obf-key", testObfKey, "-obf-timing", "20ms")},
|
|
{"dns", append(validClientArgs(), "-dns-mode", "doh", "-dns-servers", "1.1.1.1,8.8.8.8:53")},
|
|
{"turn override", append(validClientArgs(), "-turn", "5.5.5.5", "-port", "3478")},
|
|
{"tuning", append(validClientArgs(), "-n", "3", "-streams-per-cred", "4")},
|
|
{"vk extras", append(validClientArgs(), "-manual-captcha", "-platform", "mobile")},
|
|
{"multi links", []string{"-peer", "1.2.3.4:5000", "-links", "https://vk.ru/call/join/A,https://vk.ru/call/join/B"}},
|
|
{"misc", append(validClientArgs(), "-client-id", "deadbeef", "-listen", "127.0.0.1:1080", "-debug")},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
want, err := ParseClient(tc.args, io.Discard)
|
|
if err != nil {
|
|
t.Fatalf("ParseClient(%v) error = %v", tc.args, err)
|
|
}
|
|
|
|
rebuilt := ClientArgs(want)
|
|
got, err := ParseClient(rebuilt, io.Discard)
|
|
if err != nil {
|
|
t.Fatalf("ParseClient(%v) error = %v", rebuilt, err)
|
|
}
|
|
if !reflect.DeepEqual(*got, *want) {
|
|
t.Errorf("round-trip changed config\nargs %v\n got %+v\nwant %+v", rebuilt, *got, *want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Дефолтные значения в строку не попадают: она должна читаться человеком.
|
|
func TestClientArgsOmitsDefaults(t *testing.T) {
|
|
c, err := ParseClient(validClientArgs(), io.Discard)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got := strings.Join(ClientArgs(c), " ")
|
|
want := "-peer 1.2.3.4:5000 -links abcdef"
|
|
if got != want {
|
|
t.Errorf("ClientArgs() = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestClientArgsNil(t *testing.T) {
|
|
if got := ClientArgs(nil); got != nil {
|
|
t.Errorf("ClientArgs(nil) = %v", got)
|
|
}
|
|
}
|