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  }