github.com/grafana/pyroscope@v1.18.0/pkg/metastore/index/tombstones/store/tombstone_store_test.go (about) 1 package store 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 metastorev1 "github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1" 11 "github.com/grafana/pyroscope/pkg/test" 12 ) 13 14 func TestBlockQueueStore_StoreEntry(t *testing.T) { 15 db := test.BoltDB(t) 16 17 s := NewTombstoneStore() 18 tx, err := db.Begin(true) 19 require.NoError(t, err) 20 require.NoError(t, s.CreateBuckets(tx)) 21 22 entries := make([]TombstoneEntry, 1000) 23 for i := range entries { 24 entries[i] = TombstoneEntry{ 25 Index: uint64(i), 26 AppendedAt: time.Now().UnixNano(), 27 Tombstones: &metastorev1.Tombstones{ 28 Blocks: &metastorev1.BlockTombstones{Name: "a"}, 29 }, 30 } 31 } 32 for i := range entries { 33 assert.NoError(t, s.StoreTombstones(tx, entries[i])) 34 } 35 require.NoError(t, tx.Commit()) 36 37 s = NewTombstoneStore() 38 tx, err = db.Begin(false) 39 require.NoError(t, err) 40 iter := s.ListEntries(tx) 41 var i int 42 for iter.Next() { 43 assert.Less(t, i, len(entries)) 44 actual := iter.At() 45 expected := entries[i] 46 assert.Equal(t, expected.Index, actual.Index) 47 assert.Equal(t, expected.AppendedAt, actual.AppendedAt) 48 assert.Equal(t, expected.Tombstones, actual.Tombstones) 49 assert.NotNil(t, actual.key) 50 i++ 51 } 52 assert.Nil(t, iter.Err()) 53 assert.Nil(t, iter.Close()) 54 require.NoError(t, tx.Rollback()) 55 } 56 57 func TestTombstoneStore_DeleteQueuedEntries(t *testing.T) { 58 db := test.BoltDB(t) 59 60 s := NewTombstoneStore() 61 tx, err := db.Begin(true) 62 require.NoError(t, err) 63 require.NoError(t, s.CreateBuckets(tx)) 64 65 entries := make([]TombstoneEntry, 1000) 66 for i := range entries { 67 entries[i] = TombstoneEntry{ 68 Index: uint64(i), 69 AppendedAt: time.Now().UnixNano(), 70 Tombstones: &metastorev1.Tombstones{ 71 Blocks: &metastorev1.BlockTombstones{Name: "a"}, 72 }, 73 } 74 } 75 for i := range entries { 76 assert.NoError(t, s.StoreTombstones(tx, entries[i])) 77 } 78 require.NoError(t, tx.Commit()) 79 80 // Delete random 25%. 81 tx, err = db.Begin(true) 82 require.NoError(t, err) 83 for i := 0; i < len(entries); i += 4 { 84 assert.NoError(t, s.DeleteTombstones(tx, entries[i])) 85 } 86 require.NoError(t, tx.Commit()) 87 88 // Check remaining entries. 89 s = NewTombstoneStore() 90 tx, err = db.Begin(false) 91 require.NoError(t, err) 92 iter := s.ListEntries(tx) 93 var i int 94 for iter.Next() { 95 if i%4 == 0 { 96 // Skip deleted entries. 97 i++ 98 } 99 assert.Less(t, i, len(entries)) 100 actual := iter.At() 101 expected := entries[i] 102 assert.Equal(t, expected.Index, actual.Index) 103 assert.Equal(t, expected.AppendedAt, actual.AppendedAt) 104 assert.Equal(t, expected.Tombstones, actual.Tombstones) 105 assert.NotNil(t, actual.key) 106 i++ 107 } 108 assert.Nil(t, iter.Err()) 109 assert.Nil(t, iter.Close()) 110 require.NoError(t, tx.Rollback()) 111 }