github.com/grafana/pyroscope@v1.18.0/pkg/metastore/test/metastore_leader_details_test.go (about) 1 package test 2 3 import ( 4 "context" 5 "crypto/rand" 6 "testing" 7 8 "github.com/grafana/dskit/flagext" 9 "github.com/oklog/ulid/v2" 10 "github.com/stretchr/testify/require" 11 12 metastorev1 "github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1" 13 "github.com/grafana/pyroscope/pkg/metastore" 14 "github.com/grafana/pyroscope/pkg/metastore/raftnode" 15 "github.com/grafana/pyroscope/pkg/objstore/providers/memory" 16 ) 17 18 func TestRaftDetailsAddBlock(t *testing.T) { 19 cfg := new(metastore.Config) 20 flagext.DefaultValues(cfg) 21 22 ms := NewMetastoreSet(t, cfg, 3, memory.NewInMemBucket()) 23 defer ms.Close() 24 25 errors := 0 26 m := &metastorev1.BlockMeta{ 27 Id: ulid.MustNew(1, rand.Reader).String(), 28 } 29 for _, it := range ms.Instances { 30 _, err := it.AddBlock(context.Background(), &metastorev1.AddBlockRequest{ 31 Block: m, 32 }) 33 if err != nil { 34 requireRaftDetails(t, err) 35 errors++ 36 } 37 } 38 require.Equal(t, 2, errors) 39 } 40 41 func TestRaftDetailsPullCompaction(t *testing.T) { 42 cfg := new(metastore.Config) 43 flagext.DefaultValues(cfg) 44 45 ms := NewMetastoreSet(t, cfg, 3, memory.NewInMemBucket()) 46 defer ms.Close() 47 48 errors := 0 49 for _, it := range ms.Instances { 50 _, err := it.PollCompactionJobs(context.Background(), &metastorev1.PollCompactionJobsRequest{}) 51 if err != nil { 52 requireRaftDetails(t, err) 53 errors++ 54 } 55 } 56 require.Equal(t, 2, errors) 57 } 58 59 func requireRaftDetails(t *testing.T, err error) { 60 t.Log("error", err) 61 leader, ok := raftnode.RaftLeaderFromStatusDetails(err) 62 require.True(t, ok) 63 t.Log("leader is", leader) 64 }