@@ -214,12 +214,18 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
214
214
auto peerLogic = PeerManager::make (chainparams, *connman, *m_node.addrman , banman.get (),
215
215
*m_node.scheduler , *m_node.chainman , *m_node.mempool , false );
216
216
217
- const std::array<CAddress, 2 > addr{CAddress{ip (0xa0b0c001 ), NODE_NONE},
218
- CAddress{ip (0xa0b0c002 ), NODE_NONE}};
217
+ CNetAddr tor_netaddr;
218
+ BOOST_REQUIRE (
219
+ tor_netaddr.SetSpecial (" pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion" ));
220
+ const CService tor_service{tor_netaddr, Params ().GetDefaultPort ()};
221
+
222
+ const std::array<CAddress, 3 > addr{CAddress{ip (0xa0b0c001 ), NODE_NONE},
223
+ CAddress{ip (0xa0b0c002 ), NODE_NONE},
224
+ CAddress{tor_service, NODE_NONE}};
219
225
220
226
const CNetAddr other_addr{ip (0xa0b0ff01 )}; // Not any of addr[].
221
227
222
- std::array<CNode*, 2 > nodes;
228
+ std::array<CNode*, 3 > nodes;
223
229
224
230
banman->ClearBanned ();
225
231
nodes[0 ] = new CNode{id++, NODE_NETWORK, INVALID_SOCKET, addr[0 ], /* nKeyedNetGroupIn */ 0 ,
@@ -267,6 +273,27 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
267
273
BOOST_CHECK (banman->IsDiscouraged (addr[1 ]));
268
274
BOOST_CHECK (nodes[1 ]->fDisconnect );
269
275
276
+ // Make sure non-IP peers are discouraged and disconnected properly.
277
+
278
+ nodes[2 ] = new CNode{id++, NODE_NETWORK, INVALID_SOCKET, addr[2 ], /* nKeyedNetGroupIn */ 1 ,
279
+ /* nLocalHostNonceIn */ 1 , CAddress (), /* pszDest */ " " ,
280
+ ConnectionType::OUTBOUND_FULL_RELAY, /* inbound_onion */ false };
281
+ nodes[2 ]->SetCommonVersion (PROTOCOL_VERSION);
282
+ peerLogic->InitializeNode (nodes[2 ]);
283
+ nodes[2 ]->fSuccessfullyConnected = true ;
284
+ connman->AddNode (*nodes[2 ]);
285
+ peerLogic->Misbehaving (nodes[2 ]->GetId (), DISCOURAGEMENT_THRESHOLD, /* message */ " " );
286
+ {
287
+ LOCK (nodes[2 ]->cs_sendProcessing );
288
+ BOOST_CHECK (peerLogic->SendMessages (nodes[2 ]));
289
+ }
290
+ BOOST_CHECK (banman->IsDiscouraged (addr[0 ]));
291
+ BOOST_CHECK (banman->IsDiscouraged (addr[1 ]));
292
+ BOOST_CHECK (banman->IsDiscouraged (addr[2 ]));
293
+ BOOST_CHECK (nodes[0 ]->fDisconnect );
294
+ BOOST_CHECK (nodes[1 ]->fDisconnect );
295
+ BOOST_CHECK (nodes[2 ]->fDisconnect );
296
+
270
297
for (CNode* node : nodes) {
271
298
peerLogic->FinalizeNode (*node);
272
299
}
0 commit comments