Skip to content
This repository was archived by the owner on Jan 16, 2025. It is now read-only.

Commit 8266442

Browse files
authored
fix(syncer): Add tests, coverage report, and refactor lambda / naming (#1478)
* fix: Add tests, coverage report, and refactor lambda / naming * fix: Add tests, coverage report, and refactor lambda / naming
1 parent de5b93f commit 8266442

File tree

9 files changed

+360
-430
lines changed

9 files changed

+360
-430
lines changed

Diff for: .github/workflows/lambda-runner-binaries-syncer.yml

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
name: Lambda Syncer
2-
env:
3-
lambda_name: runner-binaries-syncer
4-
lambda_path: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer
52
on:
63
push:
74
branches:
@@ -17,7 +14,8 @@ jobs:
1714
container: node:14
1815
defaults:
1916
run:
20-
working-directory: ${{ env.lambda_path }}
17+
working-directory: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer
18+
2119
steps:
2220
- uses: actions/checkout@v2
2321
- name: Install dependencies
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
module.exports = {
22
preset: 'ts-jest',
33
testEnvironment: 'node',
4+
collectCoverage: true,
5+
collectCoverageFrom: ['src/**/*.{ts,js,jsx}', '!src/**/*local*.ts'],
6+
coverageThreshold: {
7+
global: {
8+
branches: 80,
9+
functions: 60,
10+
lines: 80,
11+
statements: 80
12+
}
13+
}
414
};

Diff for: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"typescript": "^4.5.2"
3333
},
3434
"dependencies": {
35-
"tslog": "^3.3.0",
36-
"axios": "^0.24.0"
35+
"axios": "^0.24.0",
36+
"tslog": "^3.3.0"
3737
}
3838
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { sync } from './syncer/syncer';
2+
import { handler } from './lambda';
3+
import { mocked } from 'ts-jest/utils';
4+
5+
jest.mock('./syncer/syncer');
6+
7+
describe('Test scale up lambda wrapper.', () => {
8+
it('Scale without error should resolve.', async () => {
9+
const mock = mocked(sync);
10+
mock.mockImplementation(() => {
11+
return new Promise((resolve) => {
12+
resolve();
13+
});
14+
});
15+
await expect(handler({}, {})).resolves;
16+
});
17+
18+
it('Scale without error should resolve2 . ', async () => {
19+
const mock = mocked(sync);
20+
mock.mockRejectedValue(new Error(''));
21+
22+
await expect(handler({}, {})).resolves;
23+
});
24+
});
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
import { handle } from './syncer/handler';
1+
import { sync } from './syncer/syncer';
22
import { logger } from './syncer/logger';
33

44
// eslint-disable-next-line
5-
export const handler = async (event: any, context: any, callback: any): Promise<void> => {
5+
export const handler = async (event: any, context: any): Promise<void> => {
66
logger.setSettings({ requestId: context.awsRequestId });
77
logger.debug(JSON.stringify(event));
8-
try {
9-
await handle();
10-
callback(null);
11-
} catch (e) {
12-
callback(e);
13-
}
8+
9+
return new Promise((resolve) => {
10+
sync()
11+
.then(() => resolve())
12+
.catch((e: Error) => {
13+
logger.warn('Ignoring error:', e);
14+
resolve();
15+
});
16+
});
1417
};

Diff for: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/src/local.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { handle } from './syncer/handler';
1+
import { sync } from './syncer/syncer';
22

3-
handle()
3+
sync()
44
.then()
55
.catch((e) => {
66
console.log(e);

Diff for: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/src/syncer/handler.test.ts renamed to modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/src/syncer/syncer.test.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { handle } from './handler';
1+
import { sync } from './syncer';
22
import listReleases from '../../test/resources/github-list-releases.json';
33
import listReleasesEmpty from '../../test/resources/github-list-releases-empty-assets.json';
44
import listReleasesNoLinux from '../../test/resources/github-list-releases-no-linux.json';
@@ -47,7 +47,7 @@ describe('Synchronize action distribution.', () => {
4747
};
4848
});
4949

50-
await handle();
50+
await sync();
5151
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
5252
expect(mockS3.getObjectTagging).toBeCalledWith({
5353
Bucket: bucketName,
@@ -71,7 +71,7 @@ describe('Synchronize action distribution.', () => {
7171
};
7272
});
7373

74-
await handle();
74+
await sync();
7575
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
7676
expect(mockS3.getObjectTagging).toBeCalledWith({
7777
Bucket: bucketName,
@@ -90,7 +90,7 @@ describe('Synchronize action distribution.', () => {
9090
};
9191
});
9292

93-
await handle();
93+
await sync();
9494
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
9595
expect(mockS3.getObjectTagging).toBeCalledWith({
9696
Bucket: bucketName,
@@ -108,7 +108,7 @@ describe('Synchronize action distribution.', () => {
108108
};
109109
});
110110

111-
await handle();
111+
await sync();
112112
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
113113
expect(mockS3.getObjectTagging).toBeCalledWith({
114114
Bucket: bucketName,
@@ -134,7 +134,7 @@ describe('Synchronize action distribution.', () => {
134134
};
135135
});
136136

137-
await handle();
137+
await sync();
138138
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
139139
expect(mockS3.getObjectTagging).toBeCalledWith({
140140
Bucket: bucketName,
@@ -155,7 +155,7 @@ describe('Synchronize action distribution.', () => {
155155
};
156156
});
157157

158-
await handle();
158+
await sync();
159159
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
160160
expect(mockS3.getObjectTagging).toBeCalledWith({
161161
Bucket: bucketName,
@@ -183,7 +183,7 @@ describe('Synchronize action distribution.', () => {
183183
};
184184
});
185185

186-
await handle();
186+
await sync();
187187
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
188188
expect(mockS3.getObjectTagging).toBeCalledWith({
189189
Bucket: bucketName,
@@ -203,7 +203,7 @@ describe('Synchronize action distribution.', () => {
203203
};
204204
});
205205

206-
await handle();
206+
await sync();
207207
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
208208
expect(mockS3.getObjectTagging).toBeCalledWith({
209209
Bucket: bucketName,
@@ -221,7 +221,7 @@ describe('Synchronize action distribution.', () => {
221221
};
222222
});
223223

224-
await handle();
224+
await sync();
225225
expect(mockOctokit.repos.listReleases).toBeCalledTimes(1);
226226
expect(mockS3.getObjectTagging).toBeCalledWith({
227227
Bucket: bucketName,
@@ -243,15 +243,15 @@ describe('No release assets found.', () => {
243243
data: listReleasesEmpty,
244244
}));
245245

246-
await expect(handle()).rejects.toThrow(errorMessage);
246+
await expect(sync()).rejects.toThrow(errorMessage);
247247
});
248248

249249
it('No linux x64 asset.', async () => {
250250
mockOctokit.repos.listReleases.mockImplementation(() => ({
251251
data: [listReleasesNoLinux],
252252
}));
253253

254-
await expect(handle()).rejects.toThrow(errorMessage);
254+
await expect(sync()).rejects.toThrow(errorMessage);
255255
});
256256
});
257257

@@ -260,17 +260,17 @@ describe('Invalid config', () => {
260260
it('No bucket and object key.', async () => {
261261
delete process.env.S3_OBJECT_KEY;
262262
delete process.env.S3_BUCKET_NAME;
263-
await expect(handle()).rejects.toThrow(errorMessage);
263+
await expect(sync()).rejects.toThrow(errorMessage);
264264
});
265265
it('No bucket.', async () => {
266266
delete process.env.S3_BUCKET_NAME;
267267
process.env.S3_OBJECT_KEY = bucketObjectKey;
268-
await expect(handle()).rejects.toThrow(errorMessage);
268+
await expect(sync()).rejects.toThrow(errorMessage);
269269
});
270270
it('No object key.', async () => {
271271
delete process.env.S3_OBJECT_KEY;
272272
process.env.S3_BUCKET_NAME = bucketName;
273-
await expect(handle()).rejects.toThrow(errorMessage);
273+
await expect(sync()).rejects.toThrow(errorMessage);
274274
});
275275
});
276276

@@ -287,6 +287,6 @@ describe('Synchronize action distribution for arm64.', () => {
287287
data: [listReleasesNoArm64],
288288
}));
289289

290-
await expect(handle()).rejects.toThrow(errorMessage);
290+
await expect(sync()).rejects.toThrow(errorMessage);
291291
});
292292
});

Diff for: modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/src/syncer/handler.ts renamed to modules/runner-binaries-syncer/lambdas/runner-binaries-syncer/src/syncer/syncer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ async function uploadToS3(s3: S3, cacheObject: CacheObject, actionRunnerReleaseA
103103
});
104104
}
105105

106-
export const handle = async (): Promise<void> => {
106+
export async function sync(): Promise<void> {
107107
const s3 = new AWS.S3();
108108

109109
const runnerArch = process.env.GITHUB_RUNNER_ARCHITECTURE || 'x64';
@@ -129,4 +129,4 @@ export const handle = async (): Promise<void> => {
129129
} else {
130130
logger.debug('Distribution is up-to-date, no action.');
131131
}
132-
};
132+
}

0 commit comments

Comments
 (0)