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  }