@@ -7,15 +7,15 @@ use multiaddr::{multiaddr, Multiaddr};
7
7
use p2p:: {
8
8
identity:: SecretKey ,
9
9
network:: identify:: {
10
- stream :: P2pNetworkIdentifyStreamState , P2pNetworkIdentify , P2pNetworkIdentifyAction ,
11
- P2pNetworkIdentifyStreamAction ,
10
+ stream_effectful :: P2pNetworkIdentifyStreamEffectfulAction , P2pNetworkIdentify ,
11
+ P2pNetworkIdentifyEffectfulAction , P2pNetworkIdentifyStreamAction ,
12
12
} ,
13
13
token:: { self , DiscoveryAlgorithm } ,
14
- Data , P2pAction , P2pNetworkAction , P2pNetworkYamuxAction , PeerId ,
14
+ Data , P2pEffectfulAction , P2pNetworkEffectfulAction , P2pNetworkYamuxAction , PeerId ,
15
15
} ;
16
16
use p2p_testing:: {
17
17
cluster:: { Cluster , ClusterBuilder , ClusterEvent , Listener } ,
18
- event:: { event_mapper_effect, RustNodeEvent } ,
18
+ event:: { allow_disconnections , event_mapper_effect, RustNodeEvent } ,
19
19
futures:: TryStreamExt ,
20
20
predicates:: { async_fn, listener_is_ready, peer_is_connected} ,
21
21
redux:: { Action , State } ,
@@ -103,12 +103,12 @@ async fn rust_node_to_rust_node() -> anyhow::Result<()> {
103
103
}
104
104
105
105
#[ tokio:: test]
106
- #[ ignore = "TODO: Add override for reducer" ]
107
106
/// Test that even if bad node spams many different listen_addrs we don't end up with duplicates
108
107
async fn test_bad_node ( ) -> anyhow:: Result < ( ) > {
109
108
let mut cluster = ClusterBuilder :: new ( )
110
109
. ports_with_len ( 100 )
111
110
. idle_duration ( Duration :: from_millis ( 100 ) )
111
+ . is_error ( allow_disconnections)
112
112
. start ( )
113
113
. await ?;
114
114
@@ -154,6 +154,9 @@ async fn test_bad_node() -> anyhow::Result<()> {
154
154
155
155
let expected_addrs = [
156
156
multiaddr ! ( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( bad_node_port) ) ,
157
+ multiaddr ! ( Unix ( "domain.com" ) ) ,
158
+ multiaddr ! ( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
159
+ multiaddr ! ( Https ) ,
157
160
multiaddr ! ( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( 10500u16 ) ) ,
158
161
multiaddr ! ( Ip6 ( [ 0 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
159
162
multiaddr ! ( Ip6 ( [ 1 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
@@ -171,103 +174,81 @@ fn bad_node_effects(
171
174
action : ActionWithMeta < Action > ,
172
175
) {
173
176
{
174
- let ( action, _meta ) = action. split ( ) ;
177
+ let ( action, meta ) = action. split ( ) ;
175
178
match action {
176
179
Action :: P2p ( a) => {
177
- match a. clone ( ) {
178
- P2pAction :: Network ( P2pNetworkAction :: Identify (
179
- P2pNetworkIdentifyAction :: Stream ( P2pNetworkIdentifyStreamAction :: New {
180
- addr,
181
- peer_id,
182
- stream_id,
183
- ..
184
- } ) ,
185
- ) ) => {
186
- let state = store
187
- . state ( )
188
- . state ( )
189
- . network
190
- . scheduler
191
- . identify_state
192
- . find_identify_stream_state ( & peer_id, & stream_id)
193
- . expect ( "Unable to find identify stream" ) ;
194
-
195
- if let P2pNetworkIdentifyStreamState :: SendIdentify = state {
196
- let listen_addrs = vec ! [
197
- multiaddr!( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( 10500u16 ) ) ,
198
- multiaddr!( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( 10500u16 ) ) ,
199
- multiaddr!( Ip6 ( [ 0 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
200
- multiaddr!( Ip6 ( [ 0 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
201
- multiaddr!( Ip6 ( [ 1 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
202
- multiaddr!( Ip6 ( [ 1 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
203
- multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
204
- multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
205
- multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
206
- multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
207
- multiaddr!( Unix ( "domain.com" ) ) ,
208
- multiaddr!( Https ) ,
209
- ] ;
210
-
211
- let public_key = Some ( SecretKey :: rand ( ) . public_key ( ) ) ;
212
-
213
- let protocols = vec ! [
214
- token:: StreamKind :: Identify (
215
- token:: IdentifyAlgorithm :: Identify1_0_0 ,
216
- ) ,
217
- token:: StreamKind :: Broadcast (
218
- p2p:: token:: BroadcastAlgorithm :: Meshsub1_1_0 ,
219
- ) ,
220
- p2p:: token:: StreamKind :: Rpc ( token:: RpcAlgorithm :: Rpc0_0_1 ) ,
221
- p2p:: token:: StreamKind :: Discovery (
222
- DiscoveryAlgorithm :: Kademlia1_0_0 ,
223
- ) ,
224
- ] ;
225
-
226
- let identify_msg = P2pNetworkIdentify {
227
- protocol_version : Some ( "ipfs/0.1.0" . to_string ( ) ) ,
228
- agent_version : Some ( "openmina" . to_owned ( ) ) ,
229
- public_key,
230
- listen_addrs,
231
- observed_addr : None ,
232
- protocols,
233
- } ;
234
-
235
- let mut out = Vec :: new ( ) ;
236
- let identify_msg_proto =
237
- identify_msg. to_proto_message ( ) . expect ( "serialized message" ) ;
238
-
239
- prost:: Message :: encode_length_delimited ( & identify_msg_proto, & mut out)
240
- . expect ( "Error converting message" ) ;
241
-
242
- store. dispatch ( Action :: P2p (
243
- P2pNetworkYamuxAction :: OutgoingData {
244
- addr,
245
- stream_id,
246
- data : Data ( out. into_boxed_slice ( ) ) ,
247
- flags : Default :: default ( ) ,
248
- }
249
- . into ( ) ,
250
- ) ) ;
251
-
252
- store. dispatch ( Action :: P2p (
253
- P2pNetworkIdentifyStreamAction :: Close {
254
- addr,
255
- peer_id,
256
- stream_id,
257
- }
258
- . into ( ) ,
259
- ) ) ;
260
- }
261
- }
262
- _ => {
263
- // p2p_effects(store, meta.with_action(a.clone()));
264
- }
265
- }
266
180
event_mapper_effect ( store, a) ;
267
181
}
268
- Action :: Idle ( _) | Action :: P2pEffectful ( _) => {
269
- // p2p_timeout_effects(store, &meta);
182
+ Action :: P2pEffectful ( P2pEffectfulAction :: Network (
183
+ P2pNetworkEffectfulAction :: Identify ( P2pNetworkIdentifyEffectfulAction :: Stream (
184
+ P2pNetworkIdentifyStreamEffectfulAction :: SendIdentify {
185
+ addr,
186
+ peer_id,
187
+ stream_id,
188
+ } ,
189
+ ) ) ,
190
+ ) ) => {
191
+ let listen_addrs = vec ! [
192
+ multiaddr!( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( 10500u16 ) ) ,
193
+ multiaddr!( Ip4 ( [ 127 , 0 , 0 , 1 ] ) , Tcp ( 10500u16 ) ) ,
194
+ multiaddr!( Ip6 ( [ 0 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
195
+ multiaddr!( Ip6 ( [ 0 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
196
+ multiaddr!( Ip6 ( [ 1 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
197
+ multiaddr!( Ip6 ( [ 1 ; 16 ] ) , Tcp ( 10500u16 ) ) ,
198
+ multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
199
+ multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
200
+ multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
201
+ multiaddr!( Dns ( "domain.com" ) , Tcp ( 10530u16 ) ) ,
202
+ multiaddr!( Unix ( "domain.com" ) ) ,
203
+ multiaddr!( Https ) ,
204
+ ] ;
205
+
206
+ let public_key = Some ( SecretKey :: rand ( ) . public_key ( ) ) ;
207
+
208
+ let protocols = vec ! [
209
+ token:: StreamKind :: Identify ( token:: IdentifyAlgorithm :: Identify1_0_0 ) ,
210
+ token:: StreamKind :: Broadcast ( p2p:: token:: BroadcastAlgorithm :: Meshsub1_1_0 ) ,
211
+ p2p:: token:: StreamKind :: Rpc ( token:: RpcAlgorithm :: Rpc0_0_1 ) ,
212
+ p2p:: token:: StreamKind :: Discovery ( DiscoveryAlgorithm :: Kademlia1_0_0 ) ,
213
+ ] ;
214
+
215
+ let identify_msg = P2pNetworkIdentify {
216
+ protocol_version : Some ( "ipfs/0.1.0" . to_string ( ) ) ,
217
+ agent_version : Some ( "openmina" . to_owned ( ) ) ,
218
+ public_key,
219
+ listen_addrs,
220
+ observed_addr : None ,
221
+ protocols,
222
+ } ;
223
+
224
+ let mut out = Vec :: new ( ) ;
225
+ let identify_msg_proto =
226
+ identify_msg. to_proto_message ( ) . expect ( "serialized message" ) ;
227
+
228
+ prost:: Message :: encode_length_delimited ( & identify_msg_proto, & mut out)
229
+ . expect ( "Error converting message" ) ;
230
+
231
+ store. dispatch ( Action :: P2p (
232
+ P2pNetworkYamuxAction :: OutgoingData {
233
+ addr,
234
+ stream_id,
235
+ data : Data ( out. into_boxed_slice ( ) ) ,
236
+ flags : Default :: default ( ) ,
237
+ }
238
+ . into ( ) ,
239
+ ) ) ;
240
+
241
+ store. dispatch ( Action :: P2p (
242
+ P2pNetworkIdentifyStreamAction :: Close {
243
+ addr,
244
+ peer_id,
245
+ stream_id,
246
+ }
247
+ . into ( ) ,
248
+ ) ) ;
270
249
}
250
+ Action :: P2pEffectful ( action) => action. effects ( meta, store) ,
251
+ _ => { }
271
252
} ;
272
253
}
273
254
}
0 commit comments