github.com/docker/engine@v22.0.0-20211208180946-d456264580cf+incompatible/libnetwork/hostdiscovery/hostdiscovery_test.go (about) 1 package hostdiscovery 2 3 import ( 4 "net" 5 "testing" 6 7 mapset "github.com/deckarep/golang-set" 8 9 "github.com/docker/docker/pkg/discovery" 10 ) 11 12 func TestDiff(t *testing.T) { 13 existing := mapset.NewSetFromSlice([]interface{}{"1.1.1.1", "2.2.2.2"}) 14 addedIP := "3.3.3.3" 15 updated := existing.Clone() 16 updated.Add(addedIP) 17 18 added, removed := diff(existing, updated) 19 if len(added) != 1 { 20 t.Fatalf("Diff failed for an Add update. Expecting 1 element, but got %d elements", len(added)) 21 } 22 if added[0].String() != addedIP { 23 t.Fatalf("Expecting : %v, Got : %v", addedIP, added[0]) 24 } 25 if len(removed) > 0 { 26 t.Fatalf("Diff failed for remove use-case. Expecting 0 element, but got %d elements", len(removed)) 27 } 28 29 updated = mapset.NewSetFromSlice([]interface{}{addedIP}) 30 added, removed = diff(existing, updated) 31 if len(removed) != 2 { 32 t.Fatalf("Diff failed for a remove update. Expecting 2 element, but got %d elements", len(removed)) 33 } 34 if len(added) != 1 { 35 t.Fatalf("Diff failed for add use-case. Expecting 1 element, but got %d elements", len(added)) 36 } 37 } 38 39 func TestAddedCallback(t *testing.T) { 40 hd := hostDiscovery{} 41 hd.nodes = mapset.NewSetFromSlice([]interface{}{"1.1.1.1"}) 42 update := []*discovery.Entry{{Host: "1.1.1.1", Port: "0"}, {Host: "2.2.2.2", Port: "0"}} 43 44 added := false 45 removed := false 46 hd.processCallback(update, func() {}, func(hosts []net.IP) { added = true }, func(hosts []net.IP) { removed = true }) 47 if !added { 48 t.Fatal("Expecting an Added callback notification. But none received") 49 } 50 if removed { 51 t.Fatal("Not expecting a Removed callback notification. But received a callback") 52 } 53 } 54 55 func TestRemovedCallback(t *testing.T) { 56 hd := hostDiscovery{} 57 hd.nodes = mapset.NewSetFromSlice([]interface{}{"1.1.1.1", "2.2.2.2"}) 58 update := []*discovery.Entry{{Host: "1.1.1.1", Port: "0"}} 59 60 added := false 61 removed := false 62 hd.processCallback(update, func() {}, func(hosts []net.IP) { added = true }, func(hosts []net.IP) { removed = true }) 63 if added { 64 t.Fatal("Not expecting an Added callback notification. But received a callback") 65 } 66 if !removed { 67 t.Fatal("Expecting a Removed callback notification. But none received") 68 } 69 } 70 71 func TestNoCallback(t *testing.T) { 72 hd := hostDiscovery{} 73 hd.nodes = mapset.NewSetFromSlice([]interface{}{"1.1.1.1", "2.2.2.2"}) 74 update := []*discovery.Entry{{Host: "1.1.1.1", Port: "0"}, {Host: "2.2.2.2", Port: "0"}} 75 76 added := false 77 removed := false 78 hd.processCallback(update, func() {}, func(hosts []net.IP) { added = true }, func(hosts []net.IP) { removed = true }) 79 if added || removed { 80 t.Fatal("Not expecting any callback notification. But received a callback") 81 } 82 }