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