github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/provider/openstack/upgrades_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package openstack 5 6 import ( 7 "github.com/go-goose/goose/v5/identity" 8 "github.com/juju/errors" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/version/v2" 11 "go.uber.org/mock/gomock" 12 gc "gopkg.in/check.v1" 13 14 environscloudspec "github.com/juju/juju/environs/cloudspec" 15 ) 16 17 type precheckUpgradesSuite struct { 18 client *MockAuthenticatingClient 19 } 20 21 var _ = gc.Suite(&precheckUpgradesSuite{}) 22 23 func (s *precheckUpgradesSuite) TestPrecheckUpgradeOperations(c *gc.C) { 24 defer s.setupMocks(c).Finish() 25 s.expectEndpointsHasNetwork() 26 27 env := s.newEnvironForPrecheckUpgradeTest() 28 ops := env.PrecheckUpgradeOperations() 29 c.Assert(ops, gc.HasLen, 1) 30 31 op := ops[0] 32 c.Assert(op.TargetVersion, gc.Equals, version.MustParse("2.8.0")) 33 c.Assert(op.Steps, gc.HasLen, 1) 34 35 step := op.Steps[0] 36 c.Assert(step.Description(), gc.Equals, "Verify Neutron OpenStack service enabled") 37 c.Assert(step.Run(), jc.ErrorIsNil) 38 } 39 40 func (s *precheckUpgradesSuite) TestPrecheckUpgradeOperationsFail(c *gc.C) { 41 defer s.setupMocks(c).Finish() 42 s.expectEndpointsNoNetwork() 43 44 env := s.newEnvironForPrecheckUpgradeTest() 45 ops := env.PrecheckUpgradeOperations() 46 c.Assert(ops, gc.HasLen, 1) 47 48 op := ops[0] 49 c.Assert(op.Steps, gc.HasLen, 1) 50 51 err := op.Steps[0].Run() 52 c.Assert(err, jc.Satisfies, errors.IsNotFound) 53 } 54 55 func (s *precheckUpgradesSuite) newEnvironForPrecheckUpgradeTest() *Environ { 56 return &Environ{ 57 clientUnlocked: s.client, 58 cloudUnlocked: environscloudspec.CloudSpec{ 59 Region: "Region", 60 }, 61 } 62 } 63 64 func (s *precheckUpgradesSuite) expectEndpointsHasNetwork() { 65 endPts := identity.ServiceURLs{ 66 "network": "testing", 67 } 68 exp := s.client.EXPECT() 69 exp.EndpointsForRegion(gomock.Any()).Return(endPts) 70 } 71 72 func (s *precheckUpgradesSuite) expectEndpointsNoNetwork() { 73 endPts := identity.ServiceURLs{ 74 "compute": "testing", 75 } 76 exp := s.client.EXPECT() 77 exp.EndpointsForRegion(gomock.Any()).Return(endPts) 78 } 79 80 func (s *precheckUpgradesSuite) setupMocks(c *gc.C) *gomock.Controller { 81 ctrl := gomock.NewController(c) 82 s.client = NewMockAuthenticatingClient(ctrl) 83 return ctrl 84 }