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 }