github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/core/network/network_test.go (about) 1 // Copyright 2019 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package network_test 5 6 import ( 7 "sort" 8 9 "github.com/juju/testing" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/core/network" 13 ) 14 15 type NetworkSuite struct { 16 testing.IsolationSuite 17 } 18 19 var _ = gc.Suite(&NetworkSuite{}) 20 21 func (s *NetworkSuite) TestGenerateVirtualMACAddress(c *gc.C) { 22 mac := network.GenerateVirtualMACAddress() 23 c.Check(mac, gc.Matches, "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$") 24 } 25 26 func (NetworkSuite) TestIDSetSize(c *gc.C) { 27 // Empty sets are empty. 28 s := network.MakeIDSet() 29 c.Assert(s.Size(), gc.Equals, 0) 30 31 // Size returns number of unique values. 32 s = network.MakeIDSet("foo", "foo", "bar") 33 c.Assert(s.Size(), gc.Equals, 2) 34 } 35 36 func (NetworkSuite) TestIDSetEmpty(c *gc.C) { 37 s := network.MakeIDSet() 38 assertValues(c, s) 39 } 40 41 func (NetworkSuite) TestIDSetInitialValues(c *gc.C) { 42 values := []network.Id{"foo", "bar", "baz"} 43 s := network.MakeIDSet(values...) 44 assertValues(c, s, values...) 45 } 46 47 func (NetworkSuite) TestIDSetIsEmpty(c *gc.C) { 48 // Empty sets are empty. 49 s := network.MakeIDSet() 50 c.Assert(s.IsEmpty(), gc.Equals, true) 51 52 // Non-empty sets are not empty. 53 s = network.MakeIDSet("foo") 54 c.Assert(s.IsEmpty(), gc.Equals, false) 55 } 56 57 func (NetworkSuite) TestIDSetAdd(c *gc.C) { 58 s := network.MakeIDSet() 59 s.Add("foo") 60 s.Add("foo") 61 s.Add("bar") 62 assertValues(c, s, "foo", "bar") 63 } 64 65 func (NetworkSuite) TestIDSetContains(c *gc.C) { 66 s := network.MakeIDSet("foo", "bar") 67 c.Assert(s.Contains("foo"), gc.Equals, true) 68 c.Assert(s.Contains("bar"), gc.Equals, true) 69 c.Assert(s.Contains("baz"), gc.Equals, false) 70 } 71 72 func (NetworkSuite) TestIDSetDifference(c *gc.C) { 73 s1 := network.MakeIDSet("foo", "bar") 74 s2 := network.MakeIDSet("foo", "baz", "bang") 75 diff1 := s1.Difference(s2) 76 diff2 := s2.Difference(s1) 77 78 assertValues(c, diff1, "bar") 79 assertValues(c, diff2, "baz", "bang") 80 } 81 82 // Helper methods for the tests. 83 func assertValues(c *gc.C, s network.IDSet, expected ...network.Id) { 84 values := s.Values() 85 86 // Expect an empty slice, not a nil slice for values. 87 if expected == nil { 88 expected = make([]network.Id, 0) 89 } 90 91 sort.Slice(expected, func(i, j int) bool { 92 return expected[i] < expected[j] 93 }) 94 sort.Slice(values, func(i, j int) bool { 95 return values[i] < values[j] 96 }) 97 98 c.Assert(values, gc.DeepEquals, expected) 99 c.Assert(s.Size(), gc.Equals, len(expected)) 100 101 // Check the sorted values too. 102 sorted := s.SortedValues() 103 c.Assert(sorted, gc.DeepEquals, expected) 104 } 105 106 func (s *NetworkSuite) TestSubnetsForAddresses(c *gc.C) { 107 addrs := []string{ 108 "10.10.10.10", 109 "75ae:3af:968e:3a33:55e2:6379:fa67:d790", 110 "some.host.name", 111 } 112 113 c.Check(network.SubnetsForAddresses(addrs), gc.DeepEquals, []string{ 114 "10.10.10.10/32", 115 "75ae:3af:968e:3a33:55e2:6379:fa67:d790/128", 116 }) 117 }