-
Notifications
You must be signed in to change notification settings - Fork 146
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(logger): POWERTOOLS_LOGGER_LOG_EVENT precedence is respected (#1015)
* fix: POWERTOOLS_LOGGER_LOG_EVENT precedence is respected * fix: decorator logic * chore: added unit test cases for decorator * chore: added e2e test cases * chore: address review comments
- Loading branch information
1 parent
f4bc324
commit 1cbb4db
Showing
6 changed files
with
371 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.FunctionCode.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import { injectLambdaContext, Logger } from '../../src'; | ||
import { Context } from 'aws-lambda'; | ||
import middy from '@middy/core'; | ||
|
||
type LambdaEvent = { | ||
invocation: number | ||
}; | ||
|
||
const logger = new Logger(); | ||
|
||
const testFunction = async (event: LambdaEvent, context: Context): Promise<{requestId: string}> => ({ | ||
requestId: context.awsRequestId, | ||
}); | ||
|
||
export const handler = middy(testFunction) | ||
.use(injectLambdaContext(logger)); |
110 changes: 110 additions & 0 deletions
110
packages/logger/tests/e2e/logEventEnvVarSetting.middy.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
// SPDX-License-Identifier: MIT-0 | ||
|
||
/** | ||
* Test logger basic features | ||
* | ||
* @group e2e/logger/logEventEnvVarSetting | ||
*/ | ||
|
||
import path from 'path'; | ||
import { App, Stack } from 'aws-cdk-lib'; | ||
import { v4 } from 'uuid'; | ||
import { | ||
createStackWithLambdaFunction, | ||
generateUniqueName, | ||
invokeFunction, | ||
isValidRuntimeKey | ||
} from '../../../commons/tests/utils/e2eUtils'; | ||
import { InvocationLogs } from '../../../commons/tests/utils/InvocationLogs'; | ||
import { deployStack, destroyStack } from '../../../commons/tests/utils/cdk-cli'; | ||
import { | ||
RESOURCE_NAME_PREFIX, | ||
STACK_OUTPUT_LOG_GROUP, | ||
SETUP_TIMEOUT, | ||
TEST_CASE_TIMEOUT, | ||
TEARDOWN_TIMEOUT | ||
} from './constants'; | ||
|
||
const runtime: string = process.env.RUNTIME || 'nodejs16x'; | ||
|
||
if (!isValidRuntimeKey(runtime)) { | ||
throw new Error(`Invalid runtime key value: ${runtime}`); | ||
} | ||
|
||
const uuid = v4(); | ||
const stackName = generateUniqueName(RESOURCE_NAME_PREFIX, uuid, runtime, 'LogEventEnvVarSetting-Middy'); | ||
const functionName = generateUniqueName(RESOURCE_NAME_PREFIX, uuid, runtime, 'LogEventEnvVarSetting-Middy'); | ||
const lambdaFunctionCodeFile = 'logEventEnvVarSetting.middy.test.FunctionCode.ts'; | ||
|
||
const integTestApp = new App(); | ||
let logGroupName: string; // We do not know it until deployment | ||
let stack: Stack; | ||
|
||
describe(`logger E2E tests log event via env var setting (middy) for runtime: ${runtime}`, () => { | ||
|
||
let invocationLogs: InvocationLogs[]; | ||
|
||
beforeAll(async () => { | ||
// Create and deploy a stack with AWS CDK | ||
stack = createStackWithLambdaFunction({ | ||
app: integTestApp, | ||
stackName: stackName, | ||
functionName: functionName, | ||
functionEntry: path.join(__dirname, lambdaFunctionCodeFile), | ||
environment: { | ||
LOG_LEVEL: 'INFO', | ||
POWERTOOLS_SERVICE_NAME: 'logger-e2e-testing', | ||
UUID: uuid, | ||
|
||
// Enabling the logger to log events via env var | ||
POWERTOOLS_LOGGER_LOG_EVENT: 'true', | ||
}, | ||
logGroupOutputKey: STACK_OUTPUT_LOG_GROUP, | ||
runtime: runtime, | ||
}); | ||
|
||
const result = await deployStack(integTestApp, stack); | ||
logGroupName = result.outputs[STACK_OUTPUT_LOG_GROUP]; | ||
|
||
// Invoke the function twice (one for cold start, another for warm start) | ||
invocationLogs = await invokeFunction(functionName, 2, 'SEQUENTIAL'); | ||
|
||
console.log('logGroupName', logGroupName); | ||
|
||
}, SETUP_TIMEOUT); | ||
|
||
describe('Log event', () => { | ||
|
||
it('should log the event at both invocations', async () => { | ||
const firstInvocationMessages = invocationLogs[0].getAllFunctionLogs(); | ||
let eventLoggedInFirstInvocation = false; | ||
for (const message of firstInvocationMessages) { | ||
if (message.includes(`event`)) { | ||
eventLoggedInFirstInvocation = true; | ||
expect(message).toContain(`"event":{"invocation":0}`); | ||
} | ||
} | ||
|
||
const secondInvocationMessages = invocationLogs[1].getAllFunctionLogs(); | ||
let eventLoggedInSecondInvocation = false; | ||
for (const message of secondInvocationMessages) { | ||
if (message.includes(`event`)) { | ||
eventLoggedInSecondInvocation = true; | ||
expect(message).toContain(`"event":{"invocation":1}`); | ||
} | ||
} | ||
|
||
expect(eventLoggedInFirstInvocation).toBe(true); | ||
expect(eventLoggedInSecondInvocation).toBe(true); | ||
|
||
}, TEST_CASE_TIMEOUT); | ||
|
||
}); | ||
|
||
afterAll(async () => { | ||
if (!process.env.DISABLE_TEARDOWN) { | ||
await destroyStack(integTestApp, stack); | ||
} | ||
}, TEARDOWN_TIMEOUT); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.