mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:27:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package mdns
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/libp2p/go-libp2p"
 | 
						|
	"github.com/libp2p/go-libp2p/core/peer"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func setupMDNS(t *testing.T, notifee Notifee) peer.ID {
 | 
						|
	t.Helper()
 | 
						|
	host, err := libp2p.New(libp2p.ListenAddrStrings("/ip4/127.0.0.1/tcp/0"))
 | 
						|
	require.NoError(t, err)
 | 
						|
	s := NewMdnsService(host, "", notifee)
 | 
						|
	require.NoError(t, s.Start())
 | 
						|
	t.Cleanup(func() {
 | 
						|
		host.Close()
 | 
						|
		s.Close()
 | 
						|
	})
 | 
						|
	return host.ID()
 | 
						|
}
 | 
						|
 | 
						|
type notif struct {
 | 
						|
	mutex sync.Mutex
 | 
						|
	infos []peer.AddrInfo
 | 
						|
}
 | 
						|
 | 
						|
var _ Notifee = ¬if{}
 | 
						|
 | 
						|
func (n *notif) HandlePeerFound(info peer.AddrInfo) {
 | 
						|
	n.mutex.Lock()
 | 
						|
	n.infos = append(n.infos, info)
 | 
						|
	n.mutex.Unlock()
 | 
						|
}
 | 
						|
 | 
						|
func (n *notif) GetPeers() []peer.AddrInfo {
 | 
						|
	n.mutex.Lock()
 | 
						|
	defer n.mutex.Unlock()
 | 
						|
	infos := make([]peer.AddrInfo, 0, len(n.infos))
 | 
						|
	infos = append(infos, n.infos...)
 | 
						|
	return infos
 | 
						|
}
 | 
						|
 | 
						|
func TestOtherDiscovery(t *testing.T) {
 | 
						|
	const n = 4
 | 
						|
 | 
						|
	notifs := make([]*notif, n)
 | 
						|
	hostIDs := make([]peer.ID, n)
 | 
						|
	for i := 0; i < n; i++ {
 | 
						|
		notif := ¬if{}
 | 
						|
		notifs[i] = notif
 | 
						|
		hostIDs[i] = setupMDNS(t, notif)
 | 
						|
	}
 | 
						|
 | 
						|
	containsAllHostIDs := func(ids []peer.ID, currentHostID peer.ID) bool {
 | 
						|
		for _, id := range hostIDs {
 | 
						|
			var found bool
 | 
						|
			if currentHostID == id {
 | 
						|
				continue
 | 
						|
			}
 | 
						|
			for _, i := range ids {
 | 
						|
				if id == i {
 | 
						|
					found = true
 | 
						|
					break
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if !found {
 | 
						|
				return false
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return true
 | 
						|
	}
 | 
						|
 | 
						|
	assert.Eventuallyf(
 | 
						|
		t,
 | 
						|
		func() bool {
 | 
						|
			for i, notif := range notifs {
 | 
						|
				infos := notif.GetPeers()
 | 
						|
				ids := make([]peer.ID, 0, len(infos))
 | 
						|
				for _, info := range infos {
 | 
						|
					ids = append(ids, info.ID)
 | 
						|
				}
 | 
						|
				if !containsAllHostIDs(ids, hostIDs[i]) {
 | 
						|
					return false
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return true
 | 
						|
		},
 | 
						|
		25*time.Second,
 | 
						|
		5*time.Millisecond,
 | 
						|
		"expected peers to find each other",
 | 
						|
	)
 | 
						|
}
 |