|
|
|
|
@ -65,31 +65,29 @@ func TestRemoteLocks(t *testing.T, a, b Client) {
|
|
|
|
|
infoB.Operation = "test"
|
|
|
|
|
infoB.Who = "clientB"
|
|
|
|
|
|
|
|
|
|
if _, err := lockerA.Lock(infoA); err != nil {
|
|
|
|
|
lockIDA, err := lockerA.Lock(infoA)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal("unable to get initial lock:", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if _, err := lockerB.Lock(infoB); err == nil {
|
|
|
|
|
lockerA.Unlock("")
|
|
|
|
|
_, err = lockerB.Lock(infoB)
|
|
|
|
|
if err == nil {
|
|
|
|
|
lockerA.Unlock(lockIDA)
|
|
|
|
|
t.Fatal("client B obtained lock while held by client A")
|
|
|
|
|
} else {
|
|
|
|
|
t.Log("lock info error:", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := lockerA.Unlock(""); err != nil {
|
|
|
|
|
if err := lockerA.Unlock(lockIDA); err != nil {
|
|
|
|
|
t.Fatal("error unlocking client A", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if _, err := lockerB.Lock(infoB); err != nil {
|
|
|
|
|
lockIDB, err := lockerB.Lock(infoB)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal("unable to obtain lock from client B")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := lockerB.Unlock(""); err != nil {
|
|
|
|
|
if err = lockerB.Unlock(lockIDB); err != nil {
|
|
|
|
|
t.Fatal("error unlocking client B:", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// unlock should be repeatable
|
|
|
|
|
if err := lockerA.Unlock(""); err != nil {
|
|
|
|
|
t.Fatal("Unlock error from client A when state was not locked:", err)
|
|
|
|
|
}
|
|
|
|
|
// TODO: Should we enforce that Unlock requires the correct ID?
|
|
|
|
|
}
|
|
|
|
|
|