mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-06-17 12:43:18 +08:00
add tests
This commit is contained in:
182
test/parser/trojan_test.go
Normal file
182
test/parser/trojan_test.go
Normal file
@ -0,0 +1,182 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/bestnite/sub2clash/model/proxy"
|
||||
"github.com/bestnite/sub2clash/parser"
|
||||
)
|
||||
|
||||
func TestTrojan_Basic_SimpleLink(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:443#Trojan%20Proxy"
|
||||
|
||||
expected := proxy.Proxy{
|
||||
Type: "trojan",
|
||||
Name: "Trojan Proxy",
|
||||
Trojan: proxy.Trojan{
|
||||
Server: "127.0.0.1",
|
||||
Port: 443,
|
||||
Password: "password",
|
||||
},
|
||||
}
|
||||
|
||||
result, err := p.Parse(input)
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
validateResult(t, expected, result)
|
||||
}
|
||||
|
||||
func TestTrojan_Basic_WithTLS(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:443?security=tls&sni=example.com&alpn=h2,http/1.1#Trojan%20TLS"
|
||||
|
||||
expected := proxy.Proxy{
|
||||
Type: "trojan",
|
||||
Name: "Trojan TLS",
|
||||
Trojan: proxy.Trojan{
|
||||
Server: "127.0.0.1",
|
||||
Port: 443,
|
||||
Password: "password",
|
||||
ALPN: []string{"h2", "http/1.1"},
|
||||
SNI: "example.com",
|
||||
},
|
||||
}
|
||||
|
||||
result, err := p.Parse(input)
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
validateResult(t, expected, result)
|
||||
}
|
||||
|
||||
func TestTrojan_Basic_WithReality(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:443?security=reality&sni=example.com&pbk=publickey123&sid=shortid123&fp=chrome#Trojan%20Reality"
|
||||
|
||||
expected := proxy.Proxy{
|
||||
Type: "trojan",
|
||||
Name: "Trojan Reality",
|
||||
Trojan: proxy.Trojan{
|
||||
Server: "127.0.0.1",
|
||||
Port: 443,
|
||||
Password: "password",
|
||||
SNI: "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 TestTrojan_Basic_WithWebSocket(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:443?type=ws&path=/ws&host=example.com#Trojan%20WS"
|
||||
|
||||
expected := proxy.Proxy{
|
||||
Type: "trojan",
|
||||
Name: "Trojan WS",
|
||||
Trojan: proxy.Trojan{
|
||||
Server: "127.0.0.1",
|
||||
Port: 443,
|
||||
Password: "password",
|
||||
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 TestTrojan_Basic_WithGrpc(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:443?type=grpc&serviceName=grpc_service#Trojan%20gRPC"
|
||||
|
||||
expected := proxy.Proxy{
|
||||
Type: "trojan",
|
||||
Name: "Trojan gRPC",
|
||||
Trojan: proxy.Trojan{
|
||||
Server: "127.0.0.1",
|
||||
Port: 443,
|
||||
Password: "password",
|
||||
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 TestTrojan_Error_MissingServer(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@:443"
|
||||
|
||||
_, err := p.Parse(input)
|
||||
if err == nil {
|
||||
t.Errorf("Expected error but got none")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrojan_Error_MissingPort(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1"
|
||||
|
||||
_, err := p.Parse(input)
|
||||
if err == nil {
|
||||
t.Errorf("Expected error but got none")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrojan_Error_InvalidPort(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "trojan://password@127.0.0.1:99999"
|
||||
|
||||
_, err := p.Parse(input)
|
||||
if err == nil {
|
||||
t.Errorf("Expected error but got none")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrojan_Error_InvalidProtocol(t *testing.T) {
|
||||
p := &parser.TrojanParser{}
|
||||
input := "ss://example.com:8080"
|
||||
|
||||
_, err := p.Parse(input)
|
||||
if err == nil {
|
||||
t.Errorf("Expected error but got none")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user