OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / p2p / discover / mdns / lan_discover_test.go
diff --git a/p2p/discover/mdns/lan_discover_test.go b/p2p/discover/mdns/lan_discover_test.go
new file mode 100644 (file)
index 0000000..9b55d53
--- /dev/null
@@ -0,0 +1,77 @@
+package mdns
+
+import (
+       "testing"
+
+       "github.com/davecgh/go-spew/spew"
+       "net"
+       "reflect"
+       "time"
+)
+
+var wantEvents = []LANPeerEvent{
+       {IP: []net.IP{net.IPv4(1, 2, 3, 4)}, Port: 1024},
+       {IP: []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, Port: 1024},
+}
+
+type mockProtocol struct {
+       entries chan *LANPeerEvent
+}
+
+func newMockProtocol() *mockProtocol {
+       return &mockProtocol{
+               entries: make(chan *LANPeerEvent, 1024),
+       }
+}
+func (m *mockProtocol) registerService(port int) error {
+       return nil
+}
+
+func (m *mockProtocol) registerResolver(event chan LANPeerEvent) error {
+       for _, peerEvent := range wantEvents {
+               event <- peerEvent
+       }
+       return nil
+}
+
+func (m *mockProtocol) stopService() {
+
+}
+
+func (m *mockProtocol) stopResolver() {
+
+}
+
+func TestLanDiscover(t *testing.T) {
+       lanDiscv := NewLANDiscover(newMockProtocol(), 12345)
+       defer lanDiscv.Stop()
+
+       lanPeerMsgSub, err := lanDiscv.Subscribe()
+       if err != nil {
+               t.Fatal("subscribe lan peer msg err")
+       }
+
+       var gotevents = []LANPeerEvent{}
+       timeout := time.After(1 * time.Second)
+       for {
+               select {
+               case obj, ok := <-lanPeerMsgSub.Chan():
+                       if !ok {
+                               t.Fatal("subscription channel closed")
+                               return
+                       }
+
+                       ev, ok := obj.Data.(LANPeerEvent)
+                       if !ok {
+                               t.Fatal("event type error")
+                               continue
+                       }
+                       gotevents = append(gotevents, ev)
+               case <-timeout:
+                       if !reflect.DeepEqual(gotevents, wantEvents) {
+                               t.Fatalf("mismatch for test lan discover got %s want %s", spew.Sdump(gotevents), spew.Sdump(wantEvents))
+                       }
+                       return
+               }
+       }
+}