mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-24 22:32:13 +00:00
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
|
package dht
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/libp2p/go-libp2p-core/event"
|
||
|
|
||
|
kb "github.com/libp2p/go-libp2p-kbucket"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestSelfWalkOnAddressChange(t *testing.T) {
|
||
|
ctx := context.Background()
|
||
|
// create three DHT instances with auto refresh disabled
|
||
|
d1 := setupDHT(ctx, t, false, DisableAutoRefresh())
|
||
|
d2 := setupDHT(ctx, t, false, DisableAutoRefresh())
|
||
|
d3 := setupDHT(ctx, t, false, DisableAutoRefresh())
|
||
|
|
||
|
var connectedTo *IpfsDHT
|
||
|
// connect d1 to whoever is "further"
|
||
|
if kb.CommonPrefixLen(kb.ConvertPeerID(d1.self), kb.ConvertPeerID(d2.self)) <=
|
||
|
kb.CommonPrefixLen(kb.ConvertPeerID(d1.self), kb.ConvertPeerID(d3.self)) {
|
||
|
connect(t, ctx, d1, d3)
|
||
|
connectedTo = d3
|
||
|
} else {
|
||
|
connect(t, ctx, d1, d2)
|
||
|
connectedTo = d2
|
||
|
}
|
||
|
|
||
|
// then connect d2 AND d3
|
||
|
connect(t, ctx, d2, d3)
|
||
|
|
||
|
// d1 should have ONLY 1 peer in it's RT
|
||
|
waitForWellFormedTables(t, []*IpfsDHT{d1}, 1, 1, 2*time.Second)
|
||
|
require.Equal(t, connectedTo.self, d1.routingTable.ListPeers()[0])
|
||
|
|
||
|
// now emit the address change event
|
||
|
em, err := d1.host.EventBus().Emitter(&event.EvtLocalAddressesUpdated{})
|
||
|
require.NoError(t, err)
|
||
|
require.NoError(t, em.Emit(event.EvtLocalAddressesUpdated{}))
|
||
|
waitForWellFormedTables(t, []*IpfsDHT{d1}, 2, 2, 2*time.Second)
|
||
|
// it should now have both peers in the RT
|
||
|
ps := d1.routingTable.ListPeers()
|
||
|
require.Contains(t, ps, d2.self)
|
||
|
require.Contains(t, ps, d3.self)
|
||
|
}
|