@@ -65,6 +65,51 @@ func TestAddrsForDial(t *testing.T) {
65
65
require .NotZero (t , len (mas ))
66
66
}
67
67
68
+ func TestDedupAddrsForDial (t * testing.T ) {
69
+ mockResolver := madns.MockResolver {IP : make (map [string ][]net.IPAddr )}
70
+ ipaddr , err := net .ResolveIPAddr ("ip4" , "1.2.3.4" )
71
+ if err != nil {
72
+ t .Fatal (err )
73
+ }
74
+ mockResolver .IP ["example.com" ] = []net.IPAddr {* ipaddr }
75
+
76
+ resolver , err := madns .NewResolver (madns .WithDomainResolver ("example.com" , & mockResolver ))
77
+ if err != nil {
78
+ t .Fatal (err )
79
+ }
80
+
81
+ priv , _ , err := crypto .GenerateEd25519Key (rand .Reader )
82
+ require .NoError (t , err )
83
+ id , err := peer .IDFromPrivateKey (priv )
84
+ require .NoError (t , err )
85
+
86
+ ps , err := pstoremem .NewPeerstore ()
87
+ require .NoError (t , err )
88
+ ps .AddPubKey (id , priv .GetPublic ())
89
+ ps .AddPrivKey (id , priv )
90
+ t .Cleanup (func () { ps .Close () })
91
+
92
+ s , err := NewSwarm (id , ps , eventbus .NewBus (), WithMultiaddrResolver (resolver ))
93
+ require .NoError (t , err )
94
+ defer s .Close ()
95
+
96
+ tpt , err := tcp .NewTCPTransport (nil , & network.NullResourceManager {})
97
+ require .NoError (t , err )
98
+ err = s .AddTransport (tpt )
99
+ require .NoError (t , err )
100
+
101
+ otherPeer := test .RandPeerIDFatal (t )
102
+
103
+ ps .AddAddr (otherPeer , ma .StringCast ("/dns4/example.com/tcp/1234" ), time .Hour )
104
+ ps .AddAddr (otherPeer , ma .StringCast ("/ip4/1.2.3.4/tcp/1234" ), time .Hour )
105
+
106
+ ctx := context .Background ()
107
+ mas , err := s .addrsForDial (ctx , otherPeer )
108
+ require .NoError (t , err )
109
+
110
+ require .Equal (t , 1 , len (mas ))
111
+ }
112
+
68
113
func newTestSwarmWithResolver (t * testing.T , resolver * madns.Resolver ) * Swarm {
69
114
priv , _ , err := crypto .GenerateEd25519Key (rand .Reader )
70
115
require .NoError (t , err )
0 commit comments