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  }