github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/oracle/network/environ_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package network_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/go-oracle-cloud/api"
    11  	"github.com/juju/go-oracle-cloud/common"
    12  	"github.com/juju/go-oracle-cloud/response"
    13  	jc "github.com/juju/testing/checkers"
    14  	gc "gopkg.in/check.v1"
    15  	names "gopkg.in/juju/names.v2"
    16  
    17  	"github.com/juju/juju/core/instance"
    18  	"github.com/juju/juju/environs"
    19  	"github.com/juju/juju/environs/context"
    20  	networkenv "github.com/juju/juju/network"
    21  	"github.com/juju/juju/provider/oracle"
    22  	"github.com/juju/juju/provider/oracle/network"
    23  	oracletesting "github.com/juju/juju/provider/oracle/testing"
    24  	"github.com/juju/juju/testing"
    25  )
    26  
    27  type environSuite struct {
    28  	env    *oracle.OracleEnviron
    29  	netEnv *network.Environ
    30  
    31  	callCtx context.ProviderCallContext
    32  }
    33  
    34  var _ = gc.Suite(&environSuite{})
    35  
    36  type fakeNetworkingAPI struct{}
    37  
    38  func (f *environSuite) SetUpTest(c *gc.C) {
    39  	var err error
    40  	f.env, err = oracle.NewOracleEnviron(
    41  		&oracle.EnvironProvider{},
    42  		environs.OpenParams{
    43  			Config: testing.ModelConfig(c),
    44  		},
    45  		oracletesting.DefaultEnvironAPI,
    46  		&advancingClock,
    47  	)
    48  
    49  	c.Assert(err, gc.IsNil)
    50  	c.Assert(f.env, gc.NotNil)
    51  
    52  	f.netEnv = network.NewEnviron(&fakeNetworkingAPI{}, f.env)
    53  	c.Assert(f.netEnv, gc.NotNil)
    54  	f.callCtx = context.NewCloudCallContext()
    55  }
    56  
    57  func (f fakeNetworkingAPI) AllIpNetworks(
    58  	filter []api.Filter,
    59  ) (response.AllIpNetworks, error) {
    60  	return response.AllIpNetworks{
    61  		Result: []response.IpNetwork{{
    62  			Name:                  "/Compute-acme/jack.jones@example.com/ipnet1",
    63  			Uri:                   "https://api-z999.compute.us0.oraclecloud.com:443/network/v1/ipnetwork/Compute-acme/jack.jones@example.com/ipnet1",
    64  			Description:           nil,
    65  			Tags:                  nil,
    66  			IpAddressPrefix:       "192.168.0.0/24",
    67  			IpNetworkExchange:     nil,
    68  			PublicNaptEnabledFlag: false,
    69  		}},
    70  	}, nil
    71  }
    72  
    73  func (f fakeNetworkingAPI) InstanceDetails(
    74  	name string,
    75  ) (response.Instance, error) {
    76  	return response.Instance{
    77  		Shape:     "oc3",
    78  		Imagelist: "/oracle/public/oel_6.4_2GB_v1",
    79  		Name:      "/Compute-acme/jack.jones@example.com/0/88e5710d-ccce-4da6-97f8-36ab7999b705",
    80  		Label:     "0",
    81  		SSHKeys: []string{
    82  			"/Compute-acme/jack.jones@example.com/dev-key1",
    83  		},
    84  	}, nil
    85  }
    86  
    87  func (f fakeNetworkingAPI) AllAcls(filter []api.Filter) (response.AllAcls, error) {
    88  	return response.AllAcls{}, nil
    89  }
    90  
    91  func (f fakeNetworkingAPI) ComposeName(name string) string {
    92  	return fmt.Sprintf("https://some-url.us6.com/%s", name)
    93  }
    94  
    95  func (e *environSuite) TestSupportSpaces(c *gc.C) {
    96  	ok, err := e.netEnv.SupportsSpaces(e.callCtx)
    97  	c.Assert(err, gc.IsNil)
    98  	c.Assert(ok, jc.IsTrue)
    99  }
   100  
   101  func (e *environSuite) TestSupportsSpaceDiscovery(c *gc.C) {
   102  	ok, err := e.netEnv.SupportsSpaceDiscovery(e.callCtx)
   103  	c.Assert(err, gc.IsNil)
   104  	c.Assert(ok, jc.IsTrue)
   105  }
   106  
   107  func (e *environSuite) TestSupportsContainerAddress(c *gc.C) {
   108  	ok, err := e.netEnv.SupportsContainerAddresses(e.callCtx)
   109  	c.Assert(err, gc.NotNil)
   110  	c.Assert(ok, jc.IsFalse)
   111  	is := errors.IsNotSupported(err)
   112  	c.Assert(is, jc.IsTrue)
   113  }
   114  
   115  func (e *environSuite) TestAllocateContainerAddress(c *gc.C) {
   116  	var (
   117  		id   instance.Id
   118  		tag  names.MachineTag
   119  		info []networkenv.InterfaceInfo
   120  	)
   121  
   122  	addr, err := e.netEnv.AllocateContainerAddresses(e.callCtx, id, tag, info)
   123  	c.Assert(err, gc.NotNil)
   124  	c.Assert(addr, gc.IsNil)
   125  	is := errors.IsNotSupported(err)
   126  	c.Assert(is, jc.IsTrue)
   127  }
   128  
   129  func (e *environSuite) TestReleaseContainerAddresses(c *gc.C) {
   130  	var i []networkenv.ProviderInterfaceInfo
   131  	err := e.netEnv.ReleaseContainerAddresses(e.callCtx, i)
   132  	c.Assert(err, gc.NotNil)
   133  	is := errors.IsNotSupported(err)
   134  	c.Assert(is, jc.IsTrue)
   135  }
   136  
   137  func (e *environSuite) TestSubnetsWithEmptyParams(c *gc.C) {
   138  	info, err := e.netEnv.Subnets(e.callCtx, "", nil)
   139  	c.Assert(info, jc.DeepEquals, []networkenv.SubnetInfo{})
   140  	c.Assert(err, gc.IsNil)
   141  }
   142  
   143  func (e *environSuite) TestSubnets(c *gc.C) {
   144  	ids := []networkenv.Id{networkenv.Id("0")}
   145  	info, err := e.netEnv.Subnets(e.callCtx, instance.Id("0"), ids)
   146  	c.Assert(info, jc.DeepEquals, []networkenv.SubnetInfo{})
   147  	c.Assert(err, gc.IsNil)
   148  }
   149  
   150  func (e *environSuite) TestNetworkInterfacesWithEmptyParams(c *gc.C) {
   151  	envAPI := oracletesting.DefaultEnvironAPI
   152  	envAPI.FakeInstance.All.Result[0].Networking = common.Networking{}
   153  	envAPI.FakeInstance.All.Result[0].Attributes.Network = map[string]response.Network{}
   154  
   155  	env, err := oracle.NewOracleEnviron(
   156  		&oracle.EnvironProvider{},
   157  		environs.OpenParams{
   158  			Config: testing.ModelConfig(c),
   159  		},
   160  		envAPI,
   161  		&advancingClock,
   162  	)
   163  
   164  	c.Assert(err, gc.IsNil)
   165  	c.Assert(env, gc.NotNil)
   166  
   167  	netEnv := network.NewEnviron(&fakeNetworkingAPI{}, env)
   168  	c.Assert(netEnv, gc.NotNil)
   169  
   170  	info, err := netEnv.NetworkInterfaces(e.callCtx, instance.Id("0"))
   171  	c.Assert(info, jc.DeepEquals, []networkenv.InterfaceInfo{})
   172  	c.Assert(err, gc.IsNil)
   173  }
   174  
   175  func (e *environSuite) TestSpaces(c *gc.C) {
   176  	info, err := e.netEnv.Spaces(e.callCtx)
   177  	c.Assert(err, gc.IsNil)
   178  	c.Assert(info, jc.DeepEquals, []networkenv.SpaceInfo{})
   179  }