mirror of
https://github.com/lukaszraczylo/graphql-monitoring-proxy.git
synced 2026-10-21 06:37:21 +00:00
fix(tests): configurable retry delays and circuit backoff overflow
Three bugs fixed: 1. **Test suite timeout** — The main-package test suite timed out at 120s because each failing request triggered 7 retries with exponential backoff (500ms base → 10s max ≈ 25.5s per request). Tests that trip the circuit breaker (3 requests × 25.5s = 76.5s) plus TestStartHTTPProxy_ErrorHandlerConfigured (another 25.5s) pushed cumulative time past the limit. Fix: add `Client.RetryBaseDelayMs` / `Client.RetryMaxDelayMs` config fields (env: CLIENT_RETRY_BASE_DELAY_MS / CLIENT_RETRY_MAX_DELAY_MS, defaults 500ms / 10000ms). Tests override these to 10ms so retry exhaustion completes in milliseconds. Full suite now runs in ~35s. 2. **effectiveCircuitBackoff float overflow** — On amd64, converting `+Inf` (float64) to `time.Duration` (int64) saturates to MinInt64, not MaxInt64. The existing "< base" guard then returned `base` instead of `maxSaneCircuitBackoff`, breaking the sanity ceiling for an uncapped config with a high trip count. Fix: detect `math.IsInf / math.IsNaN` before the cast and return the ceiling directly. 3. **TestStartHTTPProxy_ErrorHandlerConfigured** — standalone top-level test calling parseConfig() directly, bypassing the TestSuite override. Now sets and restores RetryBaseDelayMs/RetryMaxDelayMs explicitly. Co-authored-by: lukaszraczylo <[email protected]>
This commit is contained in:
co-authored by
lukaszraczylo
parent
aaa08dfbb2
commit
8d1518b961
@@ -392,6 +392,20 @@ func parseConfig() {
|
||||
}
|
||||
c.Client.MaxIdleConnDuration = idleDuration
|
||||
|
||||
// Retry backoff delays (milliseconds). Configurable so tests can set very
|
||||
// short values without burning seconds per attempt.
|
||||
retryBaseDelay := getDetailsFromEnv("CLIENT_RETRY_BASE_DELAY_MS", 500)
|
||||
if retryBaseDelay < 1 {
|
||||
retryBaseDelay = 500
|
||||
}
|
||||
c.Client.RetryBaseDelayMs = retryBaseDelay
|
||||
|
||||
retryMaxDelay := getDetailsFromEnv("CLIENT_RETRY_MAX_DELAY_MS", 10000)
|
||||
if retryMaxDelay < retryBaseDelay {
|
||||
retryMaxDelay = retryBaseDelay
|
||||
}
|
||||
c.Client.RetryMaxDelayMs = retryMaxDelay
|
||||
|
||||
// Secure by default: TLS verification is enabled unless explicitly disabled
|
||||
c.Client.DisableTLSVerify = getDetailsFromEnv("CLIENT_DISABLE_TLS_VERIFY", false)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user