github.com/status-im/status-go@v1.1.0/server/pairing/peers/udp_notifier_test.go (about) 1 package peers 2 3 import ( 4 "runtime" 5 "sync" 6 "testing" 7 "time" 8 9 udpp2p "github.com/schollz/peerdiscovery" 10 "github.com/stretchr/testify/suite" 11 12 "github.com/status-im/status-go/server/servertest" 13 ) 14 15 func TestUDPPeerDiscoverySuite(t *testing.T) { 16 suite.Run(t, new(UDPPeerDiscoverySuite)) 17 } 18 19 type UDPPeerDiscoverySuite struct { 20 suite.Suite 21 servertest.TestLoggerComponents 22 } 23 24 func (s *UDPPeerDiscoverySuite) SetupSuite() { 25 s.SetupLoggerComponents() 26 } 27 28 type testSignalLogger struct { 29 log map[string]map[string]bool 30 lock sync.Mutex 31 } 32 33 func newTestSignalLogger() *testSignalLogger { 34 tsl := new(testSignalLogger) 35 tsl.log = make(map[string]map[string]bool) 36 return tsl 37 } 38 39 func (t *testSignalLogger) testSignal(h *LocalPairingPeerHello) { 40 t.lock.Lock() 41 defer t.lock.Unlock() 42 43 if _, ok := t.log[h.Discovered.Address]; !ok { 44 t.log[h.Discovered.Address] = make(map[string]bool) 45 } 46 t.log[h.Discovered.Address][h.DeviceName] = true 47 } 48 49 func (s *UDPPeerDiscoverySuite) TestUDPNotifier() { 50 tsl := newTestSignalLogger() 51 52 u1, err := NewUDPNotifier(s.Logger, tsl.testSignal) 53 s.Require().NoError(err) 54 55 u2, err := NewUDPNotifier(s.Logger, tsl.testSignal) 56 s.Require().NoError(err) 57 58 n1 := "device 1" 59 n2 := "device 2" 60 61 wg := sync.WaitGroup{} 62 wg.Add(1) 63 go func() { 64 settings, err := u1.MakeUDPP2PSettings(n1, runtime.GOOS) 65 s.Require().NoError(err) 66 67 settings.TimeLimit = 2 * time.Second 68 settings.Limit = 4 69 settings.AllowSelf = true 70 71 _, err = udpp2p.Discover(*settings) 72 s.Require().NoError(err) 73 wg.Done() 74 }() 75 76 wg.Add(1) 77 go func() { 78 settings, err := u2.MakeUDPP2PSettings(n2, runtime.GOOS) 79 s.Require().NoError(err) 80 81 settings.TimeLimit = 2 * time.Second 82 settings.Limit = 4 83 settings.AllowSelf = true 84 85 _, err = udpp2p.Discover(*settings) 86 s.Require().NoError(err) 87 wg.Done() 88 }() 89 90 wg.Wait() 91 92 s.Require().NotEmpty(tsl.log) 93 94 for _, address := range tsl.log { 95 s.Require().Len(address, 2) 96 97 for device := range address { 98 if !(device == n1 || device == n2) { 99 s.Require().Failf("unknown device name", device) 100 } 101 } 102 } 103 }