From 2eb8b29e51c0c9d772ec49435b672e8cd18438a3 Mon Sep 17 00:00:00 2001 From: whyour Date: Tue, 25 Aug 2026 03:30:34 +0800 Subject: [PATCH] fix(ql3): tolerate provider readiness convergence --- ...der-credential-test-kubernetes-live-contract.cjs | 7 ++++--- ...derCredentialTestKubernetesLiveContract.test.cjs | 13 +++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/scripts/ql3-provider-credential-test-kubernetes-live-contract.cjs b/scripts/ql3-provider-credential-test-kubernetes-live-contract.cjs index de79945f..53ea733a 100644 --- a/scripts/ql3-provider-credential-test-kubernetes-live-contract.cjs +++ b/scripts/ql3-provider-credential-test-kubernetes-live-contract.cjs @@ -1109,7 +1109,8 @@ async function retryProviderEvidence(read, pause = undefined) { assert.equal(typeof read, 'function'); assert.ok(pause === undefined || typeof pause === 'function'); let lastError; - for (let attempt = 1; attempt <= 3; attempt += 1) { + const maxAttempts = 8; + for (let attempt = 1; attempt <= maxAttempts; attempt += 1) { try { return await read(); } catch (error) { @@ -1118,12 +1119,12 @@ async function retryProviderEvidence(read, pause = undefined) { !/\b(?:ECONNREFUSED|ECONNRESET|ETIMEDOUT|TIMEOUT)\b/.test( error instanceof Error ? error.message : String(error), ) || - attempt === 3 + attempt === maxAttempts ) { throw error; } await ( - pause ?? (() => new Promise((resolve) => setTimeout(resolve, 500))) + pause ?? (() => new Promise((resolve) => setTimeout(resolve, 1_000))) )(); } } diff --git a/test/back/ql3ProviderCredentialTestKubernetesLiveContract.test.cjs b/test/back/ql3ProviderCredentialTestKubernetesLiveContract.test.cjs index 4fea846d..5087229f 100644 --- a/test/back/ql3ProviderCredentialTestKubernetesLiveContract.test.cjs +++ b/test/back/ql3ProviderCredentialTestKubernetesLiveContract.test.cjs @@ -390,6 +390,19 @@ test('retries only bounded transient provider evidence failures', async () => { ), /invalid evidence schema/, ); + + attempts = 0; + await assert.rejects( + retryProviderEvidence( + async () => { + attempts += 1; + throw new Error('{"code":"ECONNREFUSED"}'); + }, + async () => {}, + ), + /ECONNREFUSED/, + ); + assert.equal(attempts, 8); }); test('provider fixture logs only generation and authorization decision', () => {