mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-06-17 04:33:18 +08:00
215 lines
4.8 KiB
Go
215 lines
4.8 KiB
Go
package test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/bestnite/sub2clash/model/proxy"
|
|
"github.com/bestnite/sub2clash/parser"
|
|
)
|
|
|
|
func TestVless_Basic_SimpleLink(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:8080#VLESS%20Proxy"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS Proxy",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 8080,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Basic_WithTLS(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:443?security=tls&sni=example.com&alpn=h2,http/1.1#VLESS%20TLS"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS TLS",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
TLS: true,
|
|
ALPN: []string{"h2", "http/1.1"},
|
|
ServerName: "example.com",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Basic_WithReality(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:443?security=reality&sni=example.com&pbk=publickey123&sid=shortid123&fp=chrome#VLESS%20Reality"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS Reality",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
TLS: true,
|
|
ServerName: "example.com",
|
|
RealityOpts: proxy.RealityOptions{
|
|
PublicKey: "publickey123",
|
|
ShortID: "shortid123",
|
|
},
|
|
Fingerprint: "chrome",
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Basic_WithWebSocket(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:443?type=ws&path=/ws&host=example.com#VLESS%20WS"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS WS",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
Network: "ws",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/ws",
|
|
Headers: map[string]string{
|
|
"Host": "example.com",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Basic_WithGrpc(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:443?type=grpc&serviceName=grpc_service#VLESS%20gRPC"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS gRPC",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
Network: "grpc",
|
|
GrpcOpts: proxy.GrpcOptions{
|
|
GrpcServiceName: "grpc_service",
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Basic_WithHTTP(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:443?type=http&path=/path1,/path2&host=host1.com,host2.com#VLESS%20HTTP"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vless",
|
|
Name: "VLESS HTTP",
|
|
Vless: proxy.Vless{
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
UUID: "b831b0c4-33b7-4873-9834-28d66d87d4ce",
|
|
Network: "http",
|
|
HTTPOpts: proxy.HTTPOptions{
|
|
Path: []string{"/path1", "/path2"},
|
|
Headers: map[string][]string{
|
|
"host": {"host1.com", "host2.com"},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVless_Error_MissingServer(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestVless_Error_MissingPort(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestVless_Error_InvalidPort(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "vless://b831b0c4-33b7-4873-9834-28d66d87d4ce@127.0.0.1:99999"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestVless_Error_InvalidProtocol(t *testing.T) {
|
|
p := &parser.VlessParser{}
|
|
input := "ss://example.com:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|