From 2f7ceb672f48abac478d630877ec2d171cedf6ac Mon Sep 17 00:00:00 2001 From: Sergey Shelomentsev Date: Tue, 19 Dec 2023 14:39:24 +0200 Subject: [PATCH] feat: reworked getting env, updated tests --- mgmt-lambda/app.ts | 24 +++++---- mgmt-lambda/handlers/errorHandlers.ts | 2 +- mgmt-lambda/test/app.test.ts | 78 ++++++++++++++++++++++++--- 3 files changed, 86 insertions(+), 18 deletions(-) diff --git a/mgmt-lambda/app.ts b/mgmt-lambda/app.ts index cdc06ba8..df671c11 100644 --- a/mgmt-lambda/app.ts +++ b/mgmt-lambda/app.ts @@ -44,17 +44,23 @@ export async function handler(event: APIGatewayProxyEventV2WithRequestContext 0) { + const vars = missedVariables.join(', ') + throw new Error(`environment variables not found: ${vars}`) } const settings: DeploymentSettings = { diff --git a/mgmt-lambda/handlers/errorHandlers.ts b/mgmt-lambda/handlers/errorHandlers.ts index 9a3f50cc..0c13ccca 100644 --- a/mgmt-lambda/handlers/errorHandlers.ts +++ b/mgmt-lambda/handlers/errorHandlers.ts @@ -17,7 +17,7 @@ export async function handleWrongConfiguration(error: any): Promise { - const OLD_ENV = process.env beforeEach(() => { jest.resetModules() lambdaMock.reset() @@ -43,13 +44,6 @@ describe('Basic test', () => { expect(result.statusCode).toBe(401) }) - test('no secret env var', async () => { - const event = generateStatusRequest(correctToken) - - const result = await handler(event) - expect(result.statusCode).toBe(500) - }) - test('no update configuration env vars', async () => { setSecretEnv() mockSecret(correctToken) @@ -83,6 +77,74 @@ describe('Basic test', () => { }) }) +describe('Check environment', () => { + beforeEach(() => { + jest.resetModules() + lambdaMock.reset() + secretMock.reset() + process.env = { ...OLD_ENV } + }) + + test('no secret env var', async () => { + const event = generateStatusRequest(correctToken) + + const result = await handler(event) + expect(result.statusCode).toBe(500) + }) + + test('no deployment config', async () => { + setSecretEnv() + mockSecret(correctToken) + + const event = generateStatusRequest(correctToken) + + const result = await handler(event) + expect(result.statusCode).toBe(500) + const response = JSON.parse(result.body) + expect(response.status).toBe( + 'Wrong function configuration. Check environment variables for Lambda@Edge function and CloudFront Distribution id', + ) + expect(response.error).toBe( + 'environment variables not found: CFDistributionId, LambdaFunctionName, LambdaFunctionArn', + ) + }) + + test('CFDistributionConfig is not defined', async () => { + setSecretEnv() + process.env.LambdaFunctionName = 'arn:aws:lambda:us-east-1:1234567890:function:fingerprint-pro-lambda-function' + process.env.LambdaFunctionArn = 'fingerprint-pro-lambda-function' + mockSecret(correctToken) + + const event = generateStatusRequest(correctToken) + + const result = await handler(event) + expect(result.statusCode).toBe(500) + const response = JSON.parse(result.body) + expect(response.status).toBe( + 'Wrong function configuration. Check environment variables for Lambda@Edge function and CloudFront Distribution id', + ) + expect(response.error).toBe('environment variables not found: CFDistributionId') + }) + + test('CFDistributionConfig is defined, but empty', async () => { + setSecretEnv() + process.env.CFDistributionId = '' + process.env.LambdaFunctionName = 'arn:aws:lambda:us-east-1:1234567890:function:fingerprint-pro-lambda-function' + process.env.LambdaFunctionArn = 'fingerprint-pro-lambda-function' + mockSecret(correctToken) + + const event = generateStatusRequest(correctToken) + + const result = await handler(event) + expect(result.statusCode).toBe(500) + const response = JSON.parse(result.body) + expect(response.status).toBe( + 'Wrong function configuration. Check environment variables for Lambda@Edge function and CloudFront Distribution id', + ) + expect(response.error).toBe('environment variables not found: CFDistributionId') + }) +}) + function setSecretEnv() { process.env.SettingsSecretName = secretName }