github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"gopkg.in/juju/charm.v6-unstable/hooks"
    10  
    11  	"github.com/juju/juju/worker/uniter/hook"
    12  	"github.com/juju/juju/worker/uniter/operation"
    13  	"github.com/juju/juju/worker/uniter/resolver"
    14  )
    15  
    16  type LockerSuite struct {
    17  	locker *mockCharmDirLocker
    18  }
    19  
    20  var _ = gc.Suite(&LockerSuite{})
    21  
    22  func (s *LockerSuite) SetUpTest(c *gc.C) {
    23  	s.locker = &mockCharmDirLocker{}
    24  }
    25  
    26  func (s *LockerSuite) TestNotAvailable(c *gc.C) {
    27  	resolver.UpdateCharmDir(operation.State{}, s.locker)
    28  	resolver.UpdateCharmDir(operation.State{Started: false}, s.locker)
    29  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: true}, s.locker)
    30  	resolver.UpdateCharmDir(operation.State{Started: false}, s.locker)
    31  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: false, Kind: operation.Install}, s.locker)
    32  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: false, Kind: operation.Upgrade}, s.locker)
    33  	resolver.UpdateCharmDir(operation.State{
    34  		Started: true,
    35  		Stopped: false,
    36  		Kind:    operation.RunHook,
    37  		Hook: &hook.Info{
    38  			Kind: hooks.UpgradeCharm,
    39  		},
    40  	}, s.locker)
    41  
    42  	c.Assert(s.locker.Calls(), gc.HasLen, 7)
    43  	for _, call := range s.locker.Calls() {
    44  		c.Assert(call.Args, jc.SameContents, []interface{}{false})
    45  	}
    46  }
    47  
    48  func (s *LockerSuite) TestAvailable(c *gc.C) {
    49  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: false}, s.locker)
    50  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: false, Kind: operation.Continue}, s.locker)
    51  	resolver.UpdateCharmDir(operation.State{Started: true, Stopped: false, Kind: operation.RunAction}, s.locker)
    52  	resolver.UpdateCharmDir(operation.State{
    53  		Started: true,
    54  		Stopped: false,
    55  		Kind:    operation.RunHook,
    56  		Hook: &hook.Info{
    57  			Kind: hooks.ConfigChanged,
    58  		},
    59  	}, s.locker)
    60  
    61  	c.Assert(s.locker.Calls(), gc.HasLen, 4)
    62  	for _, call := range s.locker.Calls() {
    63  		c.Assert(call.Args, jc.SameContents, []interface{}{true})
    64  	}
    65  }