| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package sockstest |
| |
| import ( |
| "net" |
| "reflect" |
| "testing" |
| |
| "golang.org/x/net/internal/socks" |
| ) |
| |
| func TestParseAuthRequest(t *testing.T) { |
| for i, tt := range []struct { |
| wire []byte |
| req *AuthRequest |
| }{ |
| { |
| []byte{0x05, 0x00}, |
| &AuthRequest{ |
| socks.Version5, |
| nil, |
| }, |
| }, |
| { |
| []byte{0x05, 0x01, 0xff}, |
| &AuthRequest{ |
| socks.Version5, |
| []socks.AuthMethod{ |
| socks.AuthMethodNoAcceptableMethods, |
| }, |
| }, |
| }, |
| { |
| []byte{0x05, 0x02, 0x00, 0xff}, |
| &AuthRequest{ |
| socks.Version5, |
| []socks.AuthMethod{ |
| socks.AuthMethodNotRequired, |
| socks.AuthMethodNoAcceptableMethods, |
| }, |
| }, |
| }, |
| |
| // corrupted requests |
| {nil, nil}, |
| {[]byte{0x00, 0x01}, nil}, |
| {[]byte{0x06, 0x00}, nil}, |
| {[]byte{0x05, 0x02, 0x00}, nil}, |
| } { |
| req, err := ParseAuthRequest(tt.wire) |
| if !reflect.DeepEqual(req, tt.req) { |
| t.Errorf("#%d: got %v, %v; want %v", i, req, err, tt.req) |
| continue |
| } |
| } |
| } |
| |
| func TestParseCmdRequest(t *testing.T) { |
| for i, tt := range []struct { |
| wire []byte |
| req *CmdRequest |
| }{ |
| { |
| []byte{0x05, 0x01, 0x00, 0x01, 192, 0, 2, 1, 0x17, 0x4b}, |
| &CmdRequest{ |
| socks.Version5, |
| socks.CmdConnect, |
| socks.Addr{ |
| IP: net.IP{192, 0, 2, 1}, |
| Port: 5963, |
| }, |
| }, |
| }, |
| { |
| []byte{0x05, 0x01, 0x00, 0x03, 0x04, 'F', 'Q', 'D', 'N', 0x17, 0x4b}, |
| &CmdRequest{ |
| socks.Version5, |
| socks.CmdConnect, |
| socks.Addr{ |
| Name: "FQDN", |
| Port: 5963, |
| }, |
| }, |
| }, |
| |
| // corrupted requests |
| {nil, nil}, |
| {[]byte{0x05}, nil}, |
| {[]byte{0x06, 0x01, 0x00, 0x01, 192, 0, 2, 2, 0x17, 0x4b}, nil}, |
| {[]byte{0x05, 0x01, 0xff, 0x01, 192, 0, 2, 3}, nil}, |
| {[]byte{0x05, 0x01, 0x00, 0x01, 192, 0, 2, 4}, nil}, |
| {[]byte{0x05, 0x01, 0x00, 0x03, 0x04, 'F', 'Q', 'D', 'N'}, nil}, |
| } { |
| req, err := ParseCmdRequest(tt.wire) |
| if !reflect.DeepEqual(req, tt.req) { |
| t.Errorf("#%d: got %v, %v; want %v", i, req, err, tt.req) |
| continue |
| } |
| } |
| } |