diff --git a/kvs_test.go b/kvs_test.go index a537f71..a00183e 100644 --- a/kvs_test.go +++ b/kvs_test.go @@ -50,6 +50,70 @@ func TestPotKvs_Save(t *testing.T) { assert.NoError(t, err) assert.True(t, len(ref) > 0) }) + t.Run("Put key-value pair a second time, then save", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + err = s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + }) + t.Run("Save twice", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + }) + t.Run("Change key's value between two saves", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + err = s.Put(ctx, key1, val2) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + }) + t.Run("Store same value under different key between two saves", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + err = s.Put(ctx, key2, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + }) + t.Run("Put same key-value pair a second time between saves", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + err = s.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s.Save(ctx) + assert.NoError(t, err) + }) + t.Run("Put same key-value pair a second time, on new-by-reference KVS, between saves", func(t *testing.T) { + s, _ := pot.NewSwarmKvs(ls) + err := s.Put(ctx, key1, val1) + assert.NoError(t, err) + ref, err := s.Save(ctx) + assert.NoError(t, err) + s2, err := pot.NewSwarmKvsReference(ctx, ls, ref) + assert.NoError(t, err) + err = s2.Put(ctx, key1, val1) + assert.NoError(t, err) + _, err = s2.Save(ctx) + assert.NoError(t, err) + }) t.Run("Save KVS with one item, no error, pre-save value exist", func(t *testing.T) { s1, _ := pot.NewSwarmKvs(ls) diff --git a/pkg/elements/ops.go b/pkg/elements/ops.go index 039f986..5d57ff5 100644 --- a/pkg/elements/ops.go +++ b/pkg/elements/ops.go @@ -86,7 +86,7 @@ func update(ctx context.Context, acc Node, cn CNode, k []byte, entry *Entry, mod } orig := cn.Node.Entry() if (*entry).Equal(orig) { - return nil, nil + return cn.Node, nil } n := mode.New() n.Pin(*entry)