@@ -72,6 +72,23 @@ func handshakeExchange(tester *p2ptest.ProtocolTester, peerID enode.ID, serveHea
72
72
})
73
73
}
74
74
75
+ // This message is exchanged between two Swarm nodes to check if the connection drops
76
+ func dummyHandshakeMessage (tester * p2ptest.ProtocolTester , peerID enode.ID ) error {
77
+ return tester .TestExchanges (
78
+ p2ptest.Exchange {
79
+ Label : "Handshake" ,
80
+ Triggers : []p2ptest.Trigger {
81
+ {
82
+ Code : 0 ,
83
+ Msg : Handshake {
84
+ ServeHeaders : true ,
85
+ },
86
+ Peer : peerID ,
87
+ },
88
+ },
89
+ })
90
+ }
91
+
75
92
// tests handshake between eth node and swarm node
76
93
// on successful handshake the protocol does not go idle
77
94
// peer added to the pool and serves headers is registered
@@ -89,18 +106,10 @@ func TestBzzEthHandshake(t *testing.T) {
89
106
}
90
107
91
108
// after successful handshake, expect peer added to peer pool
92
- var p * Peer
93
- for i := 0 ; i < 10 ; i ++ {
94
- p = b .peers .get (node .ID ())
95
- if p != nil {
96
- break
97
- }
98
- time .Sleep (100 * time .Millisecond )
99
- }
109
+ p := getPeerAfterConnection (node .ID (), b )
100
110
if p == nil {
101
111
t .Fatal ("bzzeth peer not added" )
102
112
}
103
-
104
113
if ! p .serveHeaders {
105
114
t .Fatal ("bzzeth peer serveHeaders not set" )
106
115
}
@@ -114,35 +123,103 @@ func TestBzzEthHandshake(t *testing.T) {
114
123
115
124
// TestBzzBzzHandshake tests that a handshake between two Swarm nodes
116
125
func TestBzzBzzHandshake (t * testing.T ) {
126
+ // redefine isSwarmNodeFunc to force recognise remote peer as swarm node
127
+ defer func (f func (* Peer ) bool ) {
128
+ isSwarmNodeFunc = f
129
+ }(isSwarmNodeFunc )
130
+ isSwarmNodeFunc = func (_ * Peer ) bool { return true }
131
+
117
132
tester , b , teardown , err := newBzzEthTester ()
118
133
if err != nil {
119
134
t .Fatal (err )
120
135
}
121
136
defer teardown ()
122
137
138
+ node := tester .Nodes [0 ]
139
+ err = handshakeExchange (tester , node .ID (), false , true )
140
+ if err != nil {
141
+ t .Fatalf ("expected no error, got %v" , err )
142
+ }
143
+
144
+ // after successful handshake, expect peer added to peer pool
145
+ p := getPeerAfterConnection (node .ID (), b )
146
+ if p == nil {
147
+ t .Fatal ("bzzeth peer not added" )
148
+ }
149
+
150
+ // after closing the protocol, expect disconnect
151
+ close (b .quit )
152
+ err = tester .TestDisconnected (& p2ptest.Disconnect {Peer : node .ID (), Error : errors .New ("?" )})
153
+ if err == nil || err .Error () != "timed out waiting for peers to disconnect" {
154
+ t .Fatal (err )
155
+ }
156
+ }
157
+
158
+ // TestBzzBzzHandshakeWithMessage tests that a handshake between two Swarm nodes and message exchange
159
+ // disconnects the peer
160
+ func TestBzzBzzHandshakeWithMessage (t * testing.T ) {
123
161
// redefine isSwarmNodeFunc to force recognise remote peer as swarm node
124
162
defer func (f func (* Peer ) bool ) {
125
163
isSwarmNodeFunc = f
126
164
}(isSwarmNodeFunc )
127
165
isSwarmNodeFunc = func (_ * Peer ) bool { return true }
128
166
167
+ tester , b , teardown , err := newBzzEthTester ()
168
+ if err != nil {
169
+ t .Fatal (err )
170
+ }
171
+ defer teardown ()
172
+
129
173
node := tester .Nodes [0 ]
130
174
err = handshakeExchange (tester , node .ID (), false , true )
131
175
if err != nil {
132
176
t .Fatalf ("expected no error, got %v" , err )
133
177
}
134
178
135
- // after handshake expect protocol to hang, peer not added to pool
136
- p := b .peers .get (node .ID ())
137
- if p != nil {
138
- t .Fatal ("bzzeth swarm peer incorrectly added" )
179
+ // after successful handshake, expect peer added to peer pool
180
+ var p * Peer
181
+ for i := 0 ; i < 10 ; i ++ {
182
+ p = b .peers .get (node .ID ())
183
+ if p != nil {
184
+ break
185
+ }
186
+ time .Sleep (100 * time .Millisecond )
187
+ }
188
+ if p == nil {
189
+ t .Fatal ("bzzeth peer not added" )
139
190
}
140
191
141
- // after closing the ptotocall, expect disconnect
142
- close (b .quit )
143
- err = tester .TestDisconnected (& p2ptest.Disconnect {Peer : node .ID (), Error : errors .New ("protocol returned" )})
192
+ // Send a dummy handshake message, wait for sometime and check if peer is dropped
193
+ err = dummyHandshakeMessage (tester , node .ID ())
144
194
if err != nil {
145
195
t .Fatal (err )
146
196
}
197
+ // after successful handshake, expect peer added to peer pool
198
+ p1 := isPeerDisconnected (node .ID (), b )
199
+ if p1 != nil {
200
+ t .Fatal ("bzzeth peer still connected" )
201
+ }
202
+ }
203
+
204
+ func getPeerAfterConnection (id enode.ID , b * BzzEth ) (p * Peer ) {
205
+ for i := 0 ; i < 10 ; i ++ {
206
+ p = b .peers .get (id )
207
+ if p != nil {
208
+ break
209
+ }
210
+ time .Sleep (100 * time .Millisecond )
211
+ }
212
+ return
213
+ }
147
214
215
+ func isPeerDisconnected (id enode.ID , b * BzzEth ) (p * Peer ) {
216
+ var p1 * Peer
217
+ for i := 0 ; i < 10 ; i ++ {
218
+ p1 = b .peers .get (id )
219
+ if p1 == nil {
220
+ break
221
+ }
222
+ time .Sleep (100 * time .Millisecond )
223
+ }
224
+ return
148
225
}
0 commit comments