Pin the HTTP target's unpinned error checks (closes #285)
check / check (push) Successful in 3m18s
check / check (push) Successful in 3m18s
withRetry's check on a failed result write could be removed with every test still passing, and so could six other error checks in target_http.go. Each now has a test that fails without it: the circuit breaker learning a failed send whose result went unrecorded, the result write for an invalid config, building the request, reading the response body, decoding the target config, and decoding the stored inbound headers. The two backoff lookups' error checks stay unpinned: without them a failed lookup leaves a zero time, which gives the same answer, so no test can tell the difference. Model: opus-5-5
This commit is contained in:
@@ -179,6 +179,27 @@ func TestDoHTTPRequest_TransportErrorMasksURL(t *testing.T) {
|
||||
)
|
||||
}
|
||||
|
||||
// TestDoHTTPRequest_UnparsableURLIsMasked is the same for an HTTP
|
||||
// target URL that no request can be built from.
|
||||
func TestDoHTTPRequest_UnparsableURLIsMasked(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
e := testEngine(t, 1)
|
||||
|
||||
statusCode, _, _, reqErr := e.ExportDoHTTPRequest(
|
||||
context.TODO(),
|
||||
&delivery.HTTPTargetConfig{
|
||||
URL: "https://hooks.example.com" + maskSecretPath + "\n",
|
||||
},
|
||||
&database.Event{},
|
||||
)
|
||||
require.Error(t, reqErr)
|
||||
assert.Zero(t, statusCode)
|
||||
|
||||
assertNoCredential(t, reqErr.Error())
|
||||
assert.Contains(t, reqErr.Error(), "invalid control character")
|
||||
}
|
||||
|
||||
// TestValidateTargetURL_UnparsableURLIsMasked proves the SSRF
|
||||
// validator's error does not carry the submitted URL, which
|
||||
// the handler both logs and shows.
|
||||
|
||||
Reference in New Issue
Block a user