Add the ability to have a delay before retrying

This commit is contained in:
mauriziovitale 2023-03-27 16:50:27 +01:00
parent 98814c53be
commit e778eeb4a7
5 changed files with 70 additions and 20 deletions

View file

@ -1,17 +1,19 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import {getRetryOptions} from '../src/retry-options'
import { getRetryOptions } from '../src/retry-options'
describe('getRequestOptions', () => {
test('retries disabled if retries == 0', async () => {
const [retryOptions, requestOptions] = getRetryOptions(
0,
[400, 500, 502],
321,
[]
)
expect(retryOptions.enabled).toBe(false)
expect(retryOptions.doNotRetry).toBeFalsy()
expect(retryOptions.delay).toBeFalsy()
expect(requestOptions?.retries).toBeFalsy()
})
@ -20,39 +22,59 @@ describe('getRequestOptions', () => {
const [retryOptions, requestOptions] = getRetryOptions(
1,
[400, 500, 502],
321,
[]
)
expect(retryOptions.enabled).toBe(true)
expect(retryOptions.doNotRetry).toEqual([400, 500, 502])
expect(retryOptions.delay).toEqual(321)
expect(requestOptions?.retries).toEqual(1)
})
test('properties set if retries > 0', async () => {
test('delay should be undefined if retryAfter < 0', async () => {
const [retryOptions, requestOptions] = getRetryOptions(
1,
[400, 500, 502],
-1,
[]
)
expect(retryOptions.enabled).toBe(true)
expect(retryOptions.doNotRetry).toEqual([400, 500, 502])
expect(retryOptions.delay).toBeUndefined()
expect(requestOptions?.retries).toEqual(1)
})
test('delay should be undefined if retryAfter = 0', async () => {
const [retryOptions, requestOptions] = getRetryOptions(
1,
[400, 500, 502],
0,
[]
)
expect(retryOptions.enabled).toBe(true)
expect(retryOptions.doNotRetry).toEqual([400, 500, 502])
expect(retryOptions.delay).toBeUndefined()
expect(requestOptions?.retries).toEqual(1)
})
test('retryOptions.doNotRetry not set if exemptStatusCodes isEmpty', async () => {
const [retryOptions, requestOptions] = getRetryOptions(1, [], [])
const [retryOptions, requestOptions] = getRetryOptions(1, [], 321, [])
expect(retryOptions.enabled).toBe(true)
expect(retryOptions.doNotRetry).toBeUndefined()
expect(retryOptions.delay).toBe(321)
expect(requestOptions?.retries).toEqual(1)
})
test('requestOptions does not override defaults from @actions/github', async () => {
const [retryOptions, requestOptions] = getRetryOptions(1, [], {
const [retryOptions, requestOptions] = getRetryOptions(1, [], 321, {
request: {
agent: 'default-user-agent'
},
@ -60,6 +82,7 @@ describe('getRequestOptions', () => {
})
expect(retryOptions.enabled).toBe(true)
expect(retryOptions.delay).toBe(321)
expect(retryOptions.doNotRetry).toBeUndefined()
expect(requestOptions?.retries).toEqual(1)