github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/controller/firewaller/firewaller_internal_test.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package firewaller
     5  
     6  import (
     7  	"github.com/juju/testing"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/core/network"
    11  	"github.com/juju/juju/rpc/params"
    12  )
    13  
    14  var _ = gc.Suite(&UnitToCIDRMappingSuite{})
    15  
    16  type UnitToCIDRMappingSuite struct {
    17  	testing.IsolationSuite
    18  }
    19  
    20  func (s *UnitToCIDRMappingSuite) TestBindingMapping(c *gc.C) {
    21  	portRangesByEndpoint := network.GroupedPortRanges{
    22  		"foo": []network.PortRange{
    23  			network.MustParsePortRange("123/tcp"),
    24  			network.MustParsePortRange("456/tcp"),
    25  		},
    26  		"bar": []network.PortRange{
    27  			// The descending ordering here is intentional so that
    28  			// we can verify that the output list entries do get
    29  			// sorted.
    30  			network.MustParsePortRange("777/tcp"),
    31  			network.MustParsePortRange("123/tcp"),
    32  		},
    33  	}
    34  	endpointBindings := map[string]string{
    35  		"": network.AlphaSpaceId,
    36  		// Both endpoints bound to same space
    37  		"foo": "42",
    38  		"bar": "42",
    39  	}
    40  
    41  	spaceInfos := network.SpaceInfos{
    42  		{ID: network.AlphaSpaceId, Name: "alpha", Subnets: []network.SubnetInfo{
    43  			{ID: "11", CIDR: "10.0.0.0/24"},
    44  			{ID: "12", CIDR: "10.0.1.0/24"},
    45  		}},
    46  		{ID: "42", Name: "questions-about-the-universe", Subnets: []network.SubnetInfo{
    47  			{ID: "13", CIDR: "192.168.0.0/24"},
    48  			{ID: "14", CIDR: "192.168.1.0/24"},
    49  		}},
    50  	}
    51  
    52  	got := mapUnitPortsAndResolveSubnetCIDRs(portRangesByEndpoint, endpointBindings, spaceInfos.SubnetCIDRsBySpaceID())
    53  	exp := []params.OpenUnitPortRanges{
    54  		{
    55  			Endpoint:    "bar",
    56  			SubnetCIDRs: []string{"192.168.0.0/24", "192.168.1.0/24"},
    57  			PortRanges: []params.PortRange{
    58  				params.FromNetworkPortRange(network.MustParsePortRange("123/tcp")),
    59  				params.FromNetworkPortRange(network.MustParsePortRange("777/tcp")),
    60  			},
    61  		},
    62  		{
    63  			Endpoint:    "foo",
    64  			SubnetCIDRs: []string{"192.168.0.0/24", "192.168.1.0/24"},
    65  			PortRanges: []params.PortRange{
    66  				params.FromNetworkPortRange(network.MustParsePortRange("123/tcp")),
    67  				params.FromNetworkPortRange(network.MustParsePortRange("456/tcp")),
    68  			},
    69  		},
    70  	}
    71  
    72  	c.Assert(got, gc.DeepEquals, exp)
    73  }
    74  
    75  func (s *UnitToCIDRMappingSuite) TestWildcardExpansion(c *gc.C) {
    76  	portRangesByEndpoint := network.GroupedPortRanges{
    77  		"": []network.PortRange{
    78  			// These ranges should be added to the CIDRs of each
    79  			// bound endpoint (so, both alpha and "42").
    80  			network.MustParsePortRange("123/tcp"),
    81  			network.MustParsePortRange("456/tcp"),
    82  		},
    83  		"bar": []network.PortRange{
    84  			network.MustParsePortRange("999/tcp"),
    85  		},
    86  	}
    87  	endpointBindings := map[string]string{
    88  		"":    network.AlphaSpaceId,
    89  		"foo": network.AlphaSpaceId,
    90  		"bar": "42",
    91  	}
    92  
    93  	spaceInfos := network.SpaceInfos{
    94  		{ID: network.AlphaSpaceId, Name: "alpha", Subnets: []network.SubnetInfo{
    95  			{ID: "11", CIDR: "10.0.0.0/24"},
    96  			{ID: "12", CIDR: "10.0.1.0/24"},
    97  		}},
    98  		{ID: "42", Name: "questions-about-the-universe", Subnets: []network.SubnetInfo{
    99  			{ID: "13", CIDR: "192.168.0.0/24"},
   100  			{ID: "14", CIDR: "192.168.1.0/24"},
   101  		}},
   102  	}
   103  
   104  	got := mapUnitPortsAndResolveSubnetCIDRs(portRangesByEndpoint, endpointBindings, spaceInfos.SubnetCIDRsBySpaceID())
   105  	exp := []params.OpenUnitPortRanges{
   106  		{
   107  			Endpoint:    "",
   108  			SubnetCIDRs: []string{"10.0.0.0/24", "10.0.1.0/24", "192.168.0.0/24", "192.168.1.0/24"},
   109  			PortRanges: []params.PortRange{
   110  				params.FromNetworkPortRange(network.MustParsePortRange("123/tcp")),
   111  				params.FromNetworkPortRange(network.MustParsePortRange("456/tcp")),
   112  			},
   113  		},
   114  		{
   115  			Endpoint:    "bar",
   116  			SubnetCIDRs: []string{"192.168.0.0/24", "192.168.1.0/24"},
   117  			PortRanges: []params.PortRange{
   118  				params.FromNetworkPortRange(network.MustParsePortRange("999/tcp")),
   119  			},
   120  		},
   121  	}
   122  
   123  	c.Assert(got, gc.DeepEquals, exp)
   124  }