github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/controller"
    12  	"github.com/juju/juju/environs"
    13  	envtesting "github.com/juju/juju/environs/testing"
    14  	"github.com/juju/juju/network"
    15  	"github.com/juju/juju/provider/common"
    16  	"github.com/juju/juju/provider/gce"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type environSuite struct {
    21  	gce.BaseSuite
    22  }
    23  
    24  var _ = gc.Suite(&environSuite{})
    25  
    26  func (s *environSuite) TestName(c *gc.C) {
    27  	name := s.Env.Name()
    28  
    29  	c.Check(name, gc.Equals, "google")
    30  }
    31  
    32  func (s *environSuite) TestProvider(c *gc.C) {
    33  	provider := s.Env.Provider()
    34  
    35  	c.Check(provider, gc.Equals, gce.Provider)
    36  }
    37  
    38  func (s *environSuite) TestRegion(c *gc.C) {
    39  	cloudSpec, err := s.Env.Region()
    40  	c.Assert(err, jc.ErrorIsNil)
    41  
    42  	c.Check(cloudSpec.Region, gc.Equals, "us-east1")
    43  	c.Check(cloudSpec.Endpoint, gc.Equals, "https://www.googleapis.com")
    44  }
    45  
    46  func (s *environSuite) TestSetConfig(c *gc.C) {
    47  	err := s.Env.SetConfig(s.Config)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	c.Check(gce.ExposeEnvConfig(s.Env), jc.DeepEquals, s.EnvConfig)
    51  	c.Check(gce.ExposeEnvConnection(s.Env), gc.Equals, s.FakeConn)
    52  }
    53  
    54  func (s *environSuite) TestSetConfigFake(c *gc.C) {
    55  	err := s.Env.SetConfig(s.Config)
    56  	c.Assert(err, jc.ErrorIsNil)
    57  
    58  	c.Check(s.FakeConn.Calls, gc.HasLen, 0)
    59  }
    60  
    61  func (s *environSuite) TestConfig(c *gc.C) {
    62  	cfg := s.Env.Config()
    63  
    64  	c.Check(cfg, jc.DeepEquals, s.Config)
    65  }
    66  
    67  func (s *environSuite) TestBootstrap(c *gc.C) {
    68  	s.FakeCommon.Arch = "amd64"
    69  	s.FakeCommon.Series = "trusty"
    70  	finalizer := func(environs.BootstrapContext, *instancecfg.InstanceConfig, environs.BootstrapDialOpts) error {
    71  		return nil
    72  	}
    73  	s.FakeCommon.BSFinalizer = finalizer
    74  
    75  	ctx := envtesting.BootstrapContext(c)
    76  	params := environs.BootstrapParams{
    77  		ControllerConfig: testing.FakeControllerConfig(),
    78  	}
    79  	result, err := s.Env.Bootstrap(ctx, s.CallCtx, params)
    80  	c.Assert(err, jc.ErrorIsNil)
    81  
    82  	c.Check(result.Arch, gc.Equals, "amd64")
    83  	c.Check(result.Series, gc.Equals, "trusty")
    84  	// We don't check bsFinalizer because functions cannot be compared.
    85  	c.Check(result.CloudBootstrapFinalizer, gc.NotNil)
    86  }
    87  
    88  func (s *environSuite) TestBootstrapInvalidCredentialError(c *gc.C) {
    89  	s.FakeConn.Err = gce.InvalidCredentialError
    90  	c.Assert(s.InvalidatedCredentials, jc.IsFalse)
    91  	params := environs.BootstrapParams{
    92  		ControllerConfig: testing.FakeControllerConfig(),
    93  	}
    94  	_, err := s.Env.Bootstrap(envtesting.BootstrapContext(c), s.CallCtx, params)
    95  	c.Check(err, gc.NotNil)
    96  	c.Assert(s.InvalidatedCredentials, jc.IsTrue)
    97  }
    98  
    99  func (s *environSuite) TestBootstrapOpensAPIPort(c *gc.C) {
   100  	config := testing.FakeControllerConfig()
   101  	s.checkAPIPorts(c, config, []int{config.APIPort()})
   102  }
   103  
   104  func (s *environSuite) TestBootstrapOpensAPIPortsWithAutocert(c *gc.C) {
   105  	config := testing.FakeControllerConfig()
   106  	config["api-port"] = 443
   107  	config["autocert-dns-name"] = "example.com"
   108  	s.checkAPIPorts(c, config, []int{443, 80})
   109  }
   110  
   111  func (s *environSuite) checkAPIPorts(c *gc.C, config controller.Config, expectedPorts []int) {
   112  	finalizer := func(environs.BootstrapContext, *instancecfg.InstanceConfig, environs.BootstrapDialOpts) error {
   113  		return nil
   114  	}
   115  	s.FakeCommon.BSFinalizer = finalizer
   116  
   117  	ctx := envtesting.BootstrapContext(c)
   118  	params := environs.BootstrapParams{
   119  		ControllerConfig: config,
   120  	}
   121  	_, err := s.Env.Bootstrap(ctx, s.CallCtx, params)
   122  	c.Assert(err, jc.ErrorIsNil)
   123  
   124  	called, calls := s.FakeConn.WasCalled("OpenPorts")
   125  	c.Check(called, gc.Equals, true)
   126  	c.Check(calls, gc.HasLen, len(expectedPorts))
   127  	for i, call := range calls {
   128  		port := expectedPorts[i]
   129  		c.Check(call.FirewallName, gc.Equals, gce.GlobalFirewallName(s.Env))
   130  		c.Check(call.Rules, jc.DeepEquals, []network.IngressRule{
   131  			network.MustNewIngressRule("tcp", port, port),
   132  		})
   133  	}
   134  }
   135  
   136  func (s *environSuite) TestBootstrapCommon(c *gc.C) {
   137  	ctx := envtesting.BootstrapContext(c)
   138  	params := environs.BootstrapParams{
   139  		ControllerConfig: testing.FakeControllerConfig(),
   140  	}
   141  	_, err := s.Env.Bootstrap(ctx, s.CallCtx, params)
   142  	c.Assert(err, jc.ErrorIsNil)
   143  
   144  	s.FakeCommon.CheckCalls(c, []gce.FakeCall{{
   145  		FuncName: "Bootstrap",
   146  		Args: gce.FakeCallArgs{
   147  			"ctx":    ctx,
   148  			"switch": s.Env,
   149  			"params": params,
   150  		},
   151  	}})
   152  }
   153  
   154  func (s *environSuite) TestCreateInvalidCredentialError(c *gc.C) {
   155  	s.FakeConn.Err = gce.InvalidCredentialError
   156  	c.Assert(s.InvalidatedCredentials, jc.IsFalse)
   157  	err := s.Env.Create(s.CallCtx, environs.CreateParams{})
   158  	c.Check(err, gc.NotNil)
   159  	c.Assert(s.InvalidatedCredentials, jc.IsTrue)
   160  }
   161  
   162  func (s *environSuite) TestDestroyInvalidCredentialError(c *gc.C) {
   163  	s.FakeConn.Err = gce.InvalidCredentialError
   164  	c.Assert(s.InvalidatedCredentials, jc.IsFalse)
   165  	err := s.Env.Destroy(s.CallCtx)
   166  	c.Check(err, gc.NotNil)
   167  	c.Assert(s.InvalidatedCredentials, jc.IsTrue)
   168  }
   169  
   170  func (s *environSuite) TestDestroy(c *gc.C) {
   171  	err := s.Env.Destroy(s.CallCtx)
   172  
   173  	c.Check(err, jc.ErrorIsNil)
   174  }
   175  
   176  func (s *environSuite) TestDestroyAPI(c *gc.C) {
   177  	err := s.Env.Destroy(s.CallCtx)
   178  	c.Assert(err, jc.ErrorIsNil)
   179  
   180  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
   181  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "Ports")
   182  	fwname := common.EnvFullName(s.Env.Config().UUID())
   183  	c.Check(s.FakeConn.Calls[0].FirewallName, gc.Equals, fwname)
   184  	s.FakeCommon.CheckCalls(c, []gce.FakeCall{{
   185  		FuncName: "Destroy",
   186  		Args: gce.FakeCallArgs{
   187  			"switch": s.Env,
   188  		},
   189  	}})
   190  }