github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/gce/environ_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package gce_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/cloudconfig/instancecfg"
    11  	"github.com/juju/juju/environs"
    12  	envtesting "github.com/juju/juju/environs/testing"
    13  	"github.com/juju/juju/network"
    14  	"github.com/juju/juju/provider/common"
    15  	"github.com/juju/juju/provider/gce"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  type environSuite struct {
    20  	gce.BaseSuite
    21  }
    22  
    23  var _ = gc.Suite(&environSuite{})
    24  
    25  func (s *environSuite) TestName(c *gc.C) {
    26  	name := s.Env.Name()
    27  
    28  	c.Check(name, gc.Equals, "google")
    29  }
    30  
    31  func (s *environSuite) TestProvider(c *gc.C) {
    32  	provider := s.Env.Provider()
    33  
    34  	c.Check(provider, gc.Equals, gce.Provider)
    35  }
    36  
    37  func (s *environSuite) TestRegion(c *gc.C) {
    38  	cloudSpec, err := s.Env.Region()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  
    41  	c.Check(cloudSpec.Region, gc.Equals, "us-east1")
    42  	c.Check(cloudSpec.Endpoint, gc.Equals, "https://www.googleapis.com")
    43  }
    44  
    45  func (s *environSuite) TestSetConfig(c *gc.C) {
    46  	err := s.Env.SetConfig(s.Config)
    47  	c.Assert(err, jc.ErrorIsNil)
    48  
    49  	c.Check(gce.ExposeEnvConfig(s.Env), jc.DeepEquals, s.EnvConfig)
    50  	c.Check(gce.ExposeEnvConnection(s.Env), gc.Equals, s.FakeConn)
    51  }
    52  
    53  func (s *environSuite) TestSetConfigFake(c *gc.C) {
    54  	err := s.Env.SetConfig(s.Config)
    55  	c.Assert(err, jc.ErrorIsNil)
    56  
    57  	c.Check(s.FakeConn.Calls, gc.HasLen, 0)
    58  }
    59  
    60  func (s *environSuite) TestConfig(c *gc.C) {
    61  	cfg := s.Env.Config()
    62  
    63  	c.Check(cfg, jc.DeepEquals, s.Config)
    64  }
    65  
    66  func (s *environSuite) TestBootstrap(c *gc.C) {
    67  	s.FakeCommon.Arch = "amd64"
    68  	s.FakeCommon.Series = "trusty"
    69  	finalizer := func(environs.BootstrapContext, *instancecfg.InstanceConfig, environs.BootstrapDialOpts) error {
    70  		return nil
    71  	}
    72  	s.FakeCommon.BSFinalizer = finalizer
    73  
    74  	ctx := envtesting.BootstrapContext(c)
    75  	params := environs.BootstrapParams{
    76  		ControllerConfig: testing.FakeControllerConfig(),
    77  	}
    78  	result, err := s.Env.Bootstrap(ctx, params)
    79  	c.Assert(err, jc.ErrorIsNil)
    80  
    81  	c.Check(result.Arch, gc.Equals, "amd64")
    82  	c.Check(result.Series, gc.Equals, "trusty")
    83  	// We don't check bsFinalizer because functions cannot be compared.
    84  	c.Check(result.Finalize, gc.NotNil)
    85  }
    86  
    87  func (s *environSuite) TestBootstrapOpensAPIPort(c *gc.C) {
    88  	finalizer := func(environs.BootstrapContext, *instancecfg.InstanceConfig, environs.BootstrapDialOpts) error {
    89  		return nil
    90  	}
    91  	s.FakeCommon.BSFinalizer = finalizer
    92  
    93  	ctx := envtesting.BootstrapContext(c)
    94  	params := environs.BootstrapParams{
    95  		ControllerConfig: testing.FakeControllerConfig(),
    96  	}
    97  	_, err := s.Env.Bootstrap(ctx, params)
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	apiPort := params.ControllerConfig.APIPort()
   100  
   101  	called, calls := s.FakeConn.WasCalled("OpenPorts")
   102  	c.Check(called, gc.Equals, true)
   103  	c.Check(calls, gc.HasLen, 1)
   104  	c.Check(calls[0].FirewallName, gc.Equals, gce.GlobalFirewallName(s.Env))
   105  	expectPorts := []network.PortRange{{
   106  		FromPort: apiPort,
   107  		ToPort:   apiPort,
   108  		Protocol: "tcp",
   109  	}}
   110  	c.Check(calls[0].PortRanges, jc.DeepEquals, expectPorts)
   111  }
   112  
   113  func (s *environSuite) TestBootstrapCommon(c *gc.C) {
   114  	ctx := envtesting.BootstrapContext(c)
   115  	params := environs.BootstrapParams{
   116  		ControllerConfig: testing.FakeControllerConfig(),
   117  	}
   118  	_, err := s.Env.Bootstrap(ctx, params)
   119  	c.Assert(err, jc.ErrorIsNil)
   120  
   121  	s.FakeCommon.CheckCalls(c, []gce.FakeCall{{
   122  		FuncName: "Bootstrap",
   123  		Args: gce.FakeCallArgs{
   124  			"ctx":    ctx,
   125  			"switch": s.Env,
   126  			"params": params,
   127  		},
   128  	}})
   129  }
   130  
   131  func (s *environSuite) TestDestroy(c *gc.C) {
   132  	err := s.Env.Destroy()
   133  
   134  	c.Check(err, jc.ErrorIsNil)
   135  }
   136  
   137  func (s *environSuite) TestDestroyAPI(c *gc.C) {
   138  	err := s.Env.Destroy()
   139  	c.Assert(err, jc.ErrorIsNil)
   140  
   141  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
   142  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "Ports")
   143  	fwname := common.EnvFullName(s.Env.Config().UUID())
   144  	c.Check(s.FakeConn.Calls[0].FirewallName, gc.Equals, fwname)
   145  	s.FakeCommon.CheckCalls(c, []gce.FakeCall{{
   146  		FuncName: "Destroy",
   147  		Args: gce.FakeCallArgs{
   148  			"switch": s.Env,
   149  		},
   150  	}})
   151  }