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 }