[tor-commits] [goptlib/master] Add tests for extOrPortSendCommand.
dcf at torproject.org
dcf at torproject.org
Wed Nov 27 07:51:00 UTC 2013
commit a9b670802070c304e233533af8dd9e2712fd0b9b
Author: David Fifield <david at bamsoftware.com>
Date: Tue Nov 26 22:41:07 2013 -0800
Add tests for extOrPortSendCommand.
---
pt_test.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/pt_test.go b/pt_test.go
index 979dd56..1201e8a 100644
--- a/pt_test.go
+++ b/pt_test.go
@@ -2,6 +2,7 @@ package pt
import (
"bytes"
+ "fmt"
"io/ioutil"
"net"
"os"
@@ -372,3 +373,61 @@ func TestReadAuthCookie(t *testing.T) {
}
}
}
+
+// Elide a byte slice in case it's really long.
+func fmtBytes(s []byte) string {
+ if len(s) > 100 {
+ return fmt.Sprintf("%q...(%d bytes)", s[:5], len(s))
+ } else {
+ return fmt.Sprintf("%q", s)
+ }
+}
+
+func TestExtOrSendCommand(t *testing.T) {
+ badTests := [...]struct {
+ cmd uint16
+ body []byte
+ }{
+ {0x0, make([]byte, 65536)},
+ {0x1234, make([]byte, 65536)},
+ }
+ longBody := [65535 + 2 + 2]byte{0x12, 0x34, 0xff, 0xff}
+ goodTests := [...]struct {
+ cmd uint16
+ body []byte
+ expected []byte
+ }{
+ {0x0, []byte(""), []byte("\x00\x00\x00\x00")},
+ {0x5, []byte(""), []byte("\x00\x05\x00\x00")},
+ {0xfffe, []byte(""), []byte("\xff\xfe\x00\x00")},
+ {0xffff, []byte(""), []byte("\xff\xff\x00\x00")},
+ {0x1234, []byte("hello"), []byte("\x12\x34\x00\x05hello")},
+ {0x1234, make([]byte, 65535), longBody[:]},
+ }
+
+ for _, test := range badTests {
+ var buf bytes.Buffer
+ err := extOrPortSendCommand(&buf, test.cmd, test.body)
+ if err == nil {
+ t.Errorf("0x%04x %s unexpectedly succeeded", test.cmd, fmtBytes(test.body))
+ }
+ }
+
+ for _, test := range goodTests {
+ var buf bytes.Buffer
+ err := extOrPortSendCommand(&buf, test.cmd, test.body)
+ if err != nil {
+ t.Errorf("0x%04x %s unexpectedly returned an error: %s", test.cmd, fmtBytes(test.body), err)
+ }
+ p := make([]byte, 65535+2+2)
+ n, err := buf.Read(p)
+ if err != nil {
+ t.Fatal(err)
+ }
+ output := p[:n]
+ if !bytes.Equal(output, test.expected) {
+ t.Errorf("0x%04x %s â %s (expected %s)", test.cmd, fmtBytes(test.body),
+ fmtBytes(output), fmtBytes(test.expected))
+ }
+ }
+}
More information about the tor-commits
mailing list