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  }