feat: ErrorPolicySkipped returns 500 instead of upstream status code
When custom error codes are enabled and the upstream error code is NOT in the configured list, return HTTP 500 to the client instead of transparently forwarding the original status code. Also adds integration test TestCustomErrorCode599 verifying that 429, 500, 503, 401, 403 all return 500 without triggering SetRateLimited or SetError.
This commit is contained in:
@@ -158,6 +158,7 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
statusCode int
|
||||
body []byte
|
||||
expectedHandled bool
|
||||
expectedStatus int // expected outStatus
|
||||
expectedSwitchErr bool // expect *AntigravityAccountSwitchError
|
||||
handleErrorCalls int
|
||||
}{
|
||||
@@ -171,6 +172,7 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
statusCode: 500,
|
||||
body: []byte(`"error"`),
|
||||
expectedHandled: false,
|
||||
expectedStatus: 500, // passthrough
|
||||
handleErrorCalls: 0,
|
||||
},
|
||||
{
|
||||
@@ -187,6 +189,7 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
statusCode: 500, // not in custom codes
|
||||
body: []byte(`"error"`),
|
||||
expectedHandled: true,
|
||||
expectedStatus: http.StatusInternalServerError, // skipped → 500
|
||||
handleErrorCalls: 0,
|
||||
},
|
||||
{
|
||||
@@ -203,6 +206,7 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
statusCode: 500,
|
||||
body: []byte(`"error"`),
|
||||
expectedHandled: true,
|
||||
expectedStatus: 500, // matched → original status
|
||||
handleErrorCalls: 1,
|
||||
},
|
||||
{
|
||||
@@ -225,6 +229,7 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
statusCode: 503,
|
||||
body: []byte(`overloaded`),
|
||||
expectedHandled: true,
|
||||
expectedStatus: 503, // temp_unscheduled → original status
|
||||
expectedSwitchErr: true,
|
||||
handleErrorCalls: 0,
|
||||
},
|
||||
@@ -250,9 +255,10 @@ func TestApplyErrorPolicy(t *testing.T) {
|
||||
isStickySession: true,
|
||||
}
|
||||
|
||||
handled, retErr := svc.applyErrorPolicy(p, tt.statusCode, http.Header{}, tt.body)
|
||||
handled, outStatus, retErr := svc.applyErrorPolicy(p, tt.statusCode, http.Header{}, tt.body)
|
||||
|
||||
require.Equal(t, tt.expectedHandled, handled, "handled mismatch")
|
||||
require.Equal(t, tt.expectedStatus, outStatus, "outStatus mismatch")
|
||||
require.Equal(t, tt.handleErrorCalls, handleErrorCount, "handleError call count mismatch")
|
||||
|
||||
if tt.expectedSwitchErr {
|
||||
|
||||
Reference in New Issue
Block a user