@@ -65,6 +65,51 @@ func TestAddrsForDial(t *testing.T) {
6565 require .NotZero (t , len (mas ))
6666}
6767
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+
68113func newTestSwarmWithResolver (t * testing.T , resolver * madns.Resolver ) * Swarm {
69114 priv , _ , err := crypto .GenerateEd25519Key (rand .Reader )
70115 require .NoError (t , err )
0 commit comments