github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/uniter/resolver/locker_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package resolver_test 5 6 import ( 7 "github.com/juju/charm/v12/hooks" 8 "github.com/juju/loggo" 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/worker/fortress" 14 "github.com/juju/juju/worker/uniter/hook" 15 "github.com/juju/juju/worker/uniter/operation" 16 "github.com/juju/juju/worker/uniter/resolver" 17 ) 18 19 type GuardSuite struct { 20 guard *mockCharmDirGuard 21 } 22 23 var _ = gc.Suite(&GuardSuite{}) 24 25 func (s *GuardSuite) SetUpTest(c *gc.C) { 26 s.guard = &mockCharmDirGuard{} 27 } 28 29 func (s *GuardSuite) checkCall(c *gc.C, state operation.State, call string) { 30 err := resolver.UpdateCharmDir(state, s.guard, nil, loggo.GetLogger("test")) 31 c.Assert(err, jc.ErrorIsNil) 32 s.guard.CheckCallNames(c, call) 33 } 34 35 func (s *GuardSuite) TestLockdownEmptyState(c *gc.C) { 36 s.checkCall(c, operation.State{}, "Lockdown") 37 } 38 39 func (s *GuardSuite) TestLockdownNotStarted(c *gc.C) { 40 s.checkCall(c, operation.State{Started: false}, "Lockdown") 41 } 42 43 func (s *GuardSuite) TestLockdownStartStopInvalid(c *gc.C) { 44 s.checkCall(c, operation.State{Started: true, Stopped: true}, "Lockdown") 45 } 46 47 func (s *GuardSuite) TestLockdownInstall(c *gc.C) { 48 s.checkCall(c, operation.State{Started: true, Stopped: false, Kind: operation.Install}, "Lockdown") 49 } 50 51 func (s *GuardSuite) TestLockdownUpgrade(c *gc.C) { 52 s.checkCall(c, operation.State{Started: true, Stopped: false, Kind: operation.Upgrade}, "Lockdown") 53 } 54 55 func (s *GuardSuite) TestLockdownRunHookUpgradeCharm(c *gc.C) { 56 s.checkCall(c, operation.State{ 57 Started: true, 58 Stopped: false, 59 Kind: operation.RunHook, 60 Hook: &hook.Info{ 61 Kind: hooks.UpgradeCharm, 62 }, 63 }, "Lockdown") 64 } 65 66 func (s *GuardSuite) TestUnlockStarted(c *gc.C) { 67 s.checkCall(c, operation.State{Started: true, Stopped: false}, "Unlock") 68 } 69 70 func (s *GuardSuite) TestUnlockStartedContinue(c *gc.C) { 71 s.checkCall(c, operation.State{Started: true, Stopped: false, Kind: operation.Continue}, "Unlock") 72 } 73 74 func (s *GuardSuite) TestUnlockStartedRunAction(c *gc.C) { 75 s.checkCall(c, operation.State{Started: true, Stopped: false, Kind: operation.RunAction}, "Unlock") 76 } 77 78 func (s *GuardSuite) TestUnlockConfigChanged(c *gc.C) { 79 s.checkCall(c, operation.State{ 80 Started: true, 81 Stopped: false, 82 Kind: operation.RunHook, 83 Hook: &hook.Info{ 84 Kind: hooks.ConfigChanged, 85 }, 86 }, "Unlock") 87 } 88 89 func (s *GuardSuite) TestLockdownAbortArg(c *gc.C) { 90 abort := make(fortress.Abort) 91 err := resolver.UpdateCharmDir(operation.State{}, s.guard, abort, loggo.GetLogger("test")) 92 c.Assert(err, jc.ErrorIsNil) 93 s.guard.CheckCalls(c, []testing.StubCall{{FuncName: "Lockdown", Args: []interface{}{abort}}}) 94 }