func testAtomicPutCreate(t *testing.T, kv store.Store) { // Use a key in a new directory to ensure Stores will create directories // that don't yet exist. key := "put/create" value := []byte("putcreate") // AtomicPut the key, previous = nil indicates create. success, _, err := kv.AtomicPut(key, value, nil, nil) assert.NoError(t, err) assert.True(t, success) // Get should return the value and an incremented index 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) // Attempting to create again should fail. success, _, err = kv.AtomicPut(key, value, nil, nil) assert.Error(t, err) assert.False(t, success) // This CAS should succeed, since it has the value from Get() success, _, err = kv.AtomicPut(key, []byte("PUTCREATE"), pair, nil) assert.NoError(t, err) assert.True(t, success) // Delete the key, ensures runs of the test don't interfere with each other. err = kv.DeleteTree("put") assert.NoError(t, err) }
func testDeleteTree(t *testing.T, kv store.Store) { prefix := "testDeleteTree" firstKey := "testDeleteTree/first" firstValue := []byte("first") secondKey := "testDeleteTree/second" secondValue := []byte("second") // Put the first key err := kv.Put(firstKey, firstValue, nil) assert.NoError(t, err) // Put the second key err = kv.Put(secondKey, secondValue, nil) assert.NoError(t, err) // Get should work on the first Key pair, err := kv.Get(firstKey) assert.NoError(t, err) if assert.NotNil(t, pair) { assert.NotNil(t, pair.Value) } assert.Equal(t, pair.Value, firstValue) assert.NotEqual(t, pair.LastIndex, 0) // Get should work on the second Key pair, err = kv.Get(secondKey) assert.NoError(t, err) if assert.NotNil(t, pair) { assert.NotNil(t, pair.Value) } assert.Equal(t, pair.Value, secondValue) assert.NotEqual(t, pair.LastIndex, 0) // Delete Values under directory `nodes` err = kv.DeleteTree(prefix) assert.NoError(t, err) // Get should fail on both keys pair, err = kv.Get(firstKey) assert.Error(t, err) assert.Nil(t, pair) pair, err = kv.Get(secondKey) assert.Error(t, err) assert.Nil(t, pair) }
// RunCleanup cleans up keys introduced by the tests func RunCleanup(t *testing.T, kv store.Store) { for _, key := range []string{ "testPutGetDeleteExists", "testWatch", "testWatchTree", "testAtomicPut", "testAtomicPutCreate", "testAtomicDelete", "testLockUnlock", "testPutTTL", "testList", "testDeleteTree", } { err := kv.DeleteTree(key) assert.True(t, err == nil || err == store.ErrKeyNotFound, fmt.Sprintf("failed to delete tree key %s: %v", key, err)) err = kv.Delete(key) assert.True(t, err == nil || err == store.ErrKeyNotFound, fmt.Sprintf("failed to delete key %s: %v", key, err)) } }