|
@@ -14,23 +14,27 @@ import (
|
|
|
func TestModLockAcquireAndRelease(t *testing.T) {
|
|
func TestModLockAcquireAndRelease(t *testing.T) {
|
|
|
tests.RunServer(func(s *server.Server) {
|
|
tests.RunServer(func(s *server.Server) {
|
|
|
// Acquire lock.
|
|
// Acquire lock.
|
|
|
- body, err := testAcquireLock(s, "foo", "", 10)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 10)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Check that we have the lock.
|
|
// Check that we have the lock.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Release lock.
|
|
// Release lock.
|
|
|
- body, err = testReleaseLock(s, "foo", "2", "")
|
|
|
|
|
|
|
+ body, status, err = testReleaseLock(s, "foo", "2", "")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
|
|
|
|
|
// Check that we have the lock.
|
|
// Check that we have the lock.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -42,8 +46,9 @@ func TestModLockBlockUntilAcquire(t *testing.T) {
|
|
|
|
|
|
|
|
// Acquire lock #1.
|
|
// Acquire lock #1.
|
|
|
go func() {
|
|
go func() {
|
|
|
- body, err := testAcquireLock(s, "foo", "", 10)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 10)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
c <- true
|
|
c <- true
|
|
|
}()
|
|
}()
|
|
@@ -53,8 +58,9 @@ func TestModLockBlockUntilAcquire(t *testing.T) {
|
|
|
waiting := true
|
|
waiting := true
|
|
|
go func() {
|
|
go func() {
|
|
|
c <- true
|
|
c <- true
|
|
|
- body, err := testAcquireLock(s, "foo", "", 10)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 10)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "4")
|
|
assert.Equal(t, body, "4")
|
|
|
waiting = false
|
|
waiting = false
|
|
|
}()
|
|
}()
|
|
@@ -63,29 +69,34 @@ func TestModLockBlockUntilAcquire(t *testing.T) {
|
|
|
time.Sleep(1 * time.Second)
|
|
time.Sleep(1 * time.Second)
|
|
|
|
|
|
|
|
// Check that we have the lock #1.
|
|
// Check that we have the lock #1.
|
|
|
- body, err := testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err := testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Check that we are still waiting for lock #2.
|
|
// Check that we are still waiting for lock #2.
|
|
|
assert.Equal(t, waiting, true)
|
|
assert.Equal(t, waiting, true)
|
|
|
|
|
|
|
|
// Release lock #1.
|
|
// Release lock #1.
|
|
|
- body, err = testReleaseLock(s, "foo", "2", "")
|
|
|
|
|
|
|
+ _, status, err = testReleaseLock(s, "foo", "2", "")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
|
|
|
|
|
// Check that we have lock #2.
|
|
// Check that we have lock #2.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "4")
|
|
assert.Equal(t, body, "4")
|
|
|
|
|
|
|
|
// Release lock #2.
|
|
// Release lock #2.
|
|
|
- body, err = testReleaseLock(s, "foo", "4", "")
|
|
|
|
|
|
|
+ _, status, err = testReleaseLock(s, "foo", "4", "")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
|
|
|
|
|
// Check that we have no lock.
|
|
// Check that we have no lock.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -97,8 +108,9 @@ func TestModLockExpireAndRelease(t *testing.T) {
|
|
|
|
|
|
|
|
// Acquire lock #1.
|
|
// Acquire lock #1.
|
|
|
go func() {
|
|
go func() {
|
|
|
- body, err := testAcquireLock(s, "foo", "", 2)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 2)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
c <- true
|
|
c <- true
|
|
|
}()
|
|
}()
|
|
@@ -107,8 +119,9 @@ func TestModLockExpireAndRelease(t *testing.T) {
|
|
|
// Acquire lock #2.
|
|
// Acquire lock #2.
|
|
|
go func() {
|
|
go func() {
|
|
|
c <- true
|
|
c <- true
|
|
|
- body, err := testAcquireLock(s, "foo", "", 10)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 10)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "4")
|
|
assert.Equal(t, body, "4")
|
|
|
}()
|
|
}()
|
|
|
<- c
|
|
<- c
|
|
@@ -116,16 +129,18 @@ func TestModLockExpireAndRelease(t *testing.T) {
|
|
|
time.Sleep(1 * time.Second)
|
|
time.Sleep(1 * time.Second)
|
|
|
|
|
|
|
|
// Check that we have the lock #1.
|
|
// Check that we have the lock #1.
|
|
|
- body, err := testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err := testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Wait for lock #1 TTL.
|
|
// Wait for lock #1 TTL.
|
|
|
time.Sleep(2 * time.Second)
|
|
time.Sleep(2 * time.Second)
|
|
|
|
|
|
|
|
// Check that we have lock #2.
|
|
// Check that we have lock #2.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "4")
|
|
assert.Equal(t, body, "4")
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -134,34 +149,39 @@ func TestModLockExpireAndRelease(t *testing.T) {
|
|
|
func TestModLockRenew(t *testing.T) {
|
|
func TestModLockRenew(t *testing.T) {
|
|
|
tests.RunServer(func(s *server.Server) {
|
|
tests.RunServer(func(s *server.Server) {
|
|
|
// Acquire lock.
|
|
// Acquire lock.
|
|
|
- body, err := testAcquireLock(s, "foo", "", 3)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "", 3)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
time.Sleep(2 * time.Second)
|
|
time.Sleep(2 * time.Second)
|
|
|
|
|
|
|
|
// Check that we have the lock.
|
|
// Check that we have the lock.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Renew lock.
|
|
// Renew lock.
|
|
|
- body, err = testRenewLock(s, "foo", "2", "", 3)
|
|
|
|
|
|
|
+ body, status, err = testRenewLock(s, "foo", "2", "", 3)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
|
|
|
|
|
time.Sleep(2 * time.Second)
|
|
time.Sleep(2 * time.Second)
|
|
|
|
|
|
|
|
// Check that we still have the lock.
|
|
// Check that we still have the lock.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
time.Sleep(2 * time.Second)
|
|
time.Sleep(2 * time.Second)
|
|
|
|
|
|
|
|
// Check that lock was released.
|
|
// Check that lock was released.
|
|
|
- body, err = testGetLockIndex(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockIndex(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -170,55 +190,59 @@ func TestModLockRenew(t *testing.T) {
|
|
|
func TestModLockAcquireAndReleaseByValue(t *testing.T) {
|
|
func TestModLockAcquireAndReleaseByValue(t *testing.T) {
|
|
|
tests.RunServer(func(s *server.Server) {
|
|
tests.RunServer(func(s *server.Server) {
|
|
|
// Acquire lock.
|
|
// Acquire lock.
|
|
|
- body, err := testAcquireLock(s, "foo", "XXX", 10)
|
|
|
|
|
|
|
+ body, status, err := testAcquireLock(s, "foo", "XXX", 10)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "2")
|
|
assert.Equal(t, body, "2")
|
|
|
|
|
|
|
|
// Check that we have the lock.
|
|
// Check that we have the lock.
|
|
|
- body, err = testGetLockValue(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockValue(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "XXX")
|
|
assert.Equal(t, body, "XXX")
|
|
|
|
|
|
|
|
// Release lock.
|
|
// Release lock.
|
|
|
- body, err = testReleaseLock(s, "foo", "", "XXX")
|
|
|
|
|
|
|
+ body, status, err = testReleaseLock(s, "foo", "", "XXX")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
|
|
|
|
|
// Check that we released the lock.
|
|
// Check that we released the lock.
|
|
|
- body, err = testGetLockValue(s, "foo")
|
|
|
|
|
|
|
+ body, status, err = testGetLockValue(s, "foo")
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
|
|
+ assert.Equal(t, status, 200)
|
|
|
assert.Equal(t, body, "")
|
|
assert.Equal(t, body, "")
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-func testAcquireLock(s *server.Server, key string, value string, ttl int) (string, error) {
|
|
|
|
|
|
|
+func testAcquireLock(s *server.Server, key string, value string, ttl int) (string, int, error) {
|
|
|
resp, err := tests.PostForm(fmt.Sprintf("%s/mod/v2/lock/%s?value=%s&ttl=%d", s.URL(), key, value, ttl), nil)
|
|
resp, err := tests.PostForm(fmt.Sprintf("%s/mod/v2/lock/%s?value=%s&ttl=%d", s.URL(), key, value, ttl), nil)
|
|
|
ret := tests.ReadBody(resp)
|
|
ret := tests.ReadBody(resp)
|
|
|
- return string(ret), err
|
|
|
|
|
|
|
+ return string(ret), resp.StatusCode, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func testGetLockIndex(s *server.Server, key string) (string, error) {
|
|
|
|
|
|
|
+func testGetLockIndex(s *server.Server, key string) (string, int, error) {
|
|
|
resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/lock/%s?field=index", s.URL(), key))
|
|
resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/lock/%s?field=index", s.URL(), key))
|
|
|
ret := tests.ReadBody(resp)
|
|
ret := tests.ReadBody(resp)
|
|
|
- return string(ret), err
|
|
|
|
|
|
|
+ return string(ret), resp.StatusCode, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func testGetLockValue(s *server.Server, key string) (string, error) {
|
|
|
|
|
|
|
+func testGetLockValue(s *server.Server, key string) (string, int, error) {
|
|
|
resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/lock/%s", s.URL(), key))
|
|
resp, err := tests.Get(fmt.Sprintf("%s/mod/v2/lock/%s", s.URL(), key))
|
|
|
ret := tests.ReadBody(resp)
|
|
ret := tests.ReadBody(resp)
|
|
|
- return string(ret), err
|
|
|
|
|
|
|
+ return string(ret), resp.StatusCode, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func testReleaseLock(s *server.Server, key string, index string, value string) (string, error) {
|
|
|
|
|
|
|
+func testReleaseLock(s *server.Server, key string, index string, value string) (string, int, error) {
|
|
|
resp, err := tests.DeleteForm(fmt.Sprintf("%s/mod/v2/lock/%s?index=%s&value=%s", s.URL(), key, index, value), nil)
|
|
resp, err := tests.DeleteForm(fmt.Sprintf("%s/mod/v2/lock/%s?index=%s&value=%s", s.URL(), key, index, value), nil)
|
|
|
ret := tests.ReadBody(resp)
|
|
ret := tests.ReadBody(resp)
|
|
|
- return string(ret), err
|
|
|
|
|
|
|
+ return string(ret), resp.StatusCode, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func testRenewLock(s *server.Server, key string, index string, value string, ttl int) (string, error) {
|
|
|
|
|
|
|
+func testRenewLock(s *server.Server, key string, index string, value string, ttl int) (string, int, error) {
|
|
|
resp, err := tests.PutForm(fmt.Sprintf("%s/mod/v2/lock/%s?index=%s&value=%s&ttl=%d", s.URL(), key, index, value, ttl), nil)
|
|
resp, err := tests.PutForm(fmt.Sprintf("%s/mod/v2/lock/%s?index=%s&value=%s&ttl=%d", s.URL(), key, index, value, ttl), nil)
|
|
|
ret := tests.ReadBody(resp)
|
|
ret := tests.ReadBody(resp)
|
|
|
- return string(ret), err
|
|
|
|
|
|
|
+ return string(ret), resp.StatusCode, err
|
|
|
}
|
|
}
|