[tor-commits] [meek/master] Tests for grepHelperAddr.

dcf at torproject.org dcf at torproject.org
Tue Mar 5 20:18:05 UTC 2019


commit a07bb28ba27c4f3336c7d685f0016a75e985811d
Author: David Fifield <david at bamsoftware.com>
Date:   Tue Mar 5 13:17:35 2019 -0700

    Tests for grepHelperAddr.
---
 meek-client-torbrowser/protocol_test.go | 88 +++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/meek-client-torbrowser/protocol_test.go b/meek-client-torbrowser/protocol_test.go
new file mode 100644
index 0000000..e127c4f
--- /dev/null
+++ b/meek-client-torbrowser/protocol_test.go
@@ -0,0 +1,88 @@
+package main
+
+import (
+	"bytes"
+	"errors"
+	"io"
+	"testing"
+	"time"
+)
+
+const timeout = 50 * time.Millisecond
+var errTimedout = errors.New("timed out")
+
+type infiniteReader struct{}
+
+func (r *infiniteReader) Read(p []byte) (int, error) {
+	for i := range p {
+		p[i] = '\n'
+	}
+	return len(p), nil
+}
+
+func grepHelperAddrTimeout(r io.Reader) (string, error) {
+	type result struct {
+		s string
+		err error
+	}
+	ch := make(chan result)
+	go func() {
+		s, err := grepHelperAddr(r)
+		ch <- result {
+			s: s,
+			err: err,
+		}
+	}()
+
+	select {
+	case result := <-ch:
+		return result.s, result.err
+	case <-time.After(timeout):
+		return "", errTimedout
+	}
+}
+
+func TestGrepHelperAddr(t *testing.T) {
+	const expectedAddr = "127.0.0.1:1000"
+
+	// bad tests
+	for _, test := range []string{
+		"",
+		"xmeek-http-helper: listen " + expectedAddr + "\n",
+		"meek-http-helper: listen 127.0.0.1:\n",
+		"meek-http-helper: listen " + expectedAddr + " \n",
+		"meek-http-helper: listen " + expectedAddr + "abc\n",
+	} {
+		b := bytes.NewBufferString(test)
+		s, err := grepHelperAddrTimeout(b)
+		if err != io.EOF {
+			t.Errorf("%q → (%q, %v), should have been %v", test, s, err, io.EOF)
+		}
+		// test again with an endless reader
+		b = bytes.NewBufferString(test)
+		s, err = grepHelperAddrTimeout(io.MultiReader(b, &infiniteReader{}))
+		if err != errTimedout {
+			t.Errorf("%q → (%q, %v), should have been %v", test, s, err, errTimedout)
+		}
+	}
+
+	// good tests
+	for _, test := range []string{
+		"meek-http-helper: listen " + expectedAddr,
+		"meek-http-helper: listen " + expectedAddr+ "\njunk",
+		"junk\nmeek-http-helper: listen " + expectedAddr + "\njunk",
+		"meek-http-helper: listen " + expectedAddr + "\nmeek-http-helper: listen 1.2.3.4:9999\n",
+	} {
+		b := bytes.NewBufferString(test)
+		s, err := grepHelperAddrTimeout(b)
+		if err != nil || s != expectedAddr {
+			t.Errorf("%q → (%q, %v), should have been %q", test, s, err, expectedAddr)
+		}
+		// test again with an endless reader
+		b = bytes.NewBufferString(test)
+		s, err = grepHelperAddrTimeout(io.MultiReader(b, &infiniteReader{}))
+		if err != nil || s != expectedAddr {
+			t.Errorf("%q → (%q, %v), should have been %q", test, s, err, expectedAddr)
+		}
+	}
+}



More information about the tor-commits mailing list