-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient_test.go
More file actions
116 lines (98 loc) · 3.4 KB
/
client_test.go
File metadata and controls
116 lines (98 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree.
package collider
import (
"testing"
"github.com/tihtw/collider/collidertest"
)
func TestNewClient(t *testing.T) {
id := "abc"
c := newClient(id, nil)
if c.id != id {
t.Errorf("newClient(%q).id = %s, want %q", id, c.id, id)
}
if c.rwc != nil {
t.Errorf("newClient(%q).rwc = %v, want nil", id, c.rwc)
}
if c.msgs != nil {
t.Errorf("newClient(%q).msgs = %v, want nil", id, c.msgs)
}
}
// Tests that registering the client twice will fail.
func TestClientRegister(t *testing.T) {
id := "abc"
c := newClient(id, nil)
var rwc collidertest.MockReadWriteCloser
if err := c.register(&rwc); err != nil {
t.Errorf("newClient(%q).register(%v) got error: %s, want nil", id, &rwc, err.Error())
}
if c.rwc != &rwc {
t.Errorf("client.rwc after client.register(%v) = %v, want %v", &rwc, c.rwc, &rwc)
}
// Register again and it should fail.
if err := c.register(&rwc); err == nil {
t.Errorf("Second call of client.register(%v): nil, want !nil error", &rwc)
}
}
// Tests that queued messages are delivered in sendQueued.
func TestClientSendQueued(t *testing.T) {
src := newClient("abc", nil)
src.enqueue("hello")
dest := newClient("def", nil)
rwc := collidertest.MockReadWriteCloser{Closed: false}
dest.register(&rwc)
src.sendQueued(dest)
if rwc.Msg == "" {
t.Errorf("After sending queued messages from src to dest, dest.rwc.Msg = %v, want non-empty", rwc.Msg)
}
if len(src.msgs) != 0 {
t.Errorf("After sending queued messages from src to dest, src.msgs = %v, want empty", src.msgs)
}
}
// Tests that messages are queued when the other client is not registered, or delivered immediately otherwise.
func TestClientSend(t *testing.T) {
src := newClient("abc", nil)
dest := newClient("def", nil)
// The message should be queued since dest has not registered.
m := "hello"
if err := src.send(dest, m); err != nil {
t.Errorf("When dest is not registered, src.send(dest, %q) got error: %s, want nil", m, err.Error())
}
if len(src.msgs) != 1 || src.msgs[0] != m {
t.Errorf("After src.send(dest, %q) when dest is not registered, src.msgs = %v, want [%q]", m, src.msgs, m)
}
rwc := collidertest.MockReadWriteCloser{Closed: false}
dest.register(&rwc)
// The message should be sent this time.
m2 := "hi"
src.send(dest, m2)
if rwc.Msg == "" {
t.Errorf("When dest is registered, after src.send(dest, %q), dest.rwc.Msg = %v, want %q", m2, rwc.Msg, m2)
}
if len(src.msgs) != 1 || src.msgs[0] != m {
t.Errorf("When dest is registered, after src.send(dest, %q), src.msgs = %v, want [%q]", m2, src.msgs, m)
}
}
// Tests that deregistering the client will close the ReadWriteCloser.
func TestClientDeregister(t *testing.T) {
c := newClient("abc", nil)
rwc := collidertest.MockReadWriteCloser{Closed: false}
c.register(&rwc)
c.deregister()
if !rwc.Closed {
t.Errorf("After client.close(), rwc.Closed = %t, want true", rwc.Closed)
}
}
func TestClientMaxQueuedMsg(t *testing.T) {
c := newClient("abc", nil)
for i := 0; i < maxQueuedMsgCount; i++ {
if err := c.enqueue("msg"); err != nil {
t.Errorf("client.enqueue(...) got error %v after %d calls, want nil", err, i)
}
}
if err := c.enqueue("msg"); err == nil {
t.Error("client.enqueue(...) got no error after maxQueuedMsgCount + 1 calls, want error")
}
}