parent
2b95dd8fbd
commit
99812f10b7
@ -0,0 +1,94 @@ |
|||||||
|
package msgq |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"testing" |
||||||
|
|
||||||
|
"github.com/libp2p/go-libp2p-core/peer" |
||||||
|
) |
||||||
|
|
||||||
|
func TestNew(t *testing.T) { |
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
cap int |
||||||
|
}{ |
||||||
|
{"unbuffered", 0}, |
||||||
|
{"buffered10", 10}, |
||||||
|
{"buffered100", 100}, |
||||||
|
} |
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
got := New(tt.cap) |
||||||
|
if cap(got.ch) != tt.cap { |
||||||
|
t.Errorf("New() ch cap %d, want %d", cap(got.ch), tt.cap) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func TestQueue_AddMessage(t *testing.T) { |
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
cap int |
||||||
|
}{ |
||||||
|
{"unbuffered", 0}, |
||||||
|
{"buffered", 100}, |
||||||
|
} |
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
q := &Queue{ch: make(chan message, tt.cap)} |
||||||
|
for i := 0; i < tt.cap+10; i++ { |
||||||
|
var wantErr error |
||||||
|
if i >= tt.cap { |
||||||
|
wantErr = ErrRxOverrun |
||||||
|
} else { |
||||||
|
wantErr = nil |
||||||
|
} |
||||||
|
err := q.AddMessage([]byte{}, peer.ID("")) |
||||||
|
if err != wantErr { |
||||||
|
t.Fatalf("AddMessage() iter %d, error = %v, want %v", |
||||||
|
i, err, wantErr) |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
type testMessageHandler struct { |
||||||
|
t *testing.T |
||||||
|
seq int |
||||||
|
} |
||||||
|
|
||||||
|
func (h *testMessageHandler) HandleMessage(content []byte, sender peer.ID) { |
||||||
|
got, want := string(content), fmt.Sprint(h.seq) |
||||||
|
if got != want { |
||||||
|
h.t.Errorf("out-of-sequence message %v, want %v", got, want) |
||||||
|
} |
||||||
|
h.seq++ |
||||||
|
} |
||||||
|
|
||||||
|
func TestQueue_HandleMessages(t *testing.T) { |
||||||
|
ch := make(chan message, 500) |
||||||
|
for seq := 0; seq < cap(ch); seq++ { |
||||||
|
ch <- message{content: []byte(fmt.Sprint(seq))} |
||||||
|
} |
||||||
|
close(ch) |
||||||
|
q := &Queue{ch: ch} |
||||||
|
q.HandleMessages(&testMessageHandler{t: t}) |
||||||
|
} |
||||||
|
|
||||||
|
func TestQueue_Close(t *testing.T) { |
||||||
|
q := &Queue{ch: make(chan message, 100)} |
||||||
|
err := q.Close() |
||||||
|
if err != nil { |
||||||
|
t.Errorf("Close() error = %v, want nil", err) |
||||||
|
} |
||||||
|
select { |
||||||
|
case m, ok := <-q.ch: |
||||||
|
if ok { |
||||||
|
t.Errorf("unexpected message %v", m) |
||||||
|
} |
||||||
|
default: |
||||||
|
t.Error("channel closed but not ready") |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue