Skip to content

Commit 9068f40

Browse files
refactor(promql-compliance): remove expect error support (#727)
1 parent 741ddec commit 9068f40

5 files changed

Lines changed: 7 additions & 44 deletions

File tree

promql-compliance/ARCHITECTURE.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,8 @@ For each query, the runner can perform four related checks:
8888
- Reference parity: Prometheus range-at-t versus Prometheus instant-at-t.
8989
- Test parity: ASAPQuery range-at-t versus ASAPQuery instant-at-t.
9090

91-
The report passes only if every configured comparison passes. An unexpected
92-
HTTP/query error from either target fails the comparison, even if both targets
93-
fail. The exception is a query explicitly marked `expect_error: true`, where
94-
both targets must return an error.
91+
The report passes only if every configured comparison passes. An HTTP/query
92+
error from either target fails the comparison, even if both targets fail.
9593

9694
Equal successful empty results are still equal results; use a dataset and
9795
probe query that should contain samples when testing ingestion readiness.

promql-compliance/HOW_TO.md

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -146,27 +146,6 @@ queries:
146146
If tolerance is omitted, values are compared exactly. A tolerance should be
147147
small and justified; a broad tolerance can hide a correctness bug.
148148

149-
## Test expected failures
150-
151-
Use this only when the query is deliberately expected to fail on both
152-
targets:
153-
154-
```yaml
155-
- name: intentionally-unsupported
156-
expr: unsupported_expression
157-
instant_offsets_seconds: [600]
158-
expect_error: true
159-
```
160-
161-
For ordinary queries, an error from either target makes the comparison fail.
162-
Two matching errors do not accidentally pass. With `expect_error: true`, both
163-
targets must return errors; a success from either target fails the comparison.
164-
165-
This also makes the suite useful for finding unsupported ASAPQuery queries:
166-
leave `expect_error` unset for a query that Prometheus supports. A Prometheus
167-
success paired with an ASAPQuery error produces `passed: false` and records the
168-
ASAPQuery error in `testError`.
169-
170149
## Run with DEBUG logging
171150

172151
The default Compose stack uses `INFO`. Temporarily change the query engine

promql-compliance/runner/compare.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func CompareQuery(ctx context.Context, reference, test QueryAPI, query QueryCase
7272
}
7373
referenceRange, _, referenceRangeErr = reference.QueryRange(ctx, query.Expr, rng)
7474
testRange, _, testRangeErr = test.QueryRange(ctx, query.Expr, rng)
75-
rangeOutcome := responseComparison(referenceRange, testRange, referenceRangeErr, testRangeErr, effective, query.ExpectError)
75+
rangeOutcome := responseComparison(referenceRange, testRange, referenceRangeErr, testRangeErr, effective)
7676
report.Range = &rangeOutcome
7777
report.Passed = report.Passed && rangeOutcome.Passed
7878
}
@@ -81,15 +81,15 @@ func CompareQuery(ctx context.Context, reference, test QueryAPI, query QueryCase
8181
for index, instantTime := range instantTimes {
8282
referenceInstant, _, referenceErr := reference.Query(ctx, query.Expr, instantTime)
8383
testInstant, _, testErr := test.Query(ctx, query.Expr, instantTime)
84-
outcome := responseComparison(referenceInstant, testInstant, referenceErr, testErr, effective, query.ExpectError)
84+
outcome := responseComparison(referenceInstant, testInstant, referenceErr, testErr, effective)
8585
report.Instant = append(report.Instant, InstantComparison{
8686
OffsetSeconds: query.InstantOffsetsSeconds[index],
8787
Time: instantTime,
8888
Comparison: outcome,
8989
})
9090
report.Passed = report.Passed && outcome.Passed
9191

92-
if query.Range == nil || referenceRangeErr != nil || testRangeErr != nil || referenceErr != nil || testErr != nil || query.ExpectError {
92+
if query.Range == nil || referenceRangeErr != nil || testRangeErr != nil || referenceErr != nil || testErr != nil {
9393
continue
9494
}
9595
referenceParity := parityComparison(referenceRange, referenceInstant, instantTime, effective)
@@ -124,18 +124,14 @@ func (q QueryCase) RangeAt(base time.Time) (clientv1.Range, error) {
124124
}, nil
125125
}
126126

127-
func responseComparison(reference, test model.Value, referenceErr, testErr error, tolerance ComparisonPolicy, expectError bool) ComparisonOutcome {
127+
func responseComparison(reference, test model.Value, referenceErr, testErr error, tolerance ComparisonPolicy) ComparisonOutcome {
128128
outcome := ComparisonOutcome{}
129129
if referenceErr != nil {
130130
outcome.ReferenceError = referenceErr.Error()
131131
}
132132
if testErr != nil {
133133
outcome.TestError = testErr.Error()
134134
}
135-
if expectError {
136-
outcome.Passed = referenceErr != nil && testErr != nil
137-
return outcome
138-
}
139135
if referenceErr != nil || testErr != nil {
140136
outcome.Passed = false
141137
return outcome

promql-compliance/runner/compare_test.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func TestCompareQueryRejectsUnexpectedSharedErrors(t *testing.T) {
1414
err := errors.New("query failed")
15-
outcome := responseComparison(nil, nil, err, err, ComparisonPolicy{}, false)
15+
outcome := responseComparison(nil, nil, err, err, ComparisonPolicy{})
1616

1717
if outcome.Passed {
1818
t.Fatal("comparison passed even though both targets failed unexpectedly")
@@ -22,15 +22,6 @@ func TestCompareQueryRejectsUnexpectedSharedErrors(t *testing.T) {
2222
}
2323
}
2424

25-
func TestCompareQueryAcceptsSharedExpectedErrors(t *testing.T) {
26-
err := errors.New("query failed")
27-
outcome := responseComparison(nil, nil, err, err, ComparisonPolicy{}, true)
28-
29-
if !outcome.Passed {
30-
t.Fatal("comparison rejected matching expected errors")
31-
}
32-
}
33-
3425
type fakeTarget struct {
3526
rangeValue model.Value
3627
instantByMS map[int64]model.Value

promql-compliance/runner/config.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ type QueryCase struct {
2424
InstantOffsetsSeconds []float64 `yaml:"instant_offsets_seconds" json:"instantOffsetsSeconds"`
2525
Range *RangeSpec `yaml:"range" json:"range"`
2626
Comparison *ComparisonPolicy `yaml:"comparison" json:"comparison"`
27-
ExpectError bool `yaml:"expect_error" json:"expectError"`
2827
}
2928

3029
type RangeSpec struct {

0 commit comments

Comments
 (0)