mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-06-17 04:33:18 +08:00
185 lines
3.9 KiB
Go
185 lines
3.9 KiB
Go
package test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/bestnite/sub2clash/model/proxy"
|
|
"github.com/bestnite/sub2clash/parser"
|
|
)
|
|
|
|
func TestShadowsocks_Basic_SimpleLink(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@127.0.0.1:8080"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "127.0.0.1:8080",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "127.0.0.1",
|
|
Port: 8080,
|
|
Cipher: "aes-256-gcm",
|
|
Password: "password",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestShadowsocks_Basic_IPv6Address(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@[2001:db8::1]:8080"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "2001:db8::1:8080",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "2001:db8::1",
|
|
Port: 8080,
|
|
Cipher: "aes-256-gcm",
|
|
Password: "password",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestShadowsocks_Basic_WithRemark(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@proxy.example.com:8080#My%20SS%20Proxy"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "My SS Proxy",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "proxy.example.com",
|
|
Port: 8080,
|
|
Cipher: "aes-256-gcm",
|
|
Password: "password",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestShadowsocks_Advanced_Base64FullEncoded(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmRAbG9jYWxob3N0OjgwODA=#Local%20SS"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "Local SS",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "localhost",
|
|
Port: 8080,
|
|
Cipher: "aes-256-gcm",
|
|
Password: "password",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestShadowsocks_Advanced_PlainUserPassword(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://aes-256-gcm:password@192.168.1.1:8080"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "192.168.1.1:8080",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "192.168.1.1",
|
|
Port: 8080,
|
|
Cipher: "aes-256-gcm",
|
|
Password: "password",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestShadowsocks_Advanced_ChaCha20Cipher(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://chacha20-poly1305:mypassword@server.com:443#ChaCha20"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "ss",
|
|
Name: "ChaCha20",
|
|
ShadowSocks: proxy.ShadowSocks{
|
|
Server: "server.com",
|
|
Port: 443,
|
|
Cipher: "chacha20-poly1305",
|
|
Password: "mypassword",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
// 错误处理测试
|
|
func TestShadowsocks_Error_MissingServer(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if !errors.Is(err, parser.ErrInvalidStruct) {
|
|
t.Errorf("Error is not expected: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestShadowsocks_Error_MissingPort(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ=@127.0.0.1"
|
|
|
|
_, err := p.Parse(input)
|
|
if !errors.Is(err, parser.ErrInvalidStruct) {
|
|
t.Errorf("Error is not expected: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestShadowsocks_Error_InvalidProtocol(t *testing.T) {
|
|
p := &parser.ShadowsocksParser{}
|
|
input := "http://example.com:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if !errors.Is(err, parser.ErrInvalidPrefix) {
|
|
t.Errorf("Error is not expected: %v", err)
|
|
}
|
|
}
|