diff options
author | Jakob Borg <jakob@nym.se> | 2014-03-22 17:06:15 +0100 |
---|---|---|
committer | Jakob Borg <jakob@nym.se> | 2014-03-22 17:06:15 +0100 |
commit | 513100bb9227390ace03ce48767e61cb43ec9549 (patch) | |
tree | 3177654d1b1d759c8204c857cfc46cff48778af4 | |
parent | 68d9454bc483ad17751b1aa68c21c9cc06346b7b (diff) |
Fix tests for >1 CPU (fixes #99)
-rwxr-xr-x | build.sh | 2 | ||||
-rw-r--r-- | protocol/common_test.go | 34 | ||||
-rw-r--r-- | protocol/protocol_test.go | 31 |
3 files changed, 42 insertions, 25 deletions
@@ -15,7 +15,7 @@ prepare() { } test() { - go test ./... + go test -cpu=1,2,4 ./... } tarDist() { diff --git a/protocol/common_test.go b/protocol/common_test.go index 469c271efd..a24075e050 100644 --- a/protocol/common_test.go +++ b/protocol/common_test.go @@ -1,14 +1,23 @@ package protocol -import "io" +import ( + "io" + "time" +) type TestModel struct { - data []byte - repo string - name string - offset int64 - size int - closed bool + data []byte + repo string + name string + offset int64 + size int + closedCh chan bool +} + +func newTestModel() *TestModel { + return &TestModel{ + closedCh: make(chan bool), + } } func (t *TestModel) Index(nodeID string, files []FileInfo) { @@ -26,7 +35,16 @@ func (t *TestModel) Request(nodeID, repo, name string, offset int64, size int) ( } func (t *TestModel) Close(nodeID string, err error) { - t.closed = true + close(t.closedCh) +} + +func (t *TestModel) isClosed() bool { + select { + case <-t.closedCh: + return true + case <-time.After(1 * time.Second): + return false // Timeout + } } type ErrPipe struct { diff --git a/protocol/protocol_test.go b/protocol/protocol_test.go index c8f9cd3fbc..50a968ac78 100644 --- a/protocol/protocol_test.go +++ b/protocol/protocol_test.go @@ -5,7 +5,6 @@ import ( "io" "testing" "testing/quick" - "time" ) func TestHeaderFunctions(t *testing.T) { @@ -42,8 +41,8 @@ func TestPingErr(t *testing.T) { for i := 0; i < 12; i++ { for j := 0; j < 12; j++ { - m0 := &TestModel{} - m1 := &TestModel{} + m0 := newTestModel() + m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() @@ -69,8 +68,9 @@ func TestRequestResponseErr(t *testing.T) { var pass bool for i := 0; i < 48; i++ { for j := 0; j < 38; j++ { - m0 := &TestModel{data: []byte("response data")} - m1 := &TestModel{} + m0 := newTestModel() + m0.data = []byte("response data") + m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() @@ -83,11 +83,10 @@ func TestRequestResponseErr(t *testing.T) { d, err := c1.Request("default", "tn", 1234, 5678) if err == e || err == ErrClosed { t.Logf("Error at %d+%d bytes", i, j) - if !m1.closed { + if !m1.isClosed() { t.Error("c1 not closed") } - time.Sleep(1 * time.Millisecond) - if !m0.closed { + if !m0.isClosed() { t.Error("c0 not closed") } continue @@ -120,8 +119,8 @@ func TestRequestResponseErr(t *testing.T) { } func TestVersionErr(t *testing.T) { - m0 := &TestModel{} - m1 := &TestModel{} + m0 := newTestModel() + m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() @@ -136,14 +135,14 @@ func TestVersionErr(t *testing.T) { })) c0.flush() - if !m1.closed { + if !m1.isClosed() { t.Error("Connection should close due to unknown version") } } func TestTypeErr(t *testing.T) { - m0 := &TestModel{} - m1 := &TestModel{} + m0 := newTestModel() + m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() @@ -158,14 +157,14 @@ func TestTypeErr(t *testing.T) { })) c0.flush() - if !m1.closed { + if !m1.isClosed() { t.Error("Connection should close due to unknown message type") } } func TestClose(t *testing.T) { - m0 := &TestModel{} - m1 := &TestModel{} + m0 := newTestModel() + m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() |