Hunter0x7c7
2022-08-11 a82f9cb69f63aaeba40c024960deda7d75b9fece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package encoding_test
 
import (
    "testing"
 
    "github.com/google/go-cmp/cmp"
    "google.golang.org/protobuf/testing/protocmp"
 
    "github.com/v2fly/v2ray-core/v5/common"
    "github.com/v2fly/v2ray-core/v5/common/buf"
    "github.com/v2fly/v2ray-core/v5/common/net"
    "github.com/v2fly/v2ray-core/v5/common/protocol"
    "github.com/v2fly/v2ray-core/v5/common/uuid"
    "github.com/v2fly/v2ray-core/v5/proxy/vless"
    . "github.com/v2fly/v2ray-core/v5/proxy/vless/encoding"
)
 
func toAccount(a *vless.Account) protocol.Account {
    account, err := a.AsAccount()
    common.Must(err)
    return account
}
 
func TestRequestSerialization(t *testing.T) {
    user := &protocol.MemoryUser{
        Level: 0,
        Email: "test@v2fly.org",
    }
    id := uuid.New()
    account := &vless.Account{
        Id: id.String(),
    }
    user.Account = toAccount(account)
 
    expectedRequest := &protocol.RequestHeader{
        Version: Version,
        User:    user,
        Command: protocol.RequestCommandTCP,
        Address: net.DomainAddress("www.v2fly.org"),
        Port:    net.Port(443),
    }
    expectedAddons := &Addons{}
 
    buffer := buf.StackNew()
    common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
 
    Validator := new(vless.Validator)
    Validator.Add(user)
 
    actualRequest, actualAddons, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
    common.Must(err)
 
    if r := cmp.Diff(actualRequest, expectedRequest, cmp.AllowUnexported(protocol.ID{})); r != "" {
        t.Error(r)
    }
 
    if r := cmp.Diff(actualAddons, expectedAddons, protocmp.Transform()); r != "" {
        t.Error(r)
    }
}
 
func TestInvalidRequest(t *testing.T) {
    user := &protocol.MemoryUser{
        Level: 0,
        Email: "test@v2fly.org",
    }
    id := uuid.New()
    account := &vless.Account{
        Id: id.String(),
    }
    user.Account = toAccount(account)
 
    expectedRequest := &protocol.RequestHeader{
        Version: Version,
        User:    user,
        Command: protocol.RequestCommand(100),
        Address: net.DomainAddress("www.v2fly.org"),
        Port:    net.Port(443),
    }
    expectedAddons := &Addons{}
 
    buffer := buf.StackNew()
    common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
 
    Validator := new(vless.Validator)
    Validator.Add(user)
 
    _, _, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
    if err == nil {
        t.Error("nil error")
    }
}
 
func TestMuxRequest(t *testing.T) {
    user := &protocol.MemoryUser{
        Level: 0,
        Email: "test@v2fly.org",
    }
    id := uuid.New()
    account := &vless.Account{
        Id: id.String(),
    }
    user.Account = toAccount(account)
 
    expectedRequest := &protocol.RequestHeader{
        Version: Version,
        User:    user,
        Command: protocol.RequestCommandMux,
        Address: net.DomainAddress("v1.mux.cool"),
    }
    expectedAddons := &Addons{}
 
    buffer := buf.StackNew()
    common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
 
    Validator := new(vless.Validator)
    Validator.Add(user)
 
    actualRequest, actualAddons, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
    common.Must(err)
 
    if r := cmp.Diff(actualRequest, expectedRequest, cmp.AllowUnexported(protocol.ID{})); r != "" {
        t.Error(r)
    }
 
    if r := cmp.Diff(actualAddons, expectedAddons, protocmp.Transform()); r != "" {
        t.Error(r)
    }
}