-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathtcp_operator_test.go
109 lines (82 loc) · 2.05 KB
/
tcp_operator_test.go
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
package go2p
import (
"fmt"
"sync"
"testing"
"github.com/phayes/freeport"
"github.com/stretchr/testify/assert"
)
func TestTCPOperatorNegativeCases(t *testing.T) {
op := NewTCPOperator("ttt", "10.10.10.10")
err := op.Dial("ttt", "foo")
assert.Error(t, err)
err = op.Dial("tcp", "foo")
assert.Error(t, err)
err = op.Start()
assert.Error(t, err)
op = NewTCPOperator("tcp", "foo")
err = op.Start()
assert.Error(t, err)
port, _ := freeport.GetFreePort()
op = NewTCPOperator("tcp", fmt.Sprintf("localhost:%d", port))
onErrCalled := new(sync.WaitGroup)
onErrCalled.Add(1)
op.OnError(func(err error) {
assert.Error(t, err)
onErrCalled.Done()
})
op.Start()
op.server.Close()
onErrCalled.Wait()
}
func TestPingPong(t *testing.T) {
clientsWg := new(sync.WaitGroup)
clientsWg.Add(2)
msgWg := new(sync.WaitGroup)
msgWg.Add(2)
op1 := NewTCPOperator("tcp", "127.0.0.1:3377")
op2 := NewTCPOperator("tcp", "127.0.0.1:3378")
conn1 := NewNetworkConnection().
WithOperator(op1).
Build()
conn2 := NewNetworkConnection().
WithOperator(op2).
Build()
conn1.OnPeer(func(p *Peer) {
clientsWg.Done()
if p.RemoteAddress() != "tcp:127.0.0.1:3378" {
t.Fatal("unexpected address", p.RemoteAddress())
return
}
clientsWg.Wait()
conn1.Send(NewMessageFromData([]byte("hello")), p.RemoteAddress())
})
conn2.OnPeer(func(p *Peer) {
clientsWg.Done()
})
conn1.OnMessage(func(p *Peer, m *Message) {
assert.Equal(t, "hello back", m.PayloadGetString())
fmt.Printf("from %s: %s\n", p.RemoteAddress(), m.PayloadGetString())
msgWg.Done()
})
conn2.OnMessage(func(p *Peer, m *Message) {
assert.Equal(t, "hello", m.PayloadGetString())
fmt.Printf("from %s: %s\n", p.RemoteAddress(), m.PayloadGetString())
go conn2.Send(NewMessageFromData([]byte("hello back")), p.RemoteAddress())
msgWg.Done()
})
err := conn1.Start()
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
err = conn2.Start()
if err != nil {
t.Fatal(err)
}
conn1.ConnectTo("tcp", "localhost:3378")
clientsWg.Wait()
msgWg.Wait()
conn1.Stop()
conn2.Stop()
}