diff --git a/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts b/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts index cde52d230..35654dce7 100644 --- a/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts @@ -104,6 +104,16 @@ describe("CredentialProvider", () => { ); }); + it("should not throw when list credentials command is not implemented", async () => { + mockExec.mockImplementationOnce((command, callback) => { + return callback(new Error(), null, "list is unimplemented\n"); + }); + + const credentials = await credentialProvider.getAuthConfig("registry", containerRuntimeConfig); + + expect(credentials).toBeUndefined(); + }); + it("should throw when get credentials fails", async () => { mockExecReturns(JSON.stringify({ registry: "username" })); mockSpawnReturns( diff --git a/packages/testcontainers/src/container-runtime/auth/credential-provider.ts b/packages/testcontainers/src/container-runtime/auth/credential-provider.ts index 7a1a13df8..dbd190fdd 100644 --- a/packages/testcontainers/src/container-runtime/auth/credential-provider.ts +++ b/packages/testcontainers/src/container-runtime/auth/credential-provider.ts @@ -42,8 +42,12 @@ export abstract class CredentialProvider implements RegistryAuthLocator { private listCredentials(providerName: string): Promise { return new Promise((resolve, reject) => { - exec(`${providerName} list`, (err, stdout) => { + exec(`${providerName} list`, (err, stdout, stderr) => { if (err) { + if (stderr === "list is unimplemented\n") { + return resolve({}); + } + log.error(`An error occurred listing credentials: ${err}`); return reject(new Error("An error occurred listing credentials")); }