github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/gce/google/conn_network_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package google_test
     5  
     6  import (
     7  	"sort"
     8  
     9  	"github.com/juju/errors"
    10  	jc "github.com/juju/testing/checkers"
    11  	"google.golang.org/api/compute/v1"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/network"
    15  )
    16  
    17  func (s *connSuite) TestConnectionPorts(c *gc.C) {
    18  	s.FakeConn.Firewall = &compute.Firewall{
    19  		Name:         "spam",
    20  		TargetTags:   []string{"spam"},
    21  		SourceRanges: []string{"0.0.0.0/0"},
    22  		Allowed: []*compute.FirewallAllowed{{
    23  			IPProtocol: "tcp",
    24  			Ports:      []string{"80-81"},
    25  		}},
    26  	}
    27  
    28  	ports, err := s.Conn.Ports("spam")
    29  	c.Assert(err, jc.ErrorIsNil)
    30  
    31  	c.Check(ports, jc.DeepEquals, []network.PortRange{{
    32  		FromPort: 80,
    33  		ToPort:   81,
    34  		Protocol: "tcp",
    35  	}})
    36  }
    37  
    38  func (s *connSuite) TestConnectionPortsAPI(c *gc.C) {
    39  	s.FakeConn.Firewall = &compute.Firewall{
    40  		Name:         "spam",
    41  		TargetTags:   []string{"spam"},
    42  		SourceRanges: []string{"0.0.0.0/0"},
    43  		Allowed: []*compute.FirewallAllowed{{
    44  			IPProtocol: "tcp",
    45  			Ports:      []string{"80-81"},
    46  		}},
    47  	}
    48  
    49  	_, err := s.Conn.Ports("eggs")
    50  	c.Assert(err, jc.ErrorIsNil)
    51  
    52  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
    53  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetFirewall")
    54  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
    55  	c.Check(s.FakeConn.Calls[0].Name, gc.Equals, "eggs")
    56  }
    57  
    58  func (s *connSuite) TestConnectionOpenPortsAdd(c *gc.C) {
    59  	s.FakeConn.Err = errors.NotFoundf("spam")
    60  
    61  	ports := network.PortRange{
    62  		FromPort: 80,
    63  		ToPort:   81,
    64  		Protocol: "tcp",
    65  	}
    66  	err := s.Conn.OpenPorts("spam", ports)
    67  	c.Assert(err, jc.ErrorIsNil)
    68  
    69  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
    70  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetFirewall")
    71  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "AddFirewall")
    72  	sort.Strings(s.FakeConn.Calls[1].Firewall.Allowed[0].Ports)
    73  	c.Check(s.FakeConn.Calls[1].Firewall, jc.DeepEquals, &compute.Firewall{
    74  		Name:         "spam",
    75  		TargetTags:   []string{"spam"},
    76  		SourceRanges: []string{"0.0.0.0/0"},
    77  		Allowed: []*compute.FirewallAllowed{{
    78  			IPProtocol: "tcp",
    79  			Ports:      []string{"80", "81"},
    80  		}},
    81  	})
    82  }
    83  
    84  func (s *connSuite) TestConnectionOpenPortsUpdate(c *gc.C) {
    85  	s.FakeConn.Firewall = &compute.Firewall{
    86  		Name:         "spam",
    87  		TargetTags:   []string{"spam"},
    88  		SourceRanges: []string{"0.0.0.0/0"},
    89  		Allowed: []*compute.FirewallAllowed{{
    90  			IPProtocol: "tcp",
    91  			Ports:      []string{"80-81"},
    92  		}},
    93  	}
    94  
    95  	ports := network.PortRange{
    96  		FromPort: 443,
    97  		ToPort:   443,
    98  		Protocol: "tcp",
    99  	}
   100  	err := s.Conn.OpenPorts("spam", ports)
   101  	c.Assert(err, jc.ErrorIsNil)
   102  
   103  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
   104  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetFirewall")
   105  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "UpdateFirewall")
   106  	sort.Strings(s.FakeConn.Calls[1].Firewall.Allowed[0].Ports)
   107  	c.Check(s.FakeConn.Calls[1].Firewall, jc.DeepEquals, &compute.Firewall{
   108  		Name:         "spam",
   109  		TargetTags:   []string{"spam"},
   110  		SourceRanges: []string{"0.0.0.0/0"},
   111  		Allowed: []*compute.FirewallAllowed{{
   112  			IPProtocol: "tcp",
   113  			Ports:      []string{"443", "80", "81"},
   114  		}},
   115  	})
   116  }
   117  
   118  func (s *connSuite) TestConnectionClosePortsRemove(c *gc.C) {
   119  	s.FakeConn.Firewall = &compute.Firewall{
   120  		Name:         "spam",
   121  		TargetTags:   []string{"spam"},
   122  		SourceRanges: []string{"0.0.0.0/0"},
   123  		Allowed: []*compute.FirewallAllowed{{
   124  			IPProtocol: "tcp",
   125  			Ports:      []string{"443"},
   126  		}},
   127  	}
   128  
   129  	ports := network.PortRange{
   130  		FromPort: 443,
   131  		ToPort:   443,
   132  		Protocol: "tcp",
   133  	}
   134  	err := s.Conn.ClosePorts("spam", ports)
   135  	c.Assert(err, jc.ErrorIsNil)
   136  
   137  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
   138  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetFirewall")
   139  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "RemoveFirewall")
   140  	c.Check(s.FakeConn.Calls[1].Name, gc.Equals, "spam")
   141  }
   142  
   143  func (s *connSuite) TestConnectionClosePortsUpdate(c *gc.C) {
   144  	s.FakeConn.Firewall = &compute.Firewall{
   145  		Name:         "spam",
   146  		TargetTags:   []string{"spam"},
   147  		SourceRanges: []string{"0.0.0.0/0"},
   148  		Allowed: []*compute.FirewallAllowed{{
   149  			IPProtocol: "tcp",
   150  			Ports:      []string{"80-81", "443"},
   151  		}},
   152  	}
   153  
   154  	ports := network.PortRange{
   155  		FromPort: 443,
   156  		ToPort:   443,
   157  		Protocol: "tcp",
   158  	}
   159  	err := s.Conn.ClosePorts("spam", ports)
   160  	c.Assert(err, jc.ErrorIsNil)
   161  
   162  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
   163  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetFirewall")
   164  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "UpdateFirewall")
   165  	sort.Strings(s.FakeConn.Calls[1].Firewall.Allowed[0].Ports)
   166  	c.Check(s.FakeConn.Calls[1].Firewall, jc.DeepEquals, &compute.Firewall{
   167  		Name:         "spam",
   168  		TargetTags:   []string{"spam"},
   169  		SourceRanges: []string{"0.0.0.0/0"},
   170  		Allowed: []*compute.FirewallAllowed{{
   171  			IPProtocol: "tcp",
   172  			Ports:      []string{"80", "81"},
   173  		}},
   174  	})
   175  }