github.com/grafana/pyroscope@v1.18.0/pkg/phlaredb/querier_test.go (about) 1 package phlaredb 2 3 import ( 4 "context" 5 "fmt" 6 "sort" 7 "testing" 8 9 "github.com/google/uuid" 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/prometheus/common/model" 12 "github.com/prometheus/prometheus/model/labels" 13 "github.com/stretchr/testify/require" 14 15 typesv1 "github.com/grafana/pyroscope/api/gen/proto/go/types/v1" 16 phlaremodel "github.com/grafana/pyroscope/pkg/model" 17 v1 "github.com/grafana/pyroscope/pkg/phlaredb/schemas/v1" 18 "github.com/grafana/pyroscope/pkg/phlaredb/tsdb/index" 19 ) 20 21 func TestQueryIndex(t *testing.T) { 22 a, err := newProfileIndex(32, newHeadMetrics(prometheus.NewRegistry())) 23 require.NoError(t, err) 24 25 for j := 0; j < 10; j++ { 26 lb1 := phlaremodel.Labels([]*typesv1.LabelPair{ 27 {Name: "__name__", Value: "memory"}, 28 {Name: "__sample__type__", Value: "bytes"}, 29 {Name: "bar", Value: fmt.Sprint(j)}, 30 }) 31 sort.Sort(lb1) 32 lb2 := phlaremodel.Labels([]*typesv1.LabelPair{ 33 {Name: "__name__", Value: "memory"}, 34 {Name: "__sample__type__", Value: "count"}, 35 {Name: "bar", Value: fmt.Sprint(j)}, 36 }) 37 sort.Sort(lb2) 38 39 for k := int64(0); k < 10; k++ { 40 id := uuid.New() 41 a.Add(&v1.InMemoryProfile{ 42 ID: id, 43 TimeNanos: k, 44 SeriesFingerprint: model.Fingerprint(lb1.Hash()), 45 }, lb1, "memory") 46 a.Add(&v1.InMemoryProfile{ 47 ID: id, 48 TimeNanos: k, 49 SeriesFingerprint: model.Fingerprint(lb2.Hash()), 50 }, lb2, "memory") 51 } 52 } 53 54 tmpFile := t.TempDir() + "/test.db" 55 _, err = a.writeTo(context.Background(), tmpFile) 56 require.NoError(t, err) 57 58 r, err := index.NewFileReader(tmpFile) 59 require.NoError(t, err) 60 61 p, err := PostingsForMatchers(r, nil, labels.MustNewMatcher(labels.MatchRegexp, "bar", "(1|2)")) 62 require.NoError(t, err) 63 64 lbls := make(phlaremodel.Labels, 3) 65 chks := make([]index.ChunkMeta, 1) 66 for p.Next() { 67 fp, err := r.Series(p.At(), &lbls, &chks) 68 require.NoError(t, err) 69 require.Equal(t, lbls.Hash(), fp) 70 require.Equal(t, 3, len(lbls)) 71 72 require.Equal(t, "memory", lbls.Get("__name__")) 73 require.True(t, lbls.Get("bar") == "1" || lbls.Get("bar") == "2") 74 75 require.Equal(t, 1, len(chks)) 76 require.Equal(t, int64(0), chks[0].MinTime) 77 require.Equal(t, int64(9), chks[0].MaxTime) 78 } 79 }