func testPutGetDelete(t *testing.T, kv store.Store) { key := "foo" value := []byte("bar") // Put the key err := kv.Put(key, value, nil) assert.NoError(t, err) // 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) assert.NotEqual(t, pair.LastIndex, 0) // Delete the key err = kv.Delete(key) assert.NoError(t, err) // Get should fail pair, err = kv.Get(key) assert.Error(t, err) assert.Nil(t, pair) }
func testWatchTree(t *testing.T, kv store.Store) { dir := "testWatchTree" node1 := "testWatchTree/node1" value1 := []byte("node1") node2 := "testWatchTree/node2" value2 := []byte("node2") node3 := "testWatchTree/node3" value3 := []byte("node3") err := kv.Put(node1, value1, nil) assert.NoError(t, err) err = kv.Put(node2, value2, nil) assert.NoError(t, err) err = kv.Put(node3, value3, nil) assert.NoError(t, err) stopCh := make(<-chan struct{}) events, err := kv.WatchTree(dir, stopCh) assert.NoError(t, err) assert.NotNil(t, events) // Update loop go func() { timeout := time.After(500 * time.Millisecond) for { select { case <-timeout: err := kv.Delete(node3) assert.NoError(t, err) return } } }() // Check for updates eventCount := 1 for { select { case event := <-events: assert.NotNil(t, event) // We received the Delete event on a child node // Exit test successfully if eventCount == 2 { return } eventCount++ case <-time.After(4 * time.Second): t.Fatal("Timeout reached") return } } }
func testPutGetDeleteExists(t *testing.T, kv store.Store) { // Get a not exist key should return ErrKeyNotFound pair, err := kv.Get("testPutGetDelete_not_exist_key") assert.Equal(t, store.ErrKeyNotFound, err) value := []byte("bar") for _, key := range []string{ "testPutGetDeleteExists", "testPutGetDeleteExists/", "testPutGetDeleteExists/testbar/", "testPutGetDeleteExists/testbar/testfoobar", } { failMsg := fmt.Sprintf("Fail key %s", key) // Put the key err = kv.Put(key, value, nil) assert.NoError(t, err, failMsg) // Get should return the value and an incremented index pair, err = kv.Get(key) assert.NoError(t, err, failMsg) if assert.NotNil(t, pair, failMsg) { assert.NotNil(t, pair.Value, failMsg) } assert.Equal(t, pair.Value, value, failMsg) assert.NotEqual(t, pair.LastIndex, 0, failMsg) // Exists should return true exists, err := kv.Exists(key) assert.NoError(t, err, failMsg) assert.True(t, exists, failMsg) // Delete the key err = kv.Delete(key) assert.NoError(t, err, failMsg) // Get should fail pair, err = kv.Get(key) assert.Error(t, err, failMsg) assert.Nil(t, pair, failMsg) // Exists should return false exists, err = kv.Exists(key) assert.NoError(t, err, failMsg) assert.False(t, exists, failMsg) } }
// 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)) } }
func testPutGetDeleteExists(t *testing.T, kv store.Store) { key := "testfoo" value := []byte("bar") // Put the key err := kv.Put(key, value, nil) assert.NoError(t, err) // 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) assert.NotEqual(t, pair.LastIndex, 0) // Get a not exist key should return ErrKeyNotFound pair, err = kv.Get("/testPutGetDelete_not_exist_key") assert.Equal(t, store.ErrKeyNotFound, err) // Exists should return true exists, err := kv.Exists(key) assert.NoError(t, err) assert.True(t, exists) // Delete the key err = kv.Delete(key) assert.NoError(t, err) // Get should fail pair, err = kv.Get(key) assert.Error(t, err) assert.Nil(t, pair) // Exists should return false exists, err = kv.Exists(key) assert.NoError(t, err) assert.False(t, exists) }