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