From 25ac60e43ded675f082e10f444b0ad95ea43622e Mon Sep 17 00:00:00 2001 From: eric sciple Date: Thu, 12 Dec 2019 13:16:16 -0500 Subject: fallback to REST API to download repo (#104) --- __test__/retry-helper.test.ts | 88 +++++++++++++++++++++++++++++++++++++++++++ __test__/verify-basic.sh | 22 +++++++++-- 2 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 __test__/retry-helper.test.ts (limited to '__test__') diff --git a/__test__/retry-helper.test.ts b/__test__/retry-helper.test.ts new file mode 100644 index 0000000..8c424cf --- /dev/null +++ b/__test__/retry-helper.test.ts @@ -0,0 +1,88 @@ +const mockCore = jest.genMockFromModule('@actions/core') as any +mockCore.info = (message: string) => { + info.push(message) +} +let info: string[] +let retryHelper: any + +describe('retry-helper tests', () => { + beforeAll(() => { + // Mocks + jest.setMock('@actions/core', mockCore) + + // Now import + const retryHelperModule = require('../lib/retry-helper') + retryHelper = new retryHelperModule.RetryHelper(3, 0, 0) + }) + + beforeEach(() => { + // Reset info + info = [] + }) + + afterAll(() => { + // Reset modules + jest.resetModules() + }) + + it('first attempt succeeds', async () => { + const actual = await retryHelper.execute(async () => { + return 'some result' + }) + expect(actual).toBe('some result') + expect(info).toHaveLength(0) + }) + + it('second attempt succeeds', async () => { + let attempts = 0 + const actual = await retryHelper.execute(() => { + if (++attempts == 1) { + throw new Error('some error') + } + + return Promise.resolve('some result') + }) + expect(attempts).toBe(2) + expect(actual).toBe('some result') + expect(info).toHaveLength(2) + expect(info[0]).toBe('some error') + expect(info[1]).toMatch(/Waiting .+ seconds before trying again/) + }) + + it('third attempt succeeds', async () => { + let attempts = 0 + const actual = await retryHelper.execute(() => { + if (++attempts < 3) { + throw new Error(`some error ${attempts}`) + } + + return Promise.resolve('some result') + }) + expect(attempts).toBe(3) + expect(actual).toBe('some result') + expect(info).toHaveLength(4) + expect(info[0]).toBe('some error 1') + expect(info[1]).toMatch(/Waiting .+ seconds before trying again/) + expect(info[2]).toBe('some error 2') + expect(info[3]).toMatch(/Waiting .+ seconds before trying again/) + }) + + it('all attempts fail succeeds', async () => { + let attempts = 0 + let error: Error = (null as unknown) as Error + try { + await retryHelper.execute(() => { + throw new Error(`some error ${++attempts}`) + }) + } catch (err) { + error = err + } + expect(error.message).toBe('some error 3') + expect(attempts).toBe(3) + expect(info).toHaveLength(4) + expect(info[0]).toBe('some error 1') + expect(info[1]).toMatch(/Waiting .+ seconds before trying again/) + expect(info[2]).toBe('some error 2') + expect(info[3]).toMatch(/Waiting .+ seconds before trying again/) + }) +}) diff --git a/__test__/verify-basic.sh b/__test__/verify-basic.sh index b5d09f0..aedd66d 100755 --- a/__test__/verify-basic.sh +++ b/__test__/verify-basic.sh @@ -1,10 +1,24 @@ -#!/bin/bash +#!/bin/sh if [ ! -f "./basic/basic-file.txt" ]; then echo "Expected basic file does not exist" exit 1 fi -# Verify auth token -cd basic -git fetch \ No newline at end of file +if [ "$1" = "--archive" ]; then + # Verify no .git folder + if [ -d "./basic/.git" ]; then + echo "Did not expect ./basic/.git folder to exist" + exit 1 + fi +else + # Verify .git folder + if [ ! -d "./basic/.git" ]; then + echo "Expected ./basic/.git folder to exist" + exit 1 + fi + + # Verify auth token + cd basic + git fetch --no-tags --depth=1 origin +refs/heads/master:refs/remotes/origin/master +fi -- cgit v1.2.3