github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/provider/cloudsigma/environ_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package cloudsigma
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/constraints"
    11  	"github.com/juju/juju/environs"
    12  	"github.com/juju/juju/environs/simplestreams"
    13  	"github.com/juju/juju/testing"
    14  	"github.com/juju/utils/arch"
    15  )
    16  
    17  var _ environs.Environ = (*environ)(nil)
    18  var _ simplestreams.HasRegion = (*environ)(nil)
    19  var _ simplestreams.MetadataValidator = (*environ)(nil)
    20  
    21  type environSuite struct {
    22  	testing.BaseSuite
    23  }
    24  
    25  var _ = gc.Suite(&environSuite{})
    26  
    27  func (s *environSuite) SetUpSuite(c *gc.C) {
    28  	s.BaseSuite.SetUpSuite(c)
    29  }
    30  
    31  func (s *environSuite) TearDownSuite(c *gc.C) {
    32  	s.BaseSuite.TearDownSuite(c)
    33  }
    34  
    35  func (s *environSuite) SetUpTest(c *gc.C) {
    36  	s.BaseSuite.SetUpTest(c)
    37  }
    38  
    39  func (s *environSuite) TearDownTest(c *gc.C) {
    40  	s.BaseSuite.TearDownTest(c)
    41  }
    42  
    43  func (s *environSuite) TestBase(c *gc.C) {
    44  	s.PatchValue(&newClient, func(*environConfig) (*environClient, error) {
    45  		return nil, nil
    46  	})
    47  
    48  	baseConfig := newConfig(c, validAttrs().Merge(testing.Attrs{"name": "testname"}))
    49  	env, err := environs.New(baseConfig)
    50  	c.Assert(err, gc.IsNil)
    51  	env.(*environ).supportedArchitectures = []string{arch.AMD64}
    52  
    53  	cfg := env.Config()
    54  	c.Assert(cfg, gc.NotNil)
    55  	c.Check(cfg.Name(), gc.Equals, "testname")
    56  
    57  	c.Check(env.PrecheckInstance("", constraints.Value{}, ""), gc.IsNil)
    58  
    59  	hasRegion, ok := env.(simplestreams.HasRegion)
    60  	c.Check(ok, gc.Equals, true)
    61  	c.Assert(hasRegion, gc.NotNil)
    62  
    63  	cloudSpec, err := hasRegion.Region()
    64  	c.Check(err, gc.IsNil)
    65  	c.Check(cloudSpec.Region, gc.Not(gc.Equals), "")
    66  	c.Check(cloudSpec.Endpoint, gc.Not(gc.Equals), "")
    67  
    68  	archs, err := env.SupportedArchitectures()
    69  	c.Check(err, gc.IsNil)
    70  	c.Assert(archs, gc.NotNil)
    71  	c.Assert(archs, gc.HasLen, 1)
    72  	c.Check(archs[0], gc.Equals, arch.AMD64)
    73  
    74  	validator, err := env.ConstraintsValidator()
    75  	c.Check(validator, gc.NotNil)
    76  	c.Check(err, gc.IsNil)
    77  
    78  	c.Check(env.SupportsUnitPlacement(), gc.ErrorMatches, "SupportsUnitPlacement not implemented")
    79  
    80  	c.Check(env.OpenPorts(nil), gc.IsNil)
    81  	c.Check(env.ClosePorts(nil), gc.IsNil)
    82  
    83  	ports, err := env.Ports()
    84  	c.Check(ports, gc.IsNil)
    85  	c.Check(err, gc.IsNil)
    86  }
    87  
    88  func (s *environSuite) TestUnsupportedConstraints(c *gc.C) {
    89  	s.PatchValue(&newClient, func(*environConfig) (*environClient, error) {
    90  		return nil, nil
    91  	})
    92  
    93  	baseConfig := newConfig(c, validAttrs().Merge(testing.Attrs{"name": "testname"}))
    94  	env, err := environs.New(baseConfig)
    95  	c.Assert(err, gc.IsNil)
    96  	env.(*environ).supportedArchitectures = []string{arch.AMD64}
    97  
    98  	validator, err := env.ConstraintsValidator()
    99  	c.Check(validator, gc.NotNil)
   100  	c.Check(err, gc.IsNil)
   101  
   102  	unsupported, err := validator.Validate(constraints.MustParse(
   103  		"arch=amd64 tags=foo cpu-power=100 virt-type=kvm",
   104  	))
   105  	c.Assert(err, jc.ErrorIsNil)
   106  	c.Assert(unsupported, jc.SameContents, []string{"tags", "virt-type"})
   107  }