1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
jc "github.com/juju/testing/checkers"
11
"github.com/juju/juju/apiserver/params"
12
"github.com/juju/juju/network"
15
// NetworkInterface holds the values for the hook context.
16
type NetworkInterface struct {
19
Ports []network.PortRange
20
BindingsToNetworkConfigs map[string][]params.NetworkConfig
23
// CheckPorts checks the current ports.
24
func (ni *NetworkInterface) CheckPorts(c *gc.C, expected []network.PortRange) {
25
c.Check(ni.Ports, jc.DeepEquals, expected)
28
// AddPorts adds the specified port range.
29
func (ni *NetworkInterface) AddPorts(protocol string, from, to int) {
30
ni.Ports = append(ni.Ports, network.PortRange{
35
network.SortPortRanges(ni.Ports)
38
// RemovePorts removes the specified port range.
39
func (ni *NetworkInterface) RemovePorts(protocol string, from, to int) {
40
portRange := network.PortRange{
45
for i, port := range ni.Ports {
46
if port == portRange {
47
ni.Ports = append(ni.Ports[:i], ni.Ports[i+1:]...)
51
network.SortPortRanges(ni.Ports)
54
// ContextNetworking is a test double for jujuc.ContextNetworking.
55
type ContextNetworking struct {
57
info *NetworkInterface
60
// PublicAddress implements jujuc.ContextNetworking.
61
func (c *ContextNetworking) PublicAddress() (string, error) {
62
c.stub.AddCall("PublicAddress")
64
return c.info.PublicAddress, c.stub.NextErr()
68
// PrivateAddress implements jujuc.ContextNetworking.
69
func (c *ContextNetworking) PrivateAddress() (string, error) {
70
c.stub.AddCall("PrivateAddress")
72
return c.info.PrivateAddress, c.stub.NextErr()
76
// OpenPorts implements jujuc.ContextNetworking.
77
func (c *ContextNetworking) OpenPorts(protocol string, from, to int) error {
78
c.stub.AddCall("OpenPorts", protocol, from, to)
79
if err := c.stub.NextErr(); err != nil {
80
return errors.Trace(err)
83
c.info.AddPorts(protocol, from, to)
87
// ClosePorts implements jujuc.ContextNetworking.
88
func (c *ContextNetworking) ClosePorts(protocol string, from, to int) error {
89
c.stub.AddCall("ClosePorts", protocol, from, to)
90
if err := c.stub.NextErr(); err != nil {
91
return errors.Trace(err)
94
c.info.RemovePorts(protocol, from, to)
98
// OpenedPorts implements jujuc.ContextNetworking.
99
func (c *ContextNetworking) OpenedPorts() []network.PortRange {
100
c.stub.AddCall("OpenedPorts")
106
// NetworkConfig implements jujuc.ContextNetworking.
107
func (c *ContextNetworking) NetworkConfig(bindingName string) ([]params.NetworkConfig, error) {
108
c.stub.AddCall("NetworkConfig", bindingName)
109
if err := c.stub.NextErr(); err != nil {
110
return nil, errors.Trace(err)
113
netConfig, isBindingKnown := c.info.BindingsToNetworkConfigs[bindingName]
115
return nil, errors.Errorf("insert server error for unknown binding here")
117
return netConfig, nil