github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/lease/manager_check_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package lease_test
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	corelease "github.com/juju/juju/core/lease"
    15  	"github.com/juju/juju/worker/lease"
    16  )
    17  
    18  type TokenSuite struct {
    19  	testing.IsolationSuite
    20  }
    21  
    22  var _ = gc.Suite(&TokenSuite{})
    23  
    24  func (s *TokenSuite) TestSuccess(c *gc.C) {
    25  	fix := &Fixture{
    26  		leases: map[string]corelease.Info{
    27  			"redis": corelease.Info{
    28  				Holder:   "redis/0",
    29  				Expiry:   offset(time.Second),
    30  				Trapdoor: corelease.LockedTrapdoor,
    31  			},
    32  		},
    33  	}
    34  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
    35  		token := manager.Token("redis", "redis/0")
    36  		err := token.Check(nil)
    37  		c.Check(err, jc.ErrorIsNil)
    38  	})
    39  }
    40  
    41  func (s *TokenSuite) TestMissingRefresh_Success(c *gc.C) {
    42  	fix := &Fixture{
    43  		expectCalls: []call{{
    44  			method: "Refresh",
    45  			callback: func(leases map[string]corelease.Info) {
    46  				leases["redis"] = corelease.Info{
    47  					Holder:   "redis/0",
    48  					Expiry:   offset(time.Second),
    49  					Trapdoor: corelease.LockedTrapdoor,
    50  				}
    51  			},
    52  		}},
    53  	}
    54  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
    55  		token := manager.Token("redis", "redis/0")
    56  		err := token.Check(nil)
    57  		c.Check(err, jc.ErrorIsNil)
    58  	})
    59  }
    60  
    61  func (s *TokenSuite) TestOtherHolderRefresh_Success(c *gc.C) {
    62  	fix := &Fixture{
    63  		expectCalls: []call{{
    64  			method: "Refresh",
    65  			callback: func(leases map[string]corelease.Info) {
    66  				leases["redis"] = corelease.Info{
    67  					Holder:   "redis/0",
    68  					Expiry:   offset(time.Second),
    69  					Trapdoor: corelease.LockedTrapdoor,
    70  				}
    71  			},
    72  		}},
    73  	}
    74  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
    75  		token := manager.Token("redis", "redis/0")
    76  		err := token.Check(nil)
    77  		c.Check(err, jc.ErrorIsNil)
    78  	})
    79  }
    80  
    81  func (s *TokenSuite) TestRefresh_Failure_Missing(c *gc.C) {
    82  	fix := &Fixture{
    83  		expectCalls: []call{{
    84  			method: "Refresh",
    85  		}},
    86  	}
    87  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
    88  		token := manager.Token("redis", "redis/0")
    89  		err := token.Check(nil)
    90  		c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
    91  	})
    92  }
    93  
    94  func (s *TokenSuite) TestRefresh_Failure_OtherHolder(c *gc.C) {
    95  	fix := &Fixture{
    96  		expectCalls: []call{{
    97  			method: "Refresh",
    98  			callback: func(leases map[string]corelease.Info) {
    99  				leases["redis"] = corelease.Info{
   100  					Holder:   "redis/1",
   101  					Expiry:   offset(time.Second),
   102  					Trapdoor: corelease.LockedTrapdoor,
   103  				}
   104  			},
   105  		}},
   106  	}
   107  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
   108  		token := manager.Token("redis", "redis/0")
   109  		err := token.Check(nil)
   110  		c.Check(errors.Cause(err), gc.Equals, corelease.ErrNotHeld)
   111  	})
   112  }
   113  
   114  func (s *TokenSuite) TestRefresh_Error(c *gc.C) {
   115  	fix := &Fixture{
   116  		expectCalls: []call{{
   117  			method: "Refresh",
   118  			err:    errors.New("crunch squish"),
   119  		}},
   120  		expectDirty: true,
   121  	}
   122  	fix.RunTest(c, func(manager *lease.Manager, _ *testing.Clock) {
   123  		token := manager.Token("redis", "redis/0")
   124  		c.Check(token.Check(nil), gc.ErrorMatches, "lease manager stopped")
   125  		err := manager.Wait()
   126  		c.Check(err, gc.ErrorMatches, "crunch squish")
   127  	})
   128  }