mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-25 08:05:17 +00:00
68 lines
2.2 KiB
Go
68 lines
2.2 KiB
Go
package relaysvc
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/libp2p/go-libp2p/core/event"
|
|
"github.com/libp2p/go-libp2p/core/network"
|
|
bhost "github.com/libp2p/go-libp2p/p2p/host/blank"
|
|
"github.com/libp2p/go-libp2p/p2p/host/eventbus"
|
|
swarmt "github.com/libp2p/go-libp2p/p2p/net/swarm/testing"
|
|
relayv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/relay"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestReachabilityChangeEvent(t *testing.T) {
|
|
h := bhost.NewBlankHost(swarmt.GenSwarm(t))
|
|
rmgr := NewRelayManager(h)
|
|
emitter, err := rmgr.host.EventBus().Emitter(new(event.EvtLocalReachabilityChanged), eventbus.Stateful)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
evt := event.EvtLocalReachabilityChanged{Reachability: network.ReachabilityPublic}
|
|
emitter.Emit(evt)
|
|
require.Eventually(
|
|
t,
|
|
func() bool { rmgr.mutex.Lock(); defer rmgr.mutex.Unlock(); return rmgr.relay != nil },
|
|
1*time.Second,
|
|
100*time.Millisecond,
|
|
"relay should be set on public reachability")
|
|
|
|
evt = event.EvtLocalReachabilityChanged{Reachability: network.ReachabilityPrivate}
|
|
emitter.Emit(evt)
|
|
require.Eventually(
|
|
t,
|
|
func() bool { rmgr.mutex.Lock(); defer rmgr.mutex.Unlock(); return rmgr.relay == nil },
|
|
3*time.Second,
|
|
100*time.Millisecond,
|
|
"relay should be nil on private reachability")
|
|
|
|
evt = event.EvtLocalReachabilityChanged{Reachability: network.ReachabilityPublic}
|
|
emitter.Emit(evt)
|
|
evt = event.EvtLocalReachabilityChanged{Reachability: network.ReachabilityUnknown}
|
|
emitter.Emit(evt)
|
|
require.Eventually(
|
|
t,
|
|
func() bool { rmgr.mutex.Lock(); defer rmgr.mutex.Unlock(); return rmgr.relay == nil },
|
|
3*time.Second,
|
|
100*time.Millisecond,
|
|
"relay should be nil on unknown reachability")
|
|
|
|
evt = event.EvtLocalReachabilityChanged{Reachability: network.ReachabilityPublic}
|
|
emitter.Emit(evt)
|
|
var relay *relayv2.Relay
|
|
require.Eventually(
|
|
t,
|
|
func() bool { rmgr.mutex.Lock(); defer rmgr.mutex.Unlock(); relay = rmgr.relay; return relay != nil },
|
|
3*time.Second,
|
|
100*time.Millisecond,
|
|
"relay should be set on public event")
|
|
emitter.Emit(evt)
|
|
require.Never(t,
|
|
func() bool { rmgr.mutex.Lock(); defer rmgr.mutex.Unlock(); return relay != rmgr.relay },
|
|
3*time.Second,
|
|
100*time.Millisecond,
|
|
"relay should not be updated on receiving the same event")
|
|
}
|