| 21 | var _ = Suite(&FileLockSuite{}) |
| 22 | |
| 23 | func (s *FileLockSuite) TestSimple(c *C) { |
| 24 | lockName := "testflock0" |
| 25 | |
| 26 | fl1 := New(lockName) |
| 27 | fl2 := New(lockName) |
| 28 | |
| 29 | c.Assert(fl1.Lock(), IsNil) |
| 30 | err := fl2.TryLock() |
| 31 | c.Assert(err, NotNil) |
| 32 | c.Assert(IsHeldElsewhere(err), IsTrue) |
| 33 | |
| 34 | // unlock it now and try again. |
| 35 | c.Assert(fl1.Unlock(), IsNil) |
| 36 | err = fl2.TryLock() |
| 37 | c.Assert(err, IsNil) |
| 38 | c.Assert(IsHeldElsewhere(err), IsFalse) |
| 39 | |
| 40 | // now perform blocking Lock in Go Routine |
| 41 | doneChan := make(chan struct{}, 0) |
| 42 | go func() { |
| 43 | c.Assert(fl1.Lock(), IsNil) |
| 44 | close(doneChan) |
| 45 | }() |
| 46 | |
| 47 | select { |
| 48 | case <-doneChan: |
| 49 | c.Fatal("Locking block didn't actually block!") |
| 50 | case <-time.After(10 * time.Millisecond): |
| 51 | } |
| 52 | |
| 53 | c.Assert(fl2.Unlock(), IsNil) |
| 54 | |
| 55 | <-doneChan |
| 56 | c.Assert(fl1.Unlock(), IsNil) |
| 57 | } |
| 58 | |
| 59 | func (s *FileLockSuite) TestSharedSimple(c *C) { |
| 60 | lockName := "testflock1" |