@@ -227,4 +227,93 @@ BOOST_AUTO_TEST_CASE(ipv4_peer_with_ipv6_addrMe_test)
227
227
BOOST_CHECK (1 );
228
228
}
229
229
230
+
231
+ BOOST_AUTO_TEST_CASE (LimitedAndReachable_Network)
232
+ {
233
+ SetLimited (NET_IPV4, true );
234
+ SetLimited (NET_IPV6, true );
235
+ SetLimited (NET_ONION, true );
236
+
237
+ BOOST_CHECK_EQUAL (IsLimited (NET_IPV4), true );
238
+ BOOST_CHECK_EQUAL (IsLimited (NET_IPV6), true );
239
+ BOOST_CHECK_EQUAL (IsLimited (NET_ONION), true );
240
+
241
+ BOOST_CHECK_EQUAL (IsReachable (NET_IPV4), false );
242
+ BOOST_CHECK_EQUAL (IsReachable (NET_IPV6), false );
243
+ BOOST_CHECK_EQUAL (IsReachable (NET_ONION), false );
244
+
245
+
246
+ SetLimited (NET_IPV4, false );
247
+ SetLimited (NET_IPV6, false );
248
+ SetLimited (NET_ONION, false );
249
+
250
+ BOOST_CHECK_EQUAL (IsLimited (NET_IPV4), false );
251
+ BOOST_CHECK_EQUAL (IsLimited (NET_IPV6), false );
252
+ BOOST_CHECK_EQUAL (IsLimited (NET_ONION), false );
253
+
254
+ BOOST_CHECK_EQUAL (IsReachable (NET_IPV4), true );
255
+ BOOST_CHECK_EQUAL (IsReachable (NET_IPV6), true );
256
+ BOOST_CHECK_EQUAL (IsReachable (NET_ONION), true );
257
+ }
258
+
259
+ BOOST_AUTO_TEST_CASE (LimitedAndReachable_NetworkCaseUnroutableAndInternal)
260
+ {
261
+ BOOST_CHECK_EQUAL (IsLimited (NET_UNROUTABLE), false );
262
+ BOOST_CHECK_EQUAL (IsLimited (NET_INTERNAL), false );
263
+
264
+ BOOST_CHECK_EQUAL (IsReachable (NET_UNROUTABLE), true );
265
+ BOOST_CHECK_EQUAL (IsReachable (NET_INTERNAL), true );
266
+
267
+ SetLimited (NET_UNROUTABLE, true );
268
+ SetLimited (NET_INTERNAL, true );
269
+
270
+ BOOST_CHECK_EQUAL (IsLimited (NET_UNROUTABLE), false ); // Ignored for both networks
271
+ BOOST_CHECK_EQUAL (IsLimited (NET_INTERNAL), false );
272
+
273
+ BOOST_CHECK_EQUAL (IsReachable (NET_UNROUTABLE), true );
274
+ BOOST_CHECK_EQUAL (IsReachable (NET_INTERNAL), true );
275
+ }
276
+
277
+ CNetAddr UtilBuildAddress (unsigned char p1, unsigned char p2, unsigned char p3, unsigned char p4)
278
+ {
279
+ unsigned char ip[] = {p1, p2, p3, p4};
280
+
281
+ struct sockaddr_in sa;
282
+ memset (&sa, 0 , sizeof (sockaddr_in)); // initialize the memory block
283
+ memcpy (&(sa.sin_addr ), &ip, sizeof (ip));
284
+ return CNetAddr (sa.sin_addr );
285
+ }
286
+
287
+
288
+ BOOST_AUTO_TEST_CASE (LimitedAndReachable_CNetAddr)
289
+ {
290
+ CNetAddr addr = UtilBuildAddress (0x001 , 0x001 , 0x001 , 0x001 ); // 1.1.1.1
291
+
292
+ SetLimited (NET_IPV4, false );
293
+ BOOST_CHECK_EQUAL (IsLimited (addr), false );
294
+ BOOST_CHECK_EQUAL (IsReachable (addr), true );
295
+
296
+ SetLimited (NET_IPV4, true );
297
+ BOOST_CHECK_EQUAL (IsLimited (addr), true );
298
+ BOOST_CHECK_EQUAL (IsReachable (addr), false );
299
+
300
+ SetLimited (NET_IPV4, false ); // have to reset this, because this is stateful.
301
+ }
302
+
303
+
304
+ BOOST_AUTO_TEST_CASE (LocalAddress_BasicLifecycle)
305
+ {
306
+ CService addr = CService (UtilBuildAddress (0x002 , 0x001 , 0x001 , 0x001 ), 1000 ); // 2.1.1.1:1000
307
+
308
+ SetLimited (NET_IPV4, false );
309
+
310
+ BOOST_CHECK_EQUAL (IsLocal (addr), false );
311
+ BOOST_CHECK_EQUAL (AddLocal (addr, 1000 ), true );
312
+ BOOST_CHECK_EQUAL (IsLocal (addr), true );
313
+
314
+ RemoveLocal (addr);
315
+ BOOST_CHECK_EQUAL (IsLocal (addr), false );
316
+ }
317
+
318
+
230
319
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments