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) } }