mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-06-17 04:33:18 +08:00
233 lines
5.5 KiB
Go
233 lines
5.5 KiB
Go
package test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/bestnite/sub2clash/model/proxy"
|
|
"github.com/bestnite/sub2clash/parser"
|
|
)
|
|
|
|
func TestVmess_Basic_SimpleLink(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJ3cyIsInBvcnQiOiI0NDMiLCJwcyI6IkhBSEEiLCJ0bHMiOiJ0bHMiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0="
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HAHA",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 0,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "ws",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/",
|
|
Headers: map[string]string{
|
|
"Host": "127.0.0.1",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVmess_Basic_WithPath(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJ3cyIsInBhdGgiOiIvd3MiLCJwb3J0IjoiNDQzIiwicHMiOiJIQUNLIiwidGxzIjoidGxzIiwidHlwZSI6Im5vbmUiLCJ2IjoiMiJ9"
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HACK",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 0,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "ws",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/ws",
|
|
Headers: map[string]string{
|
|
"Host": "127.0.0.1",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVmess_Basic_WithHost(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaG9zdCI6ImV4YW1wbGUuY29tIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJ3cyIsInBvcnQiOiI0NDMiLCJwcyI6IkhBSEEiLCJ0bHMiOiJ0bHMiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0="
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HAHA",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 0,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "ws",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/",
|
|
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 TestVmess_Basic_WithSNI(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJ3cyIsInBvcnQiOiI0NDMiLCJwcyI6IkhBSEEiLCJzbmkiOiJleGFtcGxlLmNvbSIsInRscyI6InRscyIsInR5cGUiOiJub25lIiwidiI6IjIifQ=="
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HAHA",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 0,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "ws",
|
|
ServerName: "example.com",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/",
|
|
Headers: map[string]string{
|
|
"Host": "127.0.0.1",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVmess_Basic_WithAlterID(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIxIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJ3cyIsInBvcnQiOiI0NDMiLCJwcyI6IkhBSEEiLCJ0bHMiOiJ0bHMiLCJ0eXBlIjoibm9uZSIsInYiOiIyIn0="
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HAHA",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 1,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "ws",
|
|
WSOpts: proxy.WSOptions{
|
|
Path: "/",
|
|
Headers: map[string]string{
|
|
"Host": "127.0.0.1",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVmess_Basic_GRPC(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJhaWQiOiIwIiwiaWQiOiIxMjM0NTY3OC05MDEyLTM0NTYtNzg5MC0xMjM0NTY3ODkwMTIiLCJuZXQiOiJncnBjIiwicG9ydCI6IjQ0MyIsInBzIjoiSEFIQSIsInRscyI6InRscyIsInR5cGUiOiJub25lIiwidiI6IjIifQ=="
|
|
|
|
expected := proxy.Proxy{
|
|
Type: "vmess",
|
|
Name: "HAHA",
|
|
Vmess: proxy.Vmess{
|
|
UUID: "12345678-9012-3456-7890-123456789012",
|
|
AlterID: 0,
|
|
Cipher: "auto",
|
|
Server: "127.0.0.1",
|
|
Port: 443,
|
|
TLS: true,
|
|
Network: "grpc",
|
|
GrpcOpts: proxy.GrpcOptions{},
|
|
},
|
|
}
|
|
|
|
result, err := p.Parse(input)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
validateResult(t, expected, result)
|
|
}
|
|
|
|
func TestVmess_Error_InvalidBase64(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://invalid_base64"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestVmess_Error_InvalidJSON(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "vmess://eyJpbnZhbGlkIjoianNvbn0="
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|
|
|
|
func TestVmess_Error_InvalidProtocol(t *testing.T) {
|
|
p := &parser.VmessParser{}
|
|
input := "ss://example.com:8080"
|
|
|
|
_, err := p.Parse(input)
|
|
if err == nil {
|
|
t.Errorf("Expected error but got none")
|
|
}
|
|
}
|