Skip to content

Commit b9a1715

Browse files
authored
test(credential-provider-imds): update tests for retry (#1316)
1 parent 0c0383c commit b9a1715

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed
Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,34 @@
11
import { retry } from "./retry";
22

33
describe("retry", () => {
4+
const successMsg = "Success";
5+
const errorMsg = "Expected failure";
6+
const retries = 10;
7+
const retryable = jest.fn().mockRejectedValue(errorMsg);
8+
9+
afterEach(() => {
10+
jest.clearAllMocks();
11+
});
12+
413
it("should retry a function the specified number of times", async () => {
5-
const retries = 10;
6-
const retryable = jest.fn().mockRejectedValue("Expected failure");
14+
await expect(retry(retryable, retries)).rejects.toStrictEqual(errorMsg);
15+
expect(retryable).toHaveBeenCalledTimes(retries + 1);
16+
});
717

8-
await retry(retryable, retries).catch(msg => {
9-
expect(retryable.mock.calls.length).toEqual(retries + 1);
10-
expect(msg).toEqual("Expected failure");
11-
});
18+
it("should not retry if successful", async () => {
19+
retryable.mockResolvedValueOnce(successMsg);
20+
await expect(retry(retryable, retries)).resolves.toStrictEqual(successMsg);
21+
expect(retryable).toHaveBeenCalledTimes(1);
1222
});
1323

1424
it("should stop retrying after the first successful invocation", async () => {
15-
const retries = 10;
1625
const successfulInvocationIndex = 3;
17-
let invocations = 0;
18-
const retryable = jest.fn(() => {
19-
if (++invocations === successfulInvocationIndex) {
20-
return Promise.resolve("Success!");
21-
}
22-
return Promise.reject("Expected failure");
23-
});
26+
for (let i = 1; i < successfulInvocationIndex; i++) {
27+
retryable.mockRejectedValueOnce(errorMsg);
28+
}
29+
retryable.mockResolvedValueOnce(successMsg);
2430

25-
await retry(retryable, retries).then(() => {
26-
expect(retryable.mock.calls.length).toEqual(successfulInvocationIndex);
27-
});
31+
await expect(retry(retryable, retries)).resolves.toStrictEqual(successMsg);
32+
expect(retryable).toHaveBeenCalledTimes(successfulInvocationIndex);
2833
});
2934
});

packages/credential-provider-imds/src/remoteProvider/retry.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ export interface RetryableProvider<T> {
55
/**
66
* @internal
77
*/
8-
export function retry<T>(
8+
export const retry = <T>(
99
toRetry: RetryableProvider<T>,
1010
maxRetries: number
11-
): Promise<T> {
11+
): Promise<T> => {
1212
let promise = toRetry();
1313
for (let i = 0; i < maxRetries; i++) {
1414
promise = promise.catch(toRetry);
1515
}
1616

1717
return promise;
18-
}
18+
};

0 commit comments

Comments
 (0)