github.com/celestiaorg/celestia-node@v0.15.0-beta.1/share/eds/inverted_index_test.go (about) 1 package eds 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/filecoin-project/dagstore/shard" 8 "github.com/multiformats/go-multihash" 9 "github.com/stretchr/testify/require" 10 ) 11 12 type mockIterator struct { 13 mhs []multihash.Multihash 14 } 15 16 func (m *mockIterator) ForEach(f func(mh multihash.Multihash) error) error { 17 for _, mh := range m.mhs { 18 if err := f(mh); err != nil { 19 return err 20 } 21 } 22 return nil 23 } 24 25 // TestMultihashesForShard ensures that the inverted index correctly stores a single shard key per 26 // duplicate multihash 27 func TestMultihashesForShard(t *testing.T) { 28 ctx, cancel := context.WithCancel(context.Background()) 29 t.Cleanup(cancel) 30 31 mhs := []multihash.Multihash{ 32 multihash.Multihash("mh1"), 33 multihash.Multihash("mh2"), 34 multihash.Multihash("mh3"), 35 } 36 37 mi := &mockIterator{mhs: mhs} 38 path := t.TempDir() 39 invertedIndex, err := newSimpleInvertedIndex(path) 40 require.NoError(t, err) 41 42 // 1. Add all 3 multihashes to shard1 43 err = invertedIndex.AddMultihashesForShard(ctx, mi, shard.KeyFromString("shard1")) 44 require.NoError(t, err) 45 shardKeys, err := invertedIndex.GetShardsForMultihash(ctx, mhs[0]) 46 require.NoError(t, err) 47 require.Equal(t, []shard.Key{shard.KeyFromString("shard1")}, shardKeys) 48 49 // 2. Add mh1 to shard2, and ensure that mh1 no longer points to shard1 50 err = invertedIndex.AddMultihashesForShard(ctx, &mockIterator{mhs: mhs[:1]}, shard.KeyFromString("shard2")) 51 require.NoError(t, err) 52 shardKeys, err = invertedIndex.GetShardsForMultihash(ctx, mhs[0]) 53 require.NoError(t, err) 54 require.Equal(t, []shard.Key{shard.KeyFromString("shard2")}, shardKeys) 55 }