mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:57:26 +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")
 | 
						|
}
 |