Browse Source

Fix tests for >1 CPU (fixes #99)

Jakob Borg 11 years ago
parent
commit
513100bb92
3 changed files with 42 additions and 25 deletions
  1. 1 1
      build.sh
  2. 26 8
      protocol/common_test.go
  3. 15 16
      protocol/protocol_test.go

+ 1 - 1
build.sh

@@ -15,7 +15,7 @@ prepare() {
 }
 
 test() {
-	go test ./...
+	go test -cpu=1,2,4 ./...
 }
 
 tarDist() {

+ 26 - 8
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 {

+ 15 - 16
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()