[tor-commits] [goptlib/master] Add tests for readSocks4aConnect.

dcf at torproject.org dcf at torproject.org
Mon Dec 9 02:49:51 UTC 2013


commit 8addf719f7dbc463a32463fa3e4949f2437f91e5
Author: David Fifield <david at bamsoftware.com>
Date:   Wed Dec 4 14:04:11 2013 -0800

    Add tests for readSocks4aConnect.
---
 socks/socks_test.go |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)

diff --git a/socks/socks_test.go b/socks/socks_test.go
new file mode 100644
index 0000000..759bf4a
--- /dev/null
+++ b/socks/socks_test.go
@@ -0,0 +1,113 @@
+package socks
+
+import (
+	"bytes"
+	"net"
+	"testing"
+)
+
+func tcpAddrsEqual(a, b *net.TCPAddr) bool {
+	return a.IP.Equal(b.IP) && a.Port == b.Port
+}
+
+func TestReadSocks4aConnect(t *testing.T) {
+	badTests := [...][]byte{
+		[]byte(""),
+		// missing userid
+		[]byte("\x04\x01\x12\x34\x01\x02\x03\x04"),
+		// missing \x00 after userid
+		[]byte("\x04\x01\x12\x34\x01\x02\x03\x04userid"),
+		// missing hostname
+		[]byte("\x04\x01\x12\x34\x00\x00\x00\x01userid\x00"),
+		// missing \x00 after hostname
+		[]byte("\x04\x01\x12\x34\x00\x00\x00\x01userid\x00hostname"),
+		// BIND request
+		[]byte("\x04\x02\x12\x34\x01\x02\x03\x04userid\x00"),
+		// SOCKS5
+		[]byte("\x05\x01\x00"),
+	}
+	ipTests := [...]struct {
+		input  []byte
+		userid string
+		addr   net.TCPAddr
+	}{
+		{
+			[]byte("\x04\x01\x12\x34\x01\x02\x03\x04userid\x00"),
+			"userid", net.TCPAddr{IP: net.ParseIP("1.2.3.4"), Port: 0x1234},
+		},
+		{
+			[]byte("\x04\x01\x12\x34\x01\x02\x03\x04\x00"),
+			"", net.TCPAddr{IP: net.ParseIP("1.2.3.4"), Port: 0x1234},
+		},
+	}
+	hostnameTests := [...]struct {
+		input  []byte
+		userid string
+		target string
+	}{
+		{
+			[]byte("\x04\x01\x12\x34\x00\x00\x00\x01userid\x00hostname\x00"),
+			"userid", "hostname:4660",
+		},
+		{
+			[]byte("\x04\x01\x12\x34\x00\x00\x00\x01\x00hostname\x00"),
+			"", "hostname:4660",
+		},
+		{
+			[]byte("\x04\x01\x12\x34\x00\x00\x00\x01userid\x00\x00"),
+			"userid", ":4660",
+		},
+		{
+			[]byte("\x04\x01\x12\x34\x00\x00\x00\x01\x00\x00"),
+			"", ":4660",
+		},
+	}
+
+	for _, input := range badTests {
+		var buf bytes.Buffer
+		buf.Write(input)
+		_, err := readSocks4aConnect(&buf)
+		if err == nil {
+			t.Errorf("%q unexpectedly succeeded", input)
+		}
+	}
+
+	for _, test := range ipTests {
+		var buf bytes.Buffer
+		buf.Write(test.input)
+		req, err := readSocks4aConnect(&buf)
+		if err != nil {
+			t.Errorf("%q unexpectedly returned an error: %s", test.input, err)
+		}
+		if req.Username != test.userid {
+			t.Errorf("%q → username %q (expected %q)", test.input,
+				req.Username, test.userid)
+		}
+		addr, err := net.ResolveTCPAddr("tcp", req.Target)
+		if err != nil {
+			t.Error("%q → target %q: cannot resolve: %s", test.input,
+				req.Target, err)
+		}
+		if !tcpAddrsEqual(addr, &test.addr) {
+			t.Errorf("%q → address %s (expected %s)", test.input,
+				req.Target, test.addr.String())
+		}
+	}
+
+	for _, test := range hostnameTests {
+		var buf bytes.Buffer
+		buf.Write(test.input)
+		req, err := readSocks4aConnect(&buf)
+		if err != nil {
+			t.Errorf("%q unexpectedly returned an error: %s", test.input, err)
+		}
+		if req.Username != test.userid {
+			t.Errorf("%q → username %q (expected %q)", test.input,
+				req.Username, test.userid)
+		}
+		if req.Target != test.target {
+			t.Errorf("%q → target %q (expected %q)", test.input,
+				req.Target, test.target)
+		}
+	}
+}





More information about the tor-commits mailing list