(t *testing.T, wantTr *tempopb.Trace, wantMeta *tempopb.TraceSearchMetadata, _, _ []*tempopb.SearchRequest, meta *backend.BlockMeta, r Reader, _ common.BackendBlock)
| 164 | } |
| 165 | |
| 166 | func 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]))}, |
nothing calls this directly
no test coverage detected