github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/joyent/instance_firewall_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  package joyent_test
     4  
     5  import (
     6  	"github.com/joyent/gosdc/cloudapi"
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/network"
    11  	"github.com/juju/juju/provider/joyent"
    12  )
    13  
    14  type InstanceFirewallSuite struct{}
    15  
    16  var _ = gc.Suite(&InstanceFirewallSuite{})
    17  
    18  func (s *InstanceFirewallSuite) TestGetPorts(c *gc.C) {
    19  	testCases := []struct {
    20  		about    string
    21  		envName  string
    22  		rules    []cloudapi.FirewallRule
    23  		expected []network.IngressRule
    24  	}{
    25  		{
    26  			"single port instance rule",
    27  			"switch",
    28  			[]cloudapi.FirewallRule{{
    29  				"",
    30  				true,
    31  				"FROM tag switch TO vm machine ALLOW tcp PORT 80",
    32  			}},
    33  			[]network.IngressRule{network.MustNewIngressRule("tcp", 80, 80, "0.0.0.0/0")},
    34  		},
    35  		{
    36  			"port range instance rule",
    37  			"switch",
    38  			[]cloudapi.FirewallRule{{
    39  				"",
    40  				true,
    41  				"FROM tag switch TO vm machine ALLOW tcp (PORT 80 AND PORT 81 AND PORT 82 AND PORT 83)",
    42  			}},
    43  			[]network.IngressRule{network.MustNewIngressRule("tcp", 80, 83, "0.0.0.0/0")},
    44  		},
    45  	}
    46  	for i, t := range testCases {
    47  		c.Logf("test %d: %s", i, t.about)
    48  		ports, err := joyent.GetPorts(t.envName, t.rules)
    49  		c.Assert(err, jc.ErrorIsNil)
    50  		c.Assert(ports, jc.DeepEquals, t.expected)
    51  	}
    52  
    53  }
    54  
    55  func (s *InstanceFirewallSuite) TestRuleCreation(c *gc.C) {
    56  	testCases := []struct {
    57  		about    string
    58  		ports    network.IngressRule
    59  		expected string
    60  	}{{
    61  		"single port firewall rule",
    62  		network.MustNewIngressRule("tcp", 80, 80),
    63  		"FROM tag switch TO vm machine ALLOW tcp PORT 80",
    64  	}, {
    65  		"multiple port firewall rule",
    66  		network.MustNewIngressRule("tcp", 80, 81),
    67  		"FROM tag switch TO vm machine ALLOW tcp ( PORT 80 AND PORT 81 )",
    68  	}}
    69  
    70  	for i, t := range testCases {
    71  		c.Logf("test case %d: %s", i, t.about)
    72  		rule := joyent.CreateFirewallRuleVm("switch", "machine", t.ports)
    73  		c.Check(rule, gc.Equals, t.expected)
    74  	}
    75  }