From 10fed8ac97ae6e46b16a77f8884cb59d6089b459 Mon Sep 17 00:00:00 2001 From: Simon Richardson Date: Wed, 16 Aug 2023 12:07:44 +0100 Subject: [PATCH] Inject controller config getter The following injects the controller config getter into the upgrade steps facade. This is a nice easy example of swapping over to the controller config service. --- .../agent/upgradesteps/facade_mock_test.go | 377 ++++++++++++++++++ .../facades/agent/upgradesteps/interface.go | 11 +- .../agent/upgradesteps/package_test.go | 4 + .../facades/agent/upgradesteps/register.go | 9 +- apiserver/facades/agent/upgradesteps/shim.go | 10 - .../state_mock.go => state_mock_test.go} | 4 +- .../agent/upgradesteps/upgradesteps.go | 22 +- ...teps_mock.go => upgradesteps_mock_test.go} | 60 ++- .../agent/upgradesteps/upgradesteps_test.go | 49 ++- 9 files changed, 483 insertions(+), 63 deletions(-) create mode 100644 apiserver/facades/agent/upgradesteps/facade_mock_test.go delete mode 100644 apiserver/facades/agent/upgradesteps/shim.go rename apiserver/facades/agent/upgradesteps/{mocks/state_mock.go => state_mock_test.go} (96%) rename apiserver/facades/agent/upgradesteps/{mocks/upgradesteps_mock.go => upgradesteps_mock_test.go} (81%) diff --git a/apiserver/facades/agent/upgradesteps/facade_mock_test.go b/apiserver/facades/agent/upgradesteps/facade_mock_test.go new file mode 100644 index 00000000000..e5d5625aaa5 --- /dev/null +++ b/apiserver/facades/agent/upgradesteps/facade_mock_test.go @@ -0,0 +1,377 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/juju/juju/apiserver/facade (interfaces: Resources,Authorizer,WatcherRegistry) + +// Package upgradesteps_test is a generated GoMock package. +package upgradesteps_test + +import ( + reflect "reflect" + + permission "github.com/juju/juju/core/permission" + names "github.com/juju/names/v4" + worker "github.com/juju/worker/v3" + gomock "go.uber.org/mock/gomock" +) + +// MockResources is a mock of Resources interface. +type MockResources struct { + ctrl *gomock.Controller + recorder *MockResourcesMockRecorder +} + +// MockResourcesMockRecorder is the mock recorder for MockResources. +type MockResourcesMockRecorder struct { + mock *MockResources +} + +// NewMockResources creates a new mock instance. +func NewMockResources(ctrl *gomock.Controller) *MockResources { + mock := &MockResources{ctrl: ctrl} + mock.recorder = &MockResourcesMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockResources) EXPECT() *MockResourcesMockRecorder { + return m.recorder +} + +// Get mocks base method. +func (m *MockResources) Get(arg0 string) worker.Worker { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Get", arg0) + ret0, _ := ret[0].(worker.Worker) + return ret0 +} + +// Get indicates an expected call of Get. +func (mr *MockResourcesMockRecorder) Get(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockResources)(nil).Get), arg0) +} + +// Register mocks base method. +func (m *MockResources) Register(arg0 worker.Worker) string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Register", arg0) + ret0, _ := ret[0].(string) + return ret0 +} + +// Register indicates an expected call of Register. +func (mr *MockResourcesMockRecorder) Register(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Register", reflect.TypeOf((*MockResources)(nil).Register), arg0) +} + +// Stop mocks base method. +func (m *MockResources) Stop(arg0 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Stop", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Stop indicates an expected call of Stop. +func (mr *MockResourcesMockRecorder) Stop(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stop", reflect.TypeOf((*MockResources)(nil).Stop), arg0) +} + +// MockAuthorizer is a mock of Authorizer interface. +type MockAuthorizer struct { + ctrl *gomock.Controller + recorder *MockAuthorizerMockRecorder +} + +// MockAuthorizerMockRecorder is the mock recorder for MockAuthorizer. +type MockAuthorizerMockRecorder struct { + mock *MockAuthorizer +} + +// NewMockAuthorizer creates a new mock instance. +func NewMockAuthorizer(ctrl *gomock.Controller) *MockAuthorizer { + mock := &MockAuthorizer{ctrl: ctrl} + mock.recorder = &MockAuthorizerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAuthorizer) EXPECT() *MockAuthorizerMockRecorder { + return m.recorder +} + +// AuthApplicationAgent mocks base method. +func (m *MockAuthorizer) AuthApplicationAgent() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthApplicationAgent") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthApplicationAgent indicates an expected call of AuthApplicationAgent. +func (mr *MockAuthorizerMockRecorder) AuthApplicationAgent() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthApplicationAgent", reflect.TypeOf((*MockAuthorizer)(nil).AuthApplicationAgent)) +} + +// AuthClient mocks base method. +func (m *MockAuthorizer) AuthClient() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthClient") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthClient indicates an expected call of AuthClient. +func (mr *MockAuthorizerMockRecorder) AuthClient() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthClient", reflect.TypeOf((*MockAuthorizer)(nil).AuthClient)) +} + +// AuthController mocks base method. +func (m *MockAuthorizer) AuthController() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthController") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthController indicates an expected call of AuthController. +func (mr *MockAuthorizerMockRecorder) AuthController() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthController", reflect.TypeOf((*MockAuthorizer)(nil).AuthController)) +} + +// AuthMachineAgent mocks base method. +func (m *MockAuthorizer) AuthMachineAgent() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthMachineAgent") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthMachineAgent indicates an expected call of AuthMachineAgent. +func (mr *MockAuthorizerMockRecorder) AuthMachineAgent() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthMachineAgent", reflect.TypeOf((*MockAuthorizer)(nil).AuthMachineAgent)) +} + +// AuthModelAgent mocks base method. +func (m *MockAuthorizer) AuthModelAgent() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthModelAgent") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthModelAgent indicates an expected call of AuthModelAgent. +func (mr *MockAuthorizerMockRecorder) AuthModelAgent() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthModelAgent", reflect.TypeOf((*MockAuthorizer)(nil).AuthModelAgent)) +} + +// AuthOwner mocks base method. +func (m *MockAuthorizer) AuthOwner(arg0 names.Tag) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthOwner", arg0) + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthOwner indicates an expected call of AuthOwner. +func (mr *MockAuthorizerMockRecorder) AuthOwner(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthOwner", reflect.TypeOf((*MockAuthorizer)(nil).AuthOwner), arg0) +} + +// AuthUnitAgent mocks base method. +func (m *MockAuthorizer) AuthUnitAgent() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthUnitAgent") + ret0, _ := ret[0].(bool) + return ret0 +} + +// AuthUnitAgent indicates an expected call of AuthUnitAgent. +func (mr *MockAuthorizerMockRecorder) AuthUnitAgent() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthUnitAgent", reflect.TypeOf((*MockAuthorizer)(nil).AuthUnitAgent)) +} + +// ConnectedModel mocks base method. +func (m *MockAuthorizer) ConnectedModel() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ConnectedModel") + ret0, _ := ret[0].(string) + return ret0 +} + +// ConnectedModel indicates an expected call of ConnectedModel. +func (mr *MockAuthorizerMockRecorder) ConnectedModel() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConnectedModel", reflect.TypeOf((*MockAuthorizer)(nil).ConnectedModel)) +} + +// EntityHasPermission mocks base method. +func (m *MockAuthorizer) EntityHasPermission(arg0 names.Tag, arg1 permission.Access, arg2 names.Tag) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EntityHasPermission", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// EntityHasPermission indicates an expected call of EntityHasPermission. +func (mr *MockAuthorizerMockRecorder) EntityHasPermission(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EntityHasPermission", reflect.TypeOf((*MockAuthorizer)(nil).EntityHasPermission), arg0, arg1, arg2) +} + +// GetAuthTag mocks base method. +func (m *MockAuthorizer) GetAuthTag() names.Tag { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAuthTag") + ret0, _ := ret[0].(names.Tag) + return ret0 +} + +// GetAuthTag indicates an expected call of GetAuthTag. +func (mr *MockAuthorizerMockRecorder) GetAuthTag() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAuthTag", reflect.TypeOf((*MockAuthorizer)(nil).GetAuthTag)) +} + +// HasPermission mocks base method. +func (m *MockAuthorizer) HasPermission(arg0 permission.Access, arg1 names.Tag) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HasPermission", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// HasPermission indicates an expected call of HasPermission. +func (mr *MockAuthorizerMockRecorder) HasPermission(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasPermission", reflect.TypeOf((*MockAuthorizer)(nil).HasPermission), arg0, arg1) +} + +// MockWatcherRegistry is a mock of WatcherRegistry interface. +type MockWatcherRegistry struct { + ctrl *gomock.Controller + recorder *MockWatcherRegistryMockRecorder +} + +// MockWatcherRegistryMockRecorder is the mock recorder for MockWatcherRegistry. +type MockWatcherRegistryMockRecorder struct { + mock *MockWatcherRegistry +} + +// NewMockWatcherRegistry creates a new mock instance. +func NewMockWatcherRegistry(ctrl *gomock.Controller) *MockWatcherRegistry { + mock := &MockWatcherRegistry{ctrl: ctrl} + mock.recorder = &MockWatcherRegistryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockWatcherRegistry) EXPECT() *MockWatcherRegistryMockRecorder { + return m.recorder +} + +// Count mocks base method. +func (m *MockWatcherRegistry) Count() int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Count") + ret0, _ := ret[0].(int) + return ret0 +} + +// Count indicates an expected call of Count. +func (mr *MockWatcherRegistryMockRecorder) Count() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Count", reflect.TypeOf((*MockWatcherRegistry)(nil).Count)) +} + +// Get mocks base method. +func (m *MockWatcherRegistry) Get(arg0 string) (worker.Worker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Get", arg0) + ret0, _ := ret[0].(worker.Worker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Get indicates an expected call of Get. +func (mr *MockWatcherRegistryMockRecorder) Get(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockWatcherRegistry)(nil).Get), arg0) +} + +// Kill mocks base method. +func (m *MockWatcherRegistry) Kill() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Kill") +} + +// Kill indicates an expected call of Kill. +func (mr *MockWatcherRegistryMockRecorder) Kill() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Kill", reflect.TypeOf((*MockWatcherRegistry)(nil).Kill)) +} + +// Register mocks base method. +func (m *MockWatcherRegistry) Register(arg0 worker.Worker) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Register", arg0) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Register indicates an expected call of Register. +func (mr *MockWatcherRegistryMockRecorder) Register(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Register", reflect.TypeOf((*MockWatcherRegistry)(nil).Register), arg0) +} + +// RegisterNamed mocks base method. +func (m *MockWatcherRegistry) RegisterNamed(arg0 string, arg1 worker.Worker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterNamed", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// RegisterNamed indicates an expected call of RegisterNamed. +func (mr *MockWatcherRegistryMockRecorder) RegisterNamed(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterNamed", reflect.TypeOf((*MockWatcherRegistry)(nil).RegisterNamed), arg0, arg1) +} + +// Stop mocks base method. +func (m *MockWatcherRegistry) Stop(arg0 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Stop", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Stop indicates an expected call of Stop. +func (mr *MockWatcherRegistryMockRecorder) Stop(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stop", reflect.TypeOf((*MockWatcherRegistry)(nil).Stop), arg0) +} + +// Wait mocks base method. +func (m *MockWatcherRegistry) Wait() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Wait") + ret0, _ := ret[0].(error) + return ret0 +} + +// Wait indicates an expected call of Wait. +func (mr *MockWatcherRegistryMockRecorder) Wait() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Wait", reflect.TypeOf((*MockWatcherRegistry)(nil).Wait)) +} diff --git a/apiserver/facades/agent/upgradesteps/interface.go b/apiserver/facades/agent/upgradesteps/interface.go index 13d88cc9899..887a955a5c6 100644 --- a/apiserver/facades/agent/upgradesteps/interface.go +++ b/apiserver/facades/agent/upgradesteps/interface.go @@ -4,15 +4,24 @@ package upgradesteps import ( + "context" + "github.com/juju/juju/controller" "github.com/juju/juju/core/instance" "github.com/juju/juju/core/status" "github.com/juju/juju/state" ) +// ControllerConfigGetter is an interface that provides access to the +// controller configuration. +type ControllerConfigGetter interface { + ControllerConfig(context.Context) (controller.Config, error) +} + +// UpgradeStepsState represents the state methods used by the upgrade steps +// facade. type UpgradeStepsState interface { state.EntityFinder - ControllerConfig() (controller.Config, error) ApplyOperation(state.ModelOperation) error } diff --git a/apiserver/facades/agent/upgradesteps/package_test.go b/apiserver/facades/agent/upgradesteps/package_test.go index 4ebd8937dbf..f635f2b4393 100644 --- a/apiserver/facades/agent/upgradesteps/package_test.go +++ b/apiserver/facades/agent/upgradesteps/package_test.go @@ -9,6 +9,10 @@ import ( gc "gopkg.in/check.v1" ) +//go:generate go run go.uber.org/mock/mockgen -package upgradesteps_test -destination upgradesteps_mock_test.go github.com/juju/juju/apiserver/facades/agent/upgradesteps ControllerConfigGetter,UpgradeStepsState,Machine,Unit +//go:generate go run go.uber.org/mock/mockgen -package upgradesteps_test -destination state_mock_test.go github.com/juju/juju/state EntityFinder,Entity +//go:generate go run go.uber.org/mock/mockgen -package upgradesteps_test -destination facade_mock_test.go github.com/juju/juju/apiserver/facade Resources,Authorizer,WatcherRegistry + func TestPackage(t *testing.T) { gc.TestingT(t) } diff --git a/apiserver/facades/agent/upgradesteps/register.go b/apiserver/facades/agent/upgradesteps/register.go index 2e97dea2919..e8fe008f32b 100644 --- a/apiserver/facades/agent/upgradesteps/register.go +++ b/apiserver/facades/agent/upgradesteps/register.go @@ -18,6 +18,11 @@ func Register(registry facade.FacadeRegistry) { // newFacadeV2 is used for API registration. func newFacadeV2(ctx facade.Context) (*UpgradeStepsAPI, error) { - st := &upgradeStepsStateShim{State: ctx.State()} - return NewUpgradeStepsAPI(st, ctx.Resources(), ctx.Auth(), ctx.Logger().Child("upgradesteps")) + return NewUpgradeStepsAPI( + ctx.State(), + ctx.ServiceFactory().ControllerConfig(), + ctx.Resources(), + ctx.Auth(), + ctx.Logger().Child("upgradesteps"), + ) } diff --git a/apiserver/facades/agent/upgradesteps/shim.go b/apiserver/facades/agent/upgradesteps/shim.go deleted file mode 100644 index 664b48de9ac..00000000000 --- a/apiserver/facades/agent/upgradesteps/shim.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2019 Canonical Ltd. -// Licensed under the AGPLv3, see LICENCE file for details. - -package upgradesteps - -import "github.com/juju/juju/state" - -type upgradeStepsStateShim struct { - *state.State -} diff --git a/apiserver/facades/agent/upgradesteps/mocks/state_mock.go b/apiserver/facades/agent/upgradesteps/state_mock_test.go similarity index 96% rename from apiserver/facades/agent/upgradesteps/mocks/state_mock.go rename to apiserver/facades/agent/upgradesteps/state_mock_test.go index 34266fc5c90..07da13b013a 100644 --- a/apiserver/facades/agent/upgradesteps/mocks/state_mock.go +++ b/apiserver/facades/agent/upgradesteps/state_mock_test.go @@ -1,8 +1,8 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/juju/juju/state (interfaces: EntityFinder,Entity) -// Package mocks is a generated GoMock package. -package mocks +// Package upgradesteps_test is a generated GoMock package. +package upgradesteps_test import ( reflect "reflect" diff --git a/apiserver/facades/agent/upgradesteps/upgradesteps.go b/apiserver/facades/agent/upgradesteps/upgradesteps.go index d7042b59e79..6e0433c6436 100644 --- a/apiserver/facades/agent/upgradesteps/upgradesteps.go +++ b/apiserver/facades/agent/upgradesteps/upgradesteps.go @@ -7,7 +7,6 @@ import ( "context" "github.com/juju/errors" - "github.com/juju/loggo" "github.com/juju/names/v4" "github.com/juju/juju/apiserver/common" @@ -19,9 +18,6 @@ import ( "github.com/juju/juju/state" ) -//go:generate go run go.uber.org/mock/mockgen -package mocks -destination mocks/upgradesteps_mock.go github.com/juju/juju/apiserver/facades/agent/upgradesteps UpgradeStepsState,Machine,Unit -//go:generate go run go.uber.org/mock/mockgen -package mocks -destination mocks/state_mock.go github.com/juju/juju/state EntityFinder,Entity - // UpgradeStepsV2 defines the methods on the version 2 facade for the // upgrade steps API endpoint. type UpgradeStepsV2 interface { @@ -35,15 +31,22 @@ type UpgradeStepsV1 interface { ResetKVMMachineModificationStatusIdle(context.Context, params.Entity) (params.ErrorResult, error) } +// Logger represents the logging methods used by the upgrade steps. +type Logger interface { + Criticalf(string, ...any) + Warningf(string, ...any) +} + // UpgradeStepsAPI implements version 2 of the Upgrade Steps API, // which adds WriteUniterState. type UpgradeStepsAPI struct { st UpgradeStepsState + ctrlConfigGetter ControllerConfigGetter resources facade.Resources authorizer facade.Authorizer getMachineAuthFunc common.GetAuthFunc getUnitAuthFunc common.GetAuthFunc - logger loggo.Logger + logger Logger } // UpgradeStepsAPIV1 implements version 1 of the Upgrade Steps API. @@ -53,10 +56,12 @@ type UpgradeStepsAPIV1 struct { var _ UpgradeStepsV2 = (*UpgradeStepsAPI)(nil) -func NewUpgradeStepsAPI(st UpgradeStepsState, +func NewUpgradeStepsAPI( + st UpgradeStepsState, + ctrlConfigGetter ControllerConfigGetter, resources facade.Resources, authorizer facade.Authorizer, - logger loggo.Logger, + logger Logger, ) (*UpgradeStepsAPI, error) { if !authorizer.AuthMachineAgent() && !authorizer.AuthController() && !authorizer.AuthUnitAgent() { return nil, apiservererrors.ErrPerm @@ -66,6 +71,7 @@ func NewUpgradeStepsAPI(st UpgradeStepsState, getUnitAuthFunc := common.AuthFuncForTagKind(names.UnitTagKind) return &UpgradeStepsAPI{ st: st, + ctrlConfigGetter: ctrlConfigGetter, resources: resources, authorizer: authorizer, getMachineAuthFunc: getMachineAuthFunc, @@ -115,7 +121,7 @@ func (api *UpgradeStepsAPI) ResetKVMMachineModificationStatusIdle(ctx context.Co // WriteAgentState writes the agent state for the set of units provided. This // call presently deals with the state for the unit agent. func (api *UpgradeStepsAPI) WriteAgentState(ctx context.Context, args params.SetUnitStateArgs) (params.ErrorResults, error) { - ctrlCfg, err := api.st.ControllerConfig() + ctrlCfg, err := api.ctrlConfigGetter.ControllerConfig(ctx) if err != nil { return params.ErrorResults{}, errors.Trace(err) } diff --git a/apiserver/facades/agent/upgradesteps/mocks/upgradesteps_mock.go b/apiserver/facades/agent/upgradesteps/upgradesteps_mock_test.go similarity index 81% rename from apiserver/facades/agent/upgradesteps/mocks/upgradesteps_mock.go rename to apiserver/facades/agent/upgradesteps/upgradesteps_mock_test.go index 626cbe69fde..50a1f966391 100644 --- a/apiserver/facades/agent/upgradesteps/mocks/upgradesteps_mock.go +++ b/apiserver/facades/agent/upgradesteps/upgradesteps_mock_test.go @@ -1,10 +1,11 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/juju/juju/apiserver/facades/agent/upgradesteps (interfaces: UpgradeStepsState,Machine,Unit) +// Source: github.com/juju/juju/apiserver/facades/agent/upgradesteps (interfaces: ControllerConfigGetter,UpgradeStepsState,Machine,Unit) -// Package mocks is a generated GoMock package. -package mocks +// Package upgradesteps_test is a generated GoMock package. +package upgradesteps_test import ( + context "context" reflect "reflect" controller "github.com/juju/juju/controller" @@ -15,6 +16,44 @@ import ( gomock "go.uber.org/mock/gomock" ) +// MockControllerConfigGetter is a mock of ControllerConfigGetter interface. +type MockControllerConfigGetter struct { + ctrl *gomock.Controller + recorder *MockControllerConfigGetterMockRecorder +} + +// MockControllerConfigGetterMockRecorder is the mock recorder for MockControllerConfigGetter. +type MockControllerConfigGetterMockRecorder struct { + mock *MockControllerConfigGetter +} + +// NewMockControllerConfigGetter creates a new mock instance. +func NewMockControllerConfigGetter(ctrl *gomock.Controller) *MockControllerConfigGetter { + mock := &MockControllerConfigGetter{ctrl: ctrl} + mock.recorder = &MockControllerConfigGetterMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockControllerConfigGetter) EXPECT() *MockControllerConfigGetterMockRecorder { + return m.recorder +} + +// ControllerConfig mocks base method. +func (m *MockControllerConfigGetter) ControllerConfig(arg0 context.Context) (controller.Config, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ControllerConfig", arg0) + ret0, _ := ret[0].(controller.Config) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ControllerConfig indicates an expected call of ControllerConfig. +func (mr *MockControllerConfigGetterMockRecorder) ControllerConfig(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ControllerConfig", reflect.TypeOf((*MockControllerConfigGetter)(nil).ControllerConfig), arg0) +} + // MockUpgradeStepsState is a mock of UpgradeStepsState interface. type MockUpgradeStepsState struct { ctrl *gomock.Controller @@ -52,21 +91,6 @@ func (mr *MockUpgradeStepsStateMockRecorder) ApplyOperation(arg0 interface{}) *g return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ApplyOperation", reflect.TypeOf((*MockUpgradeStepsState)(nil).ApplyOperation), arg0) } -// ControllerConfig mocks base method. -func (m *MockUpgradeStepsState) ControllerConfig() (controller.Config, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ControllerConfig") - ret0, _ := ret[0].(controller.Config) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// ControllerConfig indicates an expected call of ControllerConfig. -func (mr *MockUpgradeStepsStateMockRecorder) ControllerConfig() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ControllerConfig", reflect.TypeOf((*MockUpgradeStepsState)(nil).ControllerConfig)) -} - // FindEntity mocks base method. func (m *MockUpgradeStepsState) FindEntity(arg0 names.Tag) (state.Entity, error) { m.ctrl.T.Helper() diff --git a/apiserver/facades/agent/upgradesteps/upgradesteps_test.go b/apiserver/facades/agent/upgradesteps/upgradesteps_test.go index b2c4d2dc1ed..9b80e52b57d 100644 --- a/apiserver/facades/agent/upgradesteps/upgradesteps_test.go +++ b/apiserver/facades/agent/upgradesteps/upgradesteps_test.go @@ -7,16 +7,13 @@ import ( "context" "github.com/juju/errors" - "github.com/juju/loggo" "github.com/juju/mgo/v3/txn" "github.com/juju/names/v4" jc "github.com/juju/testing/checkers" "go.uber.org/mock/gomock" gc "gopkg.in/check.v1" - facademocks "github.com/juju/juju/apiserver/facade/mocks" "github.com/juju/juju/apiserver/facades/agent/upgradesteps" - "github.com/juju/juju/apiserver/facades/agent/upgradesteps/mocks" "github.com/juju/juju/controller" "github.com/juju/juju/core/instance" "github.com/juju/juju/core/status" @@ -28,11 +25,12 @@ import ( type upgradeStepsSuite struct { jujutesting.BaseSuite - api *upgradesteps.UpgradeStepsAPI - authorizer *facademocks.MockAuthorizer - entity *mocks.MockEntity - resources *facademocks.MockResources - state *mocks.MockUpgradeStepsState + api *upgradesteps.UpgradeStepsAPI + authorizer *MockAuthorizer + entity *MockEntity + resources *MockResources + state *MockUpgradeStepsState + ctrlConfigGetter *MockControllerConfigGetter } type machineUpgradeStepsSuite struct { @@ -40,7 +38,7 @@ type machineUpgradeStepsSuite struct { tag names.Tag arg params.Entity - machine *mocks.MockMachine + machine *MockMachine } var _ = gc.Suite(&machineUpgradeStepsSuite{}) @@ -111,8 +109,8 @@ type unitUpgradeStepsSuite struct { upgradeStepsSuite tag1 names.Tag tag2 names.Tag - unit1 *mocks.MockUnit - unit2 *mocks.MockUnit + unit1 *MockUnit + unit2 *MockUnit } var _ = gc.Suite(&unitUpgradeStepsSuite{}) @@ -171,14 +169,15 @@ func (s *unitUpgradeStepsSuite) TestWriteAgentStateError(c *gc.C) { } func (s *upgradeStepsSuite) setup(c *gc.C) *gomock.Controller { - ctlr := gomock.NewController(c) + ctrl := gomock.NewController(c) - s.authorizer = facademocks.NewMockAuthorizer(ctlr) - s.entity = mocks.NewMockEntity(ctlr) - s.state = mocks.NewMockUpgradeStepsState(ctlr) - s.resources = facademocks.NewMockResources(ctlr) + s.authorizer = NewMockAuthorizer(ctrl) + s.entity = NewMockEntity(ctrl) + s.state = NewMockUpgradeStepsState(ctrl) + s.resources = NewMockResources(ctrl) + s.ctrlConfigGetter = NewMockControllerConfigGetter(ctrl) - return ctlr + return ctrl } func (s *upgradeStepsSuite) expectAuthCalls() { @@ -188,14 +187,20 @@ func (s *upgradeStepsSuite) expectAuthCalls() { } func (s *upgradeStepsSuite) setupFacadeAPI(c *gc.C) { - api, err := upgradesteps.NewUpgradeStepsAPI(s.state, s.resources, s.authorizer, loggo.GetLogger("juju.apiserver.upgradesteps")) + api, err := upgradesteps.NewUpgradeStepsAPI( + s.state, + s.ctrlConfigGetter, + s.resources, + s.authorizer, + jujutesting.NewCheckLogger(c), + ) c.Assert(err, gc.IsNil) s.api = api } func (s *machineUpgradeStepsSuite) setup(c *gc.C) *gomock.Controller { ctlr := s.upgradeStepsSuite.setup(c) - s.machine = mocks.NewMockMachine(ctlr) + s.machine = NewMockMachine(ctlr) s.expectAuthCalls() s.expectFindEntityMachine() @@ -238,8 +243,8 @@ func (s *machineUpgradeStepsSuite) expectSetModificationStatus(err error) { func (s *unitUpgradeStepsSuite) setup(c *gc.C) *gomock.Controller { ctlr := s.upgradeStepsSuite.setup(c) - s.unit1 = mocks.NewMockUnit(ctlr) - s.unit2 = mocks.NewMockUnit(ctlr) + s.unit1 = NewMockUnit(ctlr) + s.unit2 = NewMockUnit(ctlr) s.expectAuthCalls() s.expectFindEntityUnits() @@ -274,7 +279,7 @@ func (s *unitUpgradeStepsSuite) expectSetAndApplyStateOperation(err1, err2 error controller.MaxAgentStateSize: 456, } - s.state.EXPECT().ControllerConfig().Return(ctrlCfg, nil) + s.ctrlConfigGetter.EXPECT().ControllerConfig(context.Background()).Return(ctrlCfg, nil) expLimits := state.UnitStateSizeLimits{ MaxCharmStateSize: 123,