@@ -427,4 +427,76 @@ describe('Address Manager', () => {
427
427
multiaddr ( `/ip6/${ internalIp } /${ protocol } /${ internalPort } /p2p/${ peerId . toString ( ) } ` )
428
428
] )
429
429
} )
430
+
431
+ it ( 'should add a public IPv4 address mapping when only local IPv6 addresses are present' , ( ) => {
432
+ const transportManager = stubInterface < TransportManager > ( )
433
+ const am = new AddressManager ( {
434
+ peerId,
435
+ transportManager,
436
+ peerStore,
437
+ events,
438
+ logger : defaultLogger ( )
439
+ } )
440
+
441
+ const internalIp = '2a00:23c6:14b1:7e00:28b8:30d:944e:27f3'
442
+ const internalPort = 4567
443
+ const externalIp = '81.12.12.1'
444
+ const externalPort = 8910
445
+ const protocol = 'tcp'
446
+
447
+ am . addPublicAddressMapping ( internalIp , internalPort , externalIp , externalPort , protocol )
448
+
449
+ // one loopback, one LAN address
450
+ transportManager . getAddrs . returns ( [
451
+ multiaddr ( `/ip6/${ internalIp } /${ protocol } /${ internalPort } ` )
452
+ ] )
453
+
454
+ // should have mapped the LAN address to the external IP
455
+ expect ( am . getAddresses ( ) ) . to . deep . equal ( [
456
+ multiaddr ( `/ip6/${ internalIp } /${ protocol } /${ internalPort } /p2p/${ peerId . toString ( ) } ` ) ,
457
+ multiaddr ( `/ip4/${ externalIp } /${ protocol } /${ externalPort } /p2p/${ peerId . toString ( ) } ` )
458
+ ] )
459
+
460
+ am . removePublicAddressMapping ( internalIp , internalPort , externalIp , externalPort , protocol )
461
+
462
+ expect ( am . getAddresses ( ) ) . to . deep . equal ( [
463
+ multiaddr ( `/ip6/${ internalIp } /${ protocol } /${ internalPort } /p2p/${ peerId . toString ( ) } ` )
464
+ ] )
465
+ } )
466
+
467
+ it ( 'should add a public IPv6 address mapping when only local IPv4 addresses are present' , ( ) => {
468
+ const transportManager = stubInterface < TransportManager > ( )
469
+ const am = new AddressManager ( {
470
+ peerId,
471
+ transportManager,
472
+ peerStore,
473
+ events,
474
+ logger : defaultLogger ( )
475
+ } )
476
+
477
+ const internalIp = '192.168.1.123'
478
+ const internalPort = 4567
479
+ const externalIp = '2a00:23c6:14b1:7e00:28b8:30d:944e:27f3'
480
+ const externalPort = 8910
481
+ const protocol = 'tcp'
482
+
483
+ am . addPublicAddressMapping ( internalIp , internalPort , externalIp , externalPort , protocol )
484
+
485
+ // one loopback, one LAN address
486
+ transportManager . getAddrs . returns ( [
487
+ multiaddr ( `/ip4/${ internalIp } /${ protocol } /${ internalPort } ` )
488
+ ] )
489
+
490
+ // should have mapped the LAN address to the external IP
491
+ expect ( am . getAddresses ( ) ) . to . deep . equal ( [
492
+ multiaddr ( `/ip4/${ internalIp } /${ protocol } /${ internalPort } /p2p/${ peerId . toString ( ) } ` ) ,
493
+ multiaddr ( `/ip6/${ externalIp } /${ protocol } /${ externalPort } /p2p/${ peerId . toString ( ) } ` )
494
+ ] )
495
+
496
+ am . removePublicAddressMapping ( internalIp , internalPort , externalIp , externalPort , protocol )
497
+
498
+ expect ( am . getAddresses ( ) ) . to . deep . equal ( [
499
+ multiaddr ( `/ip4/${ internalIp } /${ protocol } /${ internalPort } /p2p/${ peerId . toString ( ) } ` )
500
+ ] )
501
+ } )
430
502
} )
0 commit comments