mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-06-17 04:33:18 +08:00
184 lines
4.2 KiB
Go
184 lines
4.2 KiB
Go
package test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/bestnite/sub2clash/model/proxy"
|
|
"github.com/bestnite/sub2clash/parser"
|
|
)
|
|
|
|
func TestHysteria_Basic_SimpleLink(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://127.0.0.1:8080?protocol=udp&auth=password123&upmbps=100&downmbps=100#Hysteria%20Proxy"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "hysteria",
|
|
Name: "Hysteria Proxy",
|
|
Hysteria: proxy.Hysteria{
|
|
Server: "127.0.0.1",
|
|
Port: 8080,
|
|
Protocol: "udp",
|
|
Auth: "password123",
|
|
Up: "100",
|
|
Down: "100",
|
|
SkipCertVerify: false,
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestHysteria_Basic_WithAuthString(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://proxy.example.com:443?protocol=wechat-video&auth-str=myauth&upmbps=50&downmbps=200&insecure=true#Hysteria%20Auth"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "hysteria",
|
|
Name: "Hysteria Auth",
|
|
Hysteria: proxy.Hysteria{
|
|
Server: "proxy.example.com",
|
|
Port: 443,
|
|
Protocol: "wechat-video",
|
|
AuthString: "myauth",
|
|
Up: "50",
|
|
Down: "200",
|
|
SkipCertVerify: true,
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestHysteria_Basic_WithObfs(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://127.0.0.1:8080?auth=password123&upmbps=100&downmbps=100&obfs=xplus&alpn=h3#Hysteria%20Obfs"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "hysteria",
|
|
Name: "Hysteria Obfs",
|
|
Hysteria: proxy.Hysteria{
|
|
Server: "127.0.0.1",
|
|
Port: 8080,
|
|
Auth: "password123",
|
|
Up: "100",
|
|
Down: "100",
|
|
Obfs: "xplus",
|
|
ALPN: []string{"h3"},
|
|
SkipCertVerify: false,
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestHysteria_Basic_IPv6Address(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://[2001:db8::1]:8080?auth=password123&upmbps=100&downmbps=100#Hysteria%20IPv6"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "hysteria",
|
|
Name: "Hysteria IPv6",
|
|
Hysteria: proxy.Hysteria{
|
|
Server: "2001:db8::1",
|
|
Port: 8080,
|
|
Auth: "password123",
|
|
Up: "100",
|
|
Down: "100",
|
|
SkipCertVerify: false,
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestHysteria_Basic_MultiALPN(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://proxy.example.com:443?auth=password123&upmbps=100&downmbps=100&alpn=h3,h2,http/1.1#Hysteria%20Multi%20ALPN"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "hysteria",
|
|
Name: "Hysteria Multi ALPN",
|
|
Hysteria: proxy.Hysteria{
|
|
Server: "proxy.example.com",
|
|
Port: 443,
|
|
Auth: "password123",
|
|
Up: "100",
|
|
Down: "100",
|
|
ALPN: []string{"h3", "h2", "http/1.1"},
|
|
SkipCertVerify: false,
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestHysteria_Error_MissingServer(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://:8080?auth=password123"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestHysteria_Error_MissingPort(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://127.0.0.1?auth=password123"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestHysteria_Error_InvalidPort(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria://127.0.0.1:99999?auth=password123"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestHysteria_Error_InvalidProtocol(t *testing.T) {
|
|
p := &parser.HysteriaParser{}
|
|
input := "hysteria2://example.com:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|