commit 8a12de97587e4a828381c30d8b80526b8a3a31fa Author: David Fifield david@bamsoftware.com Date: Tue Nov 26 23:46:53 2013 -0800
Add tests for extOrPortRecvCommand. --- pt_test.go | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)
diff --git a/pt_test.go b/pt_test.go index 4579fbd..6dc8845 100644 --- a/pt_test.go +++ b/pt_test.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "fmt" + "io" "io/ioutil" "net" "os" @@ -518,3 +519,71 @@ func TestExtOrPortSendDone(t *testing.T) { t.Errorf("→ %s (expected %s)", fmtBytes(output), fmtBytes(expected)) } } + +func TestExtOrPortRecvCommand(t *testing.T) { + badTests := [...][]byte{ + []byte(""), + []byte("\x12"), + []byte("\x12\x34"), + []byte("\x12\x34\x00"), + []byte("\x12\x34\x00\x01"), + } + goodTests := [...]struct { + input []byte + cmd uint16 + body []byte + leftover []byte + }{ + { + []byte("\x12\x34\x00\x00"), + 0x1234, []byte(""), []byte(""), + }, + { + []byte("\x12\x34\x00\x00more"), + 0x1234, []byte(""), []byte("more"), + }, + { + []byte("\x12\x34\x00\x04body"), + 0x1234, []byte("body"), []byte(""), + }, + { + []byte("\x12\x34\x00\x04bodymore"), + 0x1234, []byte("body"), []byte("more"), + }, + } + + for _, input := range badTests { + var buf bytes.Buffer + buf.Write(input) + _, _, err := extOrPortRecvCommand(&buf) + if err == nil { + t.Errorf("%q unexpectedly succeeded", fmtBytes(input)) + } + } + + for _, test := range goodTests { + var buf bytes.Buffer + buf.Write(test.input) + cmd, body, err := extOrPortRecvCommand(&buf) + if err != nil { + t.Errorf("%s unexpectedly returned an error: %s", fmtBytes(test.input), err) + } + if cmd != test.cmd { + t.Errorf("%s → cmd 0x%04x (expected 0x%04x)", fmtBytes(test.input), cmd, test.cmd) + } + if !bytes.Equal(body, test.body) { + t.Errorf("%s → body %s (expected %s)", fmtBytes(test.input), + fmtBytes(body), fmtBytes(test.body)) + } + p := make([]byte, 1024) + n, err := buf.Read(p) + if err != nil && err != io.EOF { + t.Fatal(err) + } + leftover := p[:n] + if !bytes.Equal(leftover, test.leftover) { + t.Errorf("%s → leftover %s (expected %s)", fmtBytes(test.input), + fmtBytes(leftover), fmtBytes(test.leftover)) + } + } +}
tor-commits@lists.torproject.org