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  }