func testLockUnlock(t *testing.T, kv store.Store) { key := "foo" value := []byte("bar") // We should be able to create a new lock on key lock, err := kv.NewLock(key, &store.LockOptions{Value: value, TTL: 2 * time.Second}) assert.NoError(t, err) assert.NotNil(t, lock) // Lock should successfully succeed or block lockChan, err := lock.Lock() assert.NoError(t, err) assert.NotNil(t, lockChan) // Get should work pair, err := kv.Get(key) assert.NoError(t, err) if assert.NotNil(t, pair) { assert.NotNil(t, pair.Value) } assert.Equal(t, pair.Value, value) assert.NotEqual(t, pair.LastIndex, 0) // Unlock should succeed err = lock.Unlock() assert.NoError(t, err) // Lock should succeed again lockChan, err = lock.Lock() assert.NoError(t, err) assert.NotNil(t, lockChan) // Get should work pair, err = kv.Get(key) assert.NoError(t, err) if assert.NotNil(t, pair) { assert.NotNil(t, pair.Value) } assert.Equal(t, pair.Value, value) assert.NotEqual(t, pair.LastIndex, 0) }