github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/oracle/environ_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  	"fmt"
     9  	"time"
    10  
    11  	"github.com/juju/clock/testclock"
    12  	gitjujutesting "github.com/juju/testing"
    13  	"github.com/juju/utils/arch"
    14  	"github.com/juju/version"
    15  	gc "gopkg.in/check.v1"
    16  
    17  	"github.com/juju/juju/core/constraints"
    18  	"github.com/juju/juju/core/instance"
    19  	"github.com/juju/juju/environs"
    20  	"github.com/juju/juju/environs/context"
    21  	envtesting "github.com/juju/juju/environs/testing"
    22  	"github.com/juju/juju/provider/oracle"
    23  	oracletesting "github.com/juju/juju/provider/oracle/testing"
    24  	"github.com/juju/juju/testing"
    25  	"github.com/juju/juju/tools"
    26  )
    27  
    28  type environSuite struct {
    29  	gitjujutesting.IsolationSuite
    30  	env *oracle.OracleEnviron
    31  
    32  	callCtx context.ProviderCallContext
    33  }
    34  
    35  func (e *environSuite) SetUpTest(c *gc.C) {
    36  	var err error
    37  	testEnvironAPI := oracletesting.DefaultEnvironAPI
    38  	e.env, err = oracle.NewOracleEnviron(
    39  		&oracle.EnvironProvider{},
    40  		environs.OpenParams{
    41  			Config: testing.ModelConfig(c),
    42  		},
    43  		testEnvironAPI,
    44  		&advancingClock,
    45  	)
    46  	c.Assert(err, gc.IsNil)
    47  	c.Assert(e.env, gc.NotNil)
    48  
    49  	// Setup the FakeInstance Name to match with the new
    50  	// OracleEnviron.  Note, we are actually changing the
    51  	// value in oracletesting.DefaultEnvironAPI.
    52  	hostname, err := oracle.CreateHostname(e.env, "0")
    53  	c.Assert(err, gc.IsNil)
    54  	testEnvironAPI.FakeInstance.All.Result[0].Name = fmt.Sprintf("/Compute-a432100/sgiulitti@cloudbase.com/%s/ebc4ce91-56bb-4120-ba78-13762597f837", hostname)
    55  	oracle.SetEnvironAPI(e.env, testEnvironAPI)
    56  	e.callCtx = context.NewCloudCallContext()
    57  }
    58  
    59  var _ = gc.Suite(&environSuite{})
    60  
    61  // shamelessly copied from one of the OpenStack tests
    62  var clk = testclock.NewClock(time.Time{})
    63  var advancingClock = testclock.AutoAdvancingClock{clk, clk.Advance}
    64  
    65  func (e *environSuite) TestAvailabilityZone(c *gc.C) {
    66  	zones, err := e.env.AvailabilityZones(e.callCtx)
    67  	c.Assert(err, gc.IsNil)
    68  	c.Assert(zones, gc.NotNil)
    69  }
    70  
    71  func (e *environSuite) TestInstanceAvailabilityZoneNames(c *gc.C) {
    72  	zones, err := e.env.InstanceAvailabilityZoneNames(e.callCtx, []instance.Id{
    73  		instance.Id("0"),
    74  	})
    75  	c.Assert(err, gc.IsNil)
    76  	c.Assert(zones, gc.NotNil)
    77  }
    78  
    79  func (e *environSuite) TestInstanceAvailabilityZoneNamesWithErrors(c *gc.C) {
    80  	environ, err := oracle.NewOracleEnviron(
    81  		&oracle.EnvironProvider{},
    82  		environs.OpenParams{
    83  			Config: testing.ModelConfig(c),
    84  		},
    85  		&oracletesting.FakeEnvironAPI{
    86  			FakeInstancer: oracletesting.FakeInstancer{
    87  				InstanceErr: errors.New("FakeInstanceErr"),
    88  			},
    89  		},
    90  		&advancingClock,
    91  	)
    92  	c.Assert(err, gc.IsNil)
    93  	c.Assert(environ, gc.NotNil)
    94  
    95  	_, err = environ.InstanceAvailabilityZoneNames(e.callCtx, []instance.Id{instance.Id("0")})
    96  	c.Assert(err, gc.NotNil)
    97  
    98  	environ, err = oracle.NewOracleEnviron(
    99  		&oracle.EnvironProvider{},
   100  		environs.OpenParams{
   101  			Config: testing.ModelConfig(c),
   102  		},
   103  		&oracletesting.FakeEnvironAPI{
   104  			FakeInstance: oracletesting.FakeInstance{
   105  				AllErr: errors.New("FakeInstanceErr"),
   106  			},
   107  		},
   108  		&advancingClock,
   109  	)
   110  	c.Assert(err, gc.IsNil)
   111  	c.Assert(environ, gc.NotNil)
   112  
   113  	_, err = environ.InstanceAvailabilityZoneNames(e.callCtx, []instance.Id{
   114  		instance.Id("0"),
   115  		instance.Id("1"),
   116  	})
   117  	c.Assert(err, gc.NotNil)
   118  }
   119  
   120  func (e *environSuite) TestPrepareForBootstrap(c *gc.C) {
   121  	ctx := envtesting.BootstrapContext(c)
   122  	err := e.env.PrepareForBootstrap(ctx)
   123  	c.Assert(err, gc.IsNil)
   124  }
   125  
   126  func (e *environSuite) TestPrepareForBootstrapWithErrors(c *gc.C) {
   127  	environ, err := oracle.NewOracleEnviron(
   128  		&oracle.EnvironProvider{},
   129  		environs.OpenParams{
   130  			Config: testing.ModelConfig(c),
   131  		},
   132  		&oracletesting.FakeEnvironAPI{
   133  			FakeAuthenticater: oracletesting.FakeAuthenticater{
   134  				AuthenticateErr: errors.New("FakeAuthenticateErr"),
   135  			},
   136  		},
   137  		&advancingClock,
   138  	)
   139  	c.Assert(err, gc.IsNil)
   140  	c.Assert(environ, gc.NotNil)
   141  
   142  	ctx := envtesting.BootstrapContext(c)
   143  	err = environ.PrepareForBootstrap(ctx)
   144  	c.Assert(err, gc.NotNil)
   145  }
   146  
   147  func makeToolsList(series string) tools.List {
   148  	var toolsVersion version.Binary
   149  	toolsVersion.Number = version.MustParse("1.26.0")
   150  	toolsVersion.Arch = arch.AMD64
   151  	toolsVersion.Series = series
   152  	return tools.List{{
   153  		Version: toolsVersion,
   154  		URL:     fmt.Sprintf("http://example.com/tools/juju-%s.tgz", toolsVersion),
   155  		SHA256:  "1234567890abcdef",
   156  		Size:    1024,
   157  	}}
   158  }
   159  
   160  func (e *environSuite) TestBootstrap(c *gc.C) {
   161  	environ, err := oracle.NewOracleEnviron(
   162  		&oracle.EnvironProvider{},
   163  		environs.OpenParams{
   164  			Config: testing.ModelConfig(c),
   165  		},
   166  		oracletesting.DefaultEnvironAPI,
   167  		&advancingClock,
   168  	)
   169  	c.Assert(err, gc.IsNil)
   170  	c.Assert(environ, gc.NotNil)
   171  
   172  	ctx := envtesting.BootstrapContext(c)
   173  	_, err = environ.Bootstrap(ctx, e.callCtx,
   174  		environs.BootstrapParams{
   175  			ControllerConfig:     testing.FakeControllerConfig(),
   176  			AvailableTools:       makeToolsList("xenial"),
   177  			BootstrapSeries:      "xenial",
   178  			BootstrapConstraints: constraints.MustParse("mem=3.5G"),
   179  		})
   180  	c.Assert(err, gc.IsNil)
   181  }
   182  
   183  func (e *environSuite) TestCreate(c *gc.C) {
   184  	err := e.env.Create(e.callCtx, environs.CreateParams{
   185  		ControllerUUID: "dsauhdiuashd",
   186  	})
   187  	c.Assert(err, gc.IsNil)
   188  }
   189  
   190  func (e *environSuite) TestCreateWithErrors(c *gc.C) {
   191  	environ, err := oracle.NewOracleEnviron(
   192  		&oracle.EnvironProvider{},
   193  		environs.OpenParams{
   194  			Config: testing.ModelConfig(c),
   195  		},
   196  		&oracletesting.FakeEnvironAPI{
   197  			FakeAuthenticater: oracletesting.FakeAuthenticater{
   198  				AuthenticateErr: errors.New("FakeAuthenticateErr"),
   199  			},
   200  		},
   201  		&advancingClock,
   202  	)
   203  	c.Assert(err, gc.IsNil)
   204  	c.Assert(environ, gc.NotNil)
   205  
   206  	err = environ.Create(e.callCtx, environs.CreateParams{
   207  		ControllerUUID: "daushdasd",
   208  	})
   209  	c.Assert(err, gc.NotNil)
   210  }
   211  
   212  func (e *environSuite) TestAdoptResources(c *gc.C) {
   213  	err := e.env.AdoptResources(e.callCtx, "", version.Number{})
   214  	c.Assert(err, gc.IsNil)
   215  }
   216  
   217  func (e *environSuite) TestStopInstances(c *gc.C) {
   218  	hostname, err := oracle.CreateHostname(e.env, "0")
   219  	c.Assert(err, gc.IsNil)
   220  	ids := []instance.Id{instance.Id(hostname)}
   221  	err = e.env.StopInstances(e.callCtx, ids...)
   222  	c.Assert(err, gc.IsNil)
   223  }
   224  
   225  func (e *environSuite) TestAllInstances(c *gc.C) {
   226  	_, err := e.env.AllInstances(e.callCtx)
   227  	c.Assert(err, gc.IsNil)
   228  }
   229  
   230  func (e *environSuite) TestMaintainInstance(c *gc.C) {
   231  	err := e.env.MaintainInstance(e.callCtx, environs.StartInstanceParams{})
   232  	c.Assert(err, gc.IsNil)
   233  }
   234  
   235  func (e *environSuite) TestConfig(c *gc.C) {
   236  	cfg := e.env.Config()
   237  	c.Assert(cfg, gc.NotNil)
   238  }
   239  
   240  func (e *environSuite) TestConstraintsValidator(c *gc.C) {
   241  	validator, err := e.env.ConstraintsValidator(e.callCtx)
   242  	c.Assert(err, gc.IsNil)
   243  	c.Assert(validator, gc.NotNil)
   244  }
   245  
   246  func (e *environSuite) TestSetConfig(c *gc.C) {
   247  	err := e.env.SetConfig(testing.ModelConfig(c))
   248  	c.Assert(err, gc.NotNil)
   249  }
   250  
   251  func (e *environSuite) TestInstances(c *gc.C) {
   252  	hostname, err := oracle.CreateHostname(e.env, "0")
   253  	c.Assert(err, gc.IsNil)
   254  	instances, err := e.env.Instances(e.callCtx, []instance.Id{instance.Id(hostname)})
   255  	c.Assert(err, gc.IsNil)
   256  	c.Assert(instances, gc.NotNil)
   257  }
   258  
   259  func (e *environSuite) TestConstrollerInstances(c *gc.C) {
   260  	instances, err := e.env.ControllerInstances(e.callCtx, "23123-3123-12312")
   261  	c.Assert(err, gc.Equals, environs.ErrNoInstances)
   262  	c.Assert(instances, gc.IsNil)
   263  }
   264  
   265  func (e *environSuite) TestDestroy(c *gc.C) {
   266  	err := e.env.Destroy(e.callCtx)
   267  	c.Assert(err, gc.IsNil)
   268  }
   269  
   270  func (e *environSuite) TestDestroyController(c *gc.C) {
   271  	err := e.env.DestroyController(e.callCtx, "231233-312-321-3312")
   272  	c.Assert(err, gc.IsNil)
   273  }
   274  
   275  func (e *environSuite) TestProvider(c *gc.C) {
   276  	p := e.env.Provider()
   277  	c.Assert(p, gc.NotNil)
   278  }
   279  
   280  func (e *environSuite) TestPrecheckInstance(c *gc.C) {
   281  	err := e.env.PrecheckInstance(e.callCtx, environs.PrecheckInstanceParams{})
   282  	c.Assert(err, gc.IsNil)
   283  }
   284  
   285  func (e *environSuite) TestInstanceTypes(c *gc.C) {
   286  	types, err := e.env.InstanceTypes(e.callCtx, constraints.Value{})
   287  	c.Assert(err, gc.IsNil)
   288  	c.Assert(types, gc.NotNil)
   289  }