@@ -1199,6 +1199,59 @@ fn test_handle_iwant_msg_not_cached() {
1199
1199
) ;
1200
1200
}
1201
1201
1202
+ #[ test]
1203
+ fn test_handle_iwant_msg_but_already_sent_idontwant ( ) {
1204
+ let ( mut gs, peers, receivers, _) = inject_nodes1 ( )
1205
+ . peer_no ( 20 )
1206
+ . topics ( Vec :: new ( ) )
1207
+ . to_subscribe ( true )
1208
+ . create_network ( ) ;
1209
+
1210
+ let raw_message = RawMessage {
1211
+ source : Some ( peers[ 11 ] ) ,
1212
+ data : vec ! [ 1 , 2 , 3 , 4 ] ,
1213
+ sequence_number : Some ( 1u64 ) ,
1214
+ topic : TopicHash :: from_raw ( "topic" ) ,
1215
+ signature : None ,
1216
+ key : None ,
1217
+ validated : true ,
1218
+ } ;
1219
+
1220
+ // Transform the inbound message
1221
+ let message = & gs
1222
+ . data_transform
1223
+ . inbound_transform ( raw_message. clone ( ) )
1224
+ . unwrap ( ) ;
1225
+
1226
+ let msg_id = gs. config . message_id ( message) ;
1227
+ gs. mcache . put ( & msg_id, raw_message) ;
1228
+
1229
+ // Receive IDONTWANT from Peer 1.
1230
+ let rpc = Rpc {
1231
+ messages : vec ! [ ] ,
1232
+ subscriptions : vec ! [ ] ,
1233
+ control_msgs : vec ! [ ControlAction :: IDontWant ( IDontWant {
1234
+ message_ids: vec![ msg_id. clone( ) ] ,
1235
+ } ) ] ,
1236
+ } ;
1237
+ gs. on_connection_handler_event (
1238
+ peers[ 1 ] ,
1239
+ ConnectionId :: new_unchecked ( 0 ) ,
1240
+ HandlerEvent :: Message {
1241
+ rpc,
1242
+ invalid_messages : vec ! [ ] ,
1243
+ } ,
1244
+ ) ;
1245
+
1246
+ // Receive IWANT from Peer 1.
1247
+ gs. handle_iwant ( & peers[ 1 ] , vec ! [ msg_id. clone( ) ] ) ;
1248
+
1249
+ // Check that no messages are sent.
1250
+ receivers. iter ( ) . for_each ( |( _, receiver) | {
1251
+ assert ! ( receiver. non_priority. get_ref( ) . is_empty( ) ) ;
1252
+ } ) ;
1253
+ }
1254
+
1202
1255
/// tests that an event is created when a peer shares that it has a message we want
1203
1256
#[ test]
1204
1257
fn test_handle_ihave_subscribed_and_msg_not_cached ( ) {
0 commit comments