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

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package oracle_test
     5  
     6  import (
     7  	"errors"
     8  	"sync"
     9  
    10  	"github.com/juju/go-oracle-cloud/response"
    11  	gitjujutesting "github.com/juju/testing"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/core/instance"
    15  	corenetwork "github.com/juju/juju/core/network"
    16  	"github.com/juju/juju/environs"
    17  	"github.com/juju/juju/environs/config"
    18  	"github.com/juju/juju/environs/context"
    19  	jujunetwork "github.com/juju/juju/network"
    20  	"github.com/juju/juju/provider/oracle"
    21  	oracletesting "github.com/juju/juju/provider/oracle/testing"
    22  	"github.com/juju/juju/testing"
    23  )
    24  
    25  type instanceSuite struct {
    26  	gitjujutesting.IsolationSuite
    27  	env   *oracle.OracleEnviron
    28  	mutex *sync.Mutex
    29  
    30  	callCtx context.ProviderCallContext
    31  }
    32  
    33  func (i *instanceSuite) SetUpTest(c *gc.C) {
    34  	var err error
    35  	i.env, err = oracle.NewOracleEnviron(
    36  		&oracle.EnvironProvider{},
    37  		environs.OpenParams{
    38  			Config: testing.ModelConfig(c),
    39  		},
    40  		oracletesting.DefaultEnvironAPI,
    41  		&advancingClock,
    42  	)
    43  	c.Assert(err, gc.IsNil)
    44  	c.Assert(i.env, gc.NotNil)
    45  	i.mutex = &sync.Mutex{}
    46  	i.callCtx = context.NewCloudCallContext()
    47  }
    48  
    49  func (i *instanceSuite) setEnvironAPI(client oracle.EnvironAPI) {
    50  	i.mutex.Lock()
    51  	defer i.mutex.Unlock()
    52  	oracle.SetEnvironAPI(i.env, client)
    53  }
    54  
    55  var _ = gc.Suite(&instanceSuite{})
    56  
    57  func (i instanceSuite) TestNewOracleInstanceEmpty(c *gc.C) {
    58  	instance, err := oracle.NewOracleInstance(response.Instance{}, i.env)
    59  	c.Assert(err, gc.NotNil)
    60  	c.Assert(instance, gc.IsNil)
    61  }
    62  
    63  func (i instanceSuite) TestNewOracleInstance(c *gc.C) {
    64  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
    65  	c.Assert(err, gc.IsNil)
    66  	c.Assert(instance, gc.NotNil)
    67  }
    68  
    69  func (i instanceSuite) TestId(c *gc.C) {
    70  	inst, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
    71  	c.Assert(err, gc.IsNil)
    72  	c.Assert(inst, gc.NotNil)
    73  	id := inst.Id()
    74  	c.Assert(id, gc.Equals, instance.Id("0"))
    75  }
    76  
    77  func (i instanceSuite) TestStatus(c *gc.C) {
    78  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
    79  	c.Assert(err, gc.IsNil)
    80  	c.Assert(instance, gc.NotNil)
    81  
    82  	status := instance.Status(i.callCtx)
    83  	ok := (len(status.Status) > 0)
    84  	c.Assert(ok, gc.Equals, true)
    85  	ok = (len(status.Message) > 0)
    86  	c.Assert(ok, gc.Equals, false)
    87  }
    88  
    89  func (i instanceSuite) TestStorageAttachments(c *gc.C) {
    90  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
    91  	c.Assert(err, gc.IsNil)
    92  	c.Assert(instance, gc.NotNil)
    93  
    94  	attachs := instance.StorageAttachments()
    95  	c.Assert(attachs, gc.NotNil)
    96  }
    97  
    98  func (i instanceSuite) TestAddresses(c *gc.C) {
    99  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
   100  	c.Assert(err, gc.IsNil)
   101  	c.Assert(instance, gc.NotNil)
   102  
   103  	addrs, err := instance.Addresses(i.callCtx)
   104  	c.Assert(err, gc.IsNil)
   105  	c.Assert(addrs, gc.NotNil)
   106  }
   107  
   108  func (i instanceSuite) TestAddressesWithErrors(c *gc.C) {
   109  	fakeEnv := &oracletesting.FakeEnvironAPI{
   110  		FakeIpAssociation: oracletesting.FakeIpAssociation{
   111  			AllErr: errors.New("FakeEnvironAPI"),
   112  		},
   113  	}
   114  	i.setEnvironAPI(fakeEnv)
   115  
   116  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
   117  	c.Assert(err, gc.IsNil)
   118  	c.Assert(instance, gc.NotNil)
   119  
   120  	_, err = instance.Addresses(i.callCtx)
   121  	c.Assert(err, gc.ErrorMatches, "FakeEnvironAPI")
   122  }
   123  
   124  func (i instanceSuite) TestOpenPorts(c *gc.C) {
   125  	fakeConfig := map[string]interface{}{
   126  		"firewall-mode": config.FwInstance,
   127  	}
   128  	config, err := i.env.Config().Apply(fakeConfig)
   129  	c.Assert(err, gc.IsNil)
   130  
   131  	err = i.env.SetConfig(config)
   132  	c.Assert(err, gc.IsNil)
   133  
   134  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
   135  	c.Assert(err, gc.IsNil)
   136  	c.Assert(instance, gc.NotNil)
   137  
   138  	err = instance.OpenPorts(i.callCtx, "0", []jujunetwork.IngressRule{
   139  		{
   140  			PortRange: corenetwork.PortRange{
   141  				FromPort: 0,
   142  				ToPort:   0,
   143  			},
   144  			SourceCIDRs: nil,
   145  		},
   146  	})
   147  	c.Assert(err, gc.IsNil)
   148  }
   149  
   150  func (i instanceSuite) TestClosePorts(c *gc.C) {
   151  	fakeConfig := map[string]interface{}{
   152  		"firewall-mode": config.FwInstance,
   153  	}
   154  	config, err := i.env.Config().Apply(fakeConfig)
   155  	c.Assert(err, gc.IsNil)
   156  
   157  	err = i.env.SetConfig(config)
   158  	c.Assert(err, gc.IsNil)
   159  
   160  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
   161  	c.Assert(err, gc.IsNil)
   162  	c.Assert(instance, gc.NotNil)
   163  
   164  	err = instance.ClosePorts(i.callCtx, "0", []jujunetwork.IngressRule{
   165  		{
   166  			PortRange: corenetwork.PortRange{
   167  				FromPort: 0,
   168  				ToPort:   0,
   169  			},
   170  			SourceCIDRs: nil,
   171  		},
   172  	})
   173  	c.Assert(err, gc.IsNil)
   174  }
   175  
   176  func (i instanceSuite) TestIngressRules(c *gc.C) {
   177  	fakeConfig := map[string]interface{}{
   178  		"firewall-mode": config.FwInstance,
   179  	}
   180  
   181  	config, err := i.env.Config().Apply(fakeConfig)
   182  	c.Assert(err, gc.IsNil)
   183  
   184  	err = i.env.SetConfig(config)
   185  	c.Assert(err, gc.IsNil)
   186  
   187  	instance, err := oracle.NewOracleInstance(oracletesting.DefaultFakeInstancer.Instance, i.env)
   188  	c.Assert(err, gc.IsNil)
   189  	c.Assert(instance, gc.NotNil)
   190  
   191  	rules, err := instance.IngressRules(i.callCtx, "0")
   192  	c.Assert(err, gc.IsNil)
   193  	c.Assert(rules, gc.NotNil)
   194  }