github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/pkg/discovery/discovery_test.go (about)

     1  package discovery
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/go-check/check"
     7  )
     8  
     9  // Hook up gocheck into the "go test" runner.
    10  func Test(t *testing.T) { check.TestingT(t) }
    11  
    12  type DiscoverySuite struct{}
    13  
    14  var _ = check.Suite(&DiscoverySuite{})
    15  
    16  func (s *DiscoverySuite) TestNewEntry(c *check.C) {
    17  	entry, err := NewEntry("127.0.0.1:2375")
    18  	c.Assert(err, check.IsNil)
    19  	c.Assert(entry.Equals(&Entry{Host: "127.0.0.1", Port: "2375"}), check.Equals, true)
    20  	c.Assert(entry.String(), check.Equals, "127.0.0.1:2375")
    21  
    22  	entry, err = NewEntry("[2001:db8:0:f101::2]:2375")
    23  	c.Assert(err, check.IsNil)
    24  	c.Assert(entry.Equals(&Entry{Host: "2001:db8:0:f101::2", Port: "2375"}), check.Equals, true)
    25  	c.Assert(entry.String(), check.Equals, "[2001:db8:0:f101::2]:2375")
    26  
    27  	_, err = NewEntry("127.0.0.1")
    28  	c.Assert(err, check.NotNil)
    29  }
    30  
    31  func (s *DiscoverySuite) TestParse(c *check.C) {
    32  	scheme, uri := parse("127.0.0.1:2375")
    33  	c.Assert(scheme, check.Equals, "nodes")
    34  	c.Assert(uri, check.Equals, "127.0.0.1:2375")
    35  
    36  	scheme, uri = parse("localhost:2375")
    37  	c.Assert(scheme, check.Equals, "nodes")
    38  	c.Assert(uri, check.Equals, "localhost:2375")
    39  
    40  	scheme, uri = parse("scheme://127.0.0.1:2375")
    41  	c.Assert(scheme, check.Equals, "scheme")
    42  	c.Assert(uri, check.Equals, "127.0.0.1:2375")
    43  
    44  	scheme, uri = parse("scheme://localhost:2375")
    45  	c.Assert(scheme, check.Equals, "scheme")
    46  	c.Assert(uri, check.Equals, "localhost:2375")
    47  
    48  	scheme, uri = parse("")
    49  	c.Assert(scheme, check.Equals, "nodes")
    50  	c.Assert(uri, check.Equals, "")
    51  }
    52  
    53  func (s *DiscoverySuite) TestCreateEntries(c *check.C) {
    54  	entries, err := CreateEntries(nil)
    55  	c.Assert(entries, check.DeepEquals, Entries{})
    56  	c.Assert(err, check.IsNil)
    57  
    58  	entries, err = CreateEntries([]string{"127.0.0.1:2375", "127.0.0.2:2375", "[2001:db8:0:f101::2]:2375", ""})
    59  	c.Assert(err, check.IsNil)
    60  	expected := Entries{
    61  		&Entry{Host: "127.0.0.1", Port: "2375"},
    62  		&Entry{Host: "127.0.0.2", Port: "2375"},
    63  		&Entry{Host: "2001:db8:0:f101::2", Port: "2375"},
    64  	}
    65  	c.Assert(entries.Equals(expected), check.Equals, true)
    66  
    67  	_, err = CreateEntries([]string{"127.0.0.1", "127.0.0.2"})
    68  	c.Assert(err, check.NotNil)
    69  }
    70  
    71  func (s *DiscoverySuite) TestContainsEntry(c *check.C) {
    72  	entries, err := CreateEntries([]string{"127.0.0.1:2375", "127.0.0.2:2375", ""})
    73  	c.Assert(err, check.IsNil)
    74  	c.Assert(entries.Contains(&Entry{Host: "127.0.0.1", Port: "2375"}), check.Equals, true)
    75  	c.Assert(entries.Contains(&Entry{Host: "127.0.0.3", Port: "2375"}), check.Equals, false)
    76  }
    77  
    78  func (s *DiscoverySuite) TestEntriesEquality(c *check.C) {
    79  	entries := Entries{
    80  		&Entry{Host: "127.0.0.1", Port: "2375"},
    81  		&Entry{Host: "127.0.0.2", Port: "2375"},
    82  	}
    83  
    84  	// Same
    85  	c.Assert(entries.Equals(Entries{
    86  		&Entry{Host: "127.0.0.1", Port: "2375"},
    87  		&Entry{Host: "127.0.0.2", Port: "2375"},
    88  	}), check.
    89  		Equals, true)
    90  
    91  	// Different size
    92  	c.Assert(entries.Equals(Entries{
    93  		&Entry{Host: "127.0.0.1", Port: "2375"},
    94  		&Entry{Host: "127.0.0.2", Port: "2375"},
    95  		&Entry{Host: "127.0.0.3", Port: "2375"},
    96  	}), check.
    97  		Equals, false)
    98  
    99  	// Different content
   100  	c.Assert(entries.Equals(Entries{
   101  		&Entry{Host: "127.0.0.1", Port: "2375"},
   102  		&Entry{Host: "127.0.0.42", Port: "2375"},
   103  	}), check.
   104  		Equals, false)
   105  
   106  }
   107  
   108  func (s *DiscoverySuite) TestEntriesDiff(c *check.C) {
   109  	entry1 := &Entry{Host: "1.1.1.1", Port: "1111"}
   110  	entry2 := &Entry{Host: "2.2.2.2", Port: "2222"}
   111  	entry3 := &Entry{Host: "3.3.3.3", Port: "3333"}
   112  	entries := Entries{entry1, entry2}
   113  
   114  	// No diff
   115  	added, removed := entries.Diff(Entries{entry2, entry1})
   116  	c.Assert(added, check.HasLen, 0)
   117  	c.Assert(removed, check.HasLen, 0)
   118  
   119  	// Add
   120  	added, removed = entries.Diff(Entries{entry2, entry3, entry1})
   121  	c.Assert(added, check.HasLen, 1)
   122  	c.Assert(added.Contains(entry3), check.Equals, true)
   123  	c.Assert(removed, check.HasLen, 0)
   124  
   125  	// Remove
   126  	added, removed = entries.Diff(Entries{entry2})
   127  	c.Assert(added, check.HasLen, 0)
   128  	c.Assert(removed, check.HasLen, 1)
   129  	c.Assert(removed.Contains(entry1), check.Equals, true)
   130  
   131  	// Add and remove
   132  	added, removed = entries.Diff(Entries{entry1, entry3})
   133  	c.Assert(added, check.HasLen, 1)
   134  	c.Assert(added.Contains(entry3), check.Equals, true)
   135  	c.Assert(removed, check.HasLen, 1)
   136  	c.Assert(removed.Contains(entry2), check.Equals, true)
   137  }