diff --git a/pkg/core/storage/memory_store.go b/pkg/core/storage/memory_store.go index 2e155b84c..4c9d2f33f 100644 --- a/pkg/core/storage/memory_store.go +++ b/pkg/core/storage/memory_store.go @@ -2,6 +2,7 @@ package storage import ( "encoding/hex" + "strings" "sync" ) @@ -67,6 +68,12 @@ func (s *MemoryStore) PutBatch(batch Batch) error { // Seek implements the Store interface. func (s *MemoryStore) Seek(key []byte, f func(k, v []byte)) { + for k, v := range s.mem { + if strings.Contains(k, hex.EncodeToString(key)) { + decodeString, _ := hex.DecodeString(k) + f(decodeString, v) + } + } } // Batch implements the Batch interface and returns a compatible Batch. diff --git a/pkg/core/storage/memory_store_test.go b/pkg/core/storage/memory_store_test.go index 6d44bb433..1ad760e3e 100644 --- a/pkg/core/storage/memory_store_test.go +++ b/pkg/core/storage/memory_store_test.go @@ -59,3 +59,19 @@ func TestPutBatch(t *testing.T) { assert.Equal(t, value, newVal) require.NoError(t, s.Close()) } + +func TestMemoryStore_Seek(t *testing.T) { + var ( + s = NewMemoryStore() + key = []byte("sparse") + value = []byte("rocks") + ) + + if err := s.Put(key, value); err != nil { + t.Fatal(err) + } + + s.Seek(key, func(k, v []byte) { + assert.Equal(t, value, v) + }) +}