| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- package encoding_test
- import (
- "testing"
- "v2ray.com/core/common"
- "v2ray.com/core/common/buf"
- "v2ray.com/core/common/net"
- "v2ray.com/core/common/protocol"
- "v2ray.com/core/common/serial"
- "v2ray.com/core/common/uuid"
- "v2ray.com/core/proxy/vmess"
- . "v2ray.com/core/proxy/vmess/encoding"
- . "v2ray.com/ext/assert"
- )
- func TestRequestSerialization(t *testing.T) {
- assert := With(t)
- user := &protocol.User{
- Level: 0,
- Email: "test@v2ray.com",
- }
- id := uuid.New()
- account := &vmess.Account{
- Id: id.String(),
- AlterId: 0,
- }
- user.Account = serial.ToTypedMessage(account)
- expectedRequest := &protocol.RequestHeader{
- Version: 1,
- User: user,
- Command: protocol.RequestCommandTCP,
- Address: net.DomainAddress("www.v2ray.com"),
- Port: net.Port(443),
- Security: protocol.SecurityType_AES128_GCM,
- }
- buffer := buf.New()
- client := NewClientSession(protocol.DefaultIDHash)
- common.Must(client.EncodeRequestHeader(expectedRequest, buffer))
- buffer2 := buf.New()
- buffer2.Write(buffer.Bytes())
- sessionHistory := NewSessionHistory()
- defer common.Close(sessionHistory)
- userValidator := vmess.NewTimedUserValidator(protocol.DefaultIDHash)
- userValidator.Add(user)
- defer common.Close(userValidator)
- server := NewServerSession(userValidator, sessionHistory)
- actualRequest, err := server.DecodeRequestHeader(buffer)
- assert(err, IsNil)
- assert(expectedRequest.Version, Equals, actualRequest.Version)
- assert(byte(expectedRequest.Command), Equals, byte(actualRequest.Command))
- assert(byte(expectedRequest.Option), Equals, byte(actualRequest.Option))
- assert(expectedRequest.Address, Equals, actualRequest.Address)
- assert(expectedRequest.Port, Equals, actualRequest.Port)
- assert(byte(expectedRequest.Security), Equals, byte(actualRequest.Security))
- _, err = server.DecodeRequestHeader(buffer2)
- // anti replay attack
- assert(err, IsNotNil)
- }
- func TestInvalidRequest(t *testing.T) {
- assert := With(t)
- user := &protocol.User{
- Level: 0,
- Email: "test@v2ray.com",
- }
- id := uuid.New()
- account := &vmess.Account{
- Id: id.String(),
- AlterId: 0,
- }
- user.Account = serial.ToTypedMessage(account)
- expectedRequest := &protocol.RequestHeader{
- Version: 1,
- User: user,
- Command: protocol.RequestCommand(100),
- Address: net.DomainAddress("www.v2ray.com"),
- Port: net.Port(443),
- Security: protocol.SecurityType_AES128_GCM,
- }
- buffer := buf.New()
- client := NewClientSession(protocol.DefaultIDHash)
- common.Must(client.EncodeRequestHeader(expectedRequest, buffer))
- buffer2 := buf.New()
- buffer2.Write(buffer.Bytes())
- sessionHistory := NewSessionHistory()
- defer common.Close(sessionHistory)
- userValidator := vmess.NewTimedUserValidator(protocol.DefaultIDHash)
- userValidator.Add(user)
- defer common.Close(userValidator)
- server := NewServerSession(userValidator, sessionHistory)
- _, err := server.DecodeRequestHeader(buffer)
- assert(err, IsNotNil)
- }
- func TestMuxRequest(t *testing.T) {
- assert := With(t)
- user := &protocol.User{
- Level: 0,
- Email: "test@v2ray.com",
- }
- id := uuid.New()
- account := &vmess.Account{
- Id: id.String(),
- AlterId: 0,
- }
- user.Account = serial.ToTypedMessage(account)
- expectedRequest := &protocol.RequestHeader{
- Version: 1,
- User: user,
- Command: protocol.RequestCommandMux,
- Security: protocol.SecurityType_AES128_GCM,
- }
- buffer := buf.New()
- client := NewClientSession(protocol.DefaultIDHash)
- common.Must(client.EncodeRequestHeader(expectedRequest, buffer))
- buffer2 := buf.New()
- buffer2.Write(buffer.Bytes())
- sessionHistory := NewSessionHistory()
- defer common.Close(sessionHistory)
- userValidator := vmess.NewTimedUserValidator(protocol.DefaultIDHash)
- userValidator.Add(user)
- defer common.Close(userValidator)
- server := NewServerSession(userValidator, sessionHistory)
- actualRequest, err := server.DecodeRequestHeader(buffer)
- assert(err, IsNil)
- assert(expectedRequest.Version, Equals, actualRequest.Version)
- assert(byte(expectedRequest.Command), Equals, byte(actualRequest.Command))
- assert(byte(expectedRequest.Option), Equals, byte(actualRequest.Option))
- assert(byte(expectedRequest.Security), Equals, byte(actualRequest.Security))
- }
|