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 := "nodes" firstKey := "nodes/first" firstValue := []byte("first") secondKey := "nodes/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) }