MCPcopy
hub / github.com/grafana/tempo / advancedTraceQLRunner

Function advancedTraceQLRunner

tempodb/tempodb_search_test.go:166–341  ·  view source on GitHub ↗
(t *testing.T, wantTr *tempopb.Trace, wantMeta *tempopb.TraceSearchMetadata, _, _ []*tempopb.SearchRequest, meta *backend.BlockMeta, r Reader, _ common.BackendBlock)

Source from the content-addressed store, hash-verified

164}
165
166func advancedTraceQLRunner(t *testing.T, wantTr *tempopb.Trace, wantMeta *tempopb.TraceSearchMetadata, _, _ []*tempopb.SearchRequest, meta *backend.BlockMeta, r Reader, _ common.BackendBlock) {
167 ctx := context.Background()
168 e := traceql.NewEngine()
169
170 // collect some info about wantTr to use below
171 trueConditionsBySpan := [][]string{}
172 durationBySpan := []uint64{}
173 falseConditions := []string{
174 fmt.Sprintf("name=`%v`", test.RandomString()),
175 fmt.Sprintf("duration>%dh", rand.Intn(10)+1),
176 fmt.Sprintf("rootServiceName=`%v`", test.RandomString()),
177 // status? can't really construct a status condition that's false for all spans
178 }
179 trueTraceC := []string{
180 fmt.Sprintf("traceDuration=%dms", wantMeta.DurationMs),
181 fmt.Sprintf("rootServiceName=`%s`", wantMeta.RootServiceName),
182 fmt.Sprintf("rootName=`%s`", wantMeta.RootTraceName),
183 }
184 totalSpans := 0
185 for _, b := range wantTr.ResourceSpans {
186 trueResourceC, falseResourceC := conditionsForAttributes(b.Resource.Attributes, "resource")
187 falseConditions = append(falseConditions, falseResourceC...)
188
189 for _, ss := range b.ScopeSpans {
190 totalSpans += len(ss.Spans)
191 for _, s := range ss.Spans {
192 trueC, falseC := conditionsForAttributes(s.Attributes, "span")
193
194 status := trace.StatusToString(s.Status.Code)
195 kind := trace.KindToString(s.Kind)
196 trueC = append(trueC, fmt.Sprintf("name=`%v`", s.Name))
197 trueC = append(trueC, fmt.Sprintf("duration=%dns", s.EndTimeUnixNano-s.StartTimeUnixNano))
198 trueC = append(trueC, fmt.Sprintf("status=%s", status))
199 trueC = append(trueC, fmt.Sprintf("kind=%s", kind))
200 trueC = append(trueC, trueResourceC...)
201 trueC = append(trueC, trueTraceC...)
202
203 trueConditionsBySpan = append(trueConditionsBySpan, trueC)
204 falseConditions = append(falseConditions, falseC...)
205 durationBySpan = append(durationBySpan, s.EndTimeUnixNano-s.StartTimeUnixNano)
206 }
207 }
208 }
209
210 rando := func(s []string) string {
211 return s[rand.Intn(len(s))]
212 }
213
214 searchesThatMatch := []*tempopb.SearchRequest{
215 {Query: "{}"},
216 // conditions
217 {Query: fmt.Sprintf("{%s && %s && %s && %s && %s}", rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]))},
218 {Query: fmt.Sprintf("{%s || %s || %s || %s || %s}", rando(falseConditions), rando(falseConditions), rando(falseConditions), rando(trueConditionsBySpan[0]), rando(falseConditions))},
219 {Query: fmt.Sprintf("{(%s && %s) || %s}", rando(falseConditions), rando(falseConditions), rando(trueConditionsBySpan[0]))},
220 // spansets
221 {Query: fmt.Sprintf("{%s} && {%s}", rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[1]))},
222 {Query: fmt.Sprintf("{%s} || {%s}", rando(trueConditionsBySpan[0]), rando(falseConditions))},
223 {Query: fmt.Sprintf("{%s} && {%s} && {%s} && {%s} && {%s}", rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]), rando(trueConditionsBySpan[0]))},

Callers

nothing calls this directly

Calls 13

ExecuteSearchMethod · 0.95
NewEngineFunction · 0.92
RandomStringFunction · 0.92
StatusToStringFunction · 0.92
KindToStringFunction · 0.92
Min64Function · 0.92
Max64Function · 0.92
NewSpansetFetcherWrapperFunction · 0.92
DefaultSearchOptionsFunction · 0.92
conditionsForAttributesFunction · 0.85
actualForExpectedMetaFunction · 0.85
FetchMethod · 0.65

Tested by

no test coverage detected