From 122a20086e18b11216a98b3132d11347f0b2fe43 Mon Sep 17 00:00:00 2001 From: florian-nguyen <25557979+florian-nguyen@users.noreply.github.com> Date: Mon, 17 Mar 2025 15:51:56 +0100 Subject: [PATCH 1/2] Improvement append session id to lambda docker flags --- .../localstack/src/localstack-container.test.ts | 15 +++++++++++++++ .../localstack/src/localstack-container.ts | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/modules/localstack/src/localstack-container.test.ts b/packages/modules/localstack/src/localstack-container.test.ts index bfb39676d..9fba8ea37 100644 --- a/packages/modules/localstack/src/localstack-container.test.ts +++ b/packages/modules/localstack/src/localstack-container.test.ts @@ -110,4 +110,19 @@ describe("LocalStackContainer", { timeout: 180_000 }, () => { expect(exitCode).toBe(0); expect(output).toContain(`${LABEL_TESTCONTAINERS_SESSION_ID}=${sessionId}`); }); + + it("should concatenate sessionId label to LAMBDA_DOCKER_FLAGS", async () => { + const container = await new LocalstackContainer() + .withEnvironment({ + LAMBDA_DOCKER_FLAGS: `-l mylabel=myvalue -l ${LABEL_TESTCONTAINERS_SESSION_ID}=sessionId`, + }) + .start(); + const sessionId = container.getLabels()[LABEL_TESTCONTAINERS_SESSION_ID]; + + const { output, exitCode } = await container.exec(["printenv", "LAMBDA_DOCKER_FLAGS"]); + + expect(exitCode).toBe(0); + expect(output).toContain(`${LABEL_TESTCONTAINERS_SESSION_ID}=${sessionId}`); + expect(output).toContain(`mylabel=myvalue`); + }); }); diff --git a/packages/modules/localstack/src/localstack-container.ts b/packages/modules/localstack/src/localstack-container.ts index c0ed1f394..5a0b1e546 100644 --- a/packages/modules/localstack/src/localstack-container.ts +++ b/packages/modules/localstack/src/localstack-container.ts @@ -42,7 +42,15 @@ export class LocalstackContainer extends GenericContainer { private async flagLambdaSessionId(): Promise { const client = await getContainerRuntimeClient(); const reaper = await getReaper(client); - this.withEnvironment({ LAMBDA_DOCKER_FLAGS: `-l ${LABEL_TESTCONTAINERS_SESSION_ID}=${reaper.sessionId}` }); + + const lambdaDockerFlags = [ + this.environment["LAMBDA_DOCKER_FLAGS"], + `-l ${LABEL_TESTCONTAINERS_SESSION_ID}=${reaper.sessionId}`, + ] + .filter((flag) => flag !== undefined) + .join(" "); + + this.withEnvironment({ LAMBDA_DOCKER_FLAGS: lambdaDockerFlags }); } protected override async beforeContainerCreated(): Promise { From 4442912ed15fb255c410f6b4ee20a0fdbb6544c4 Mon Sep 17 00:00:00 2001 From: florian-nguyen <25557979+florian-nguyen@users.noreply.github.com> Date: Mon, 17 Mar 2025 19:01:26 +0100 Subject: [PATCH 2/2] review - remove filtering + simpler test --- .../localstack/src/localstack-container.test.ts | 2 +- .../modules/localstack/src/localstack-container.ts | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/modules/localstack/src/localstack-container.test.ts b/packages/modules/localstack/src/localstack-container.test.ts index 9fba8ea37..c690bf04b 100644 --- a/packages/modules/localstack/src/localstack-container.test.ts +++ b/packages/modules/localstack/src/localstack-container.test.ts @@ -114,7 +114,7 @@ describe("LocalStackContainer", { timeout: 180_000 }, () => { it("should concatenate sessionId label to LAMBDA_DOCKER_FLAGS", async () => { const container = await new LocalstackContainer() .withEnvironment({ - LAMBDA_DOCKER_FLAGS: `-l mylabel=myvalue -l ${LABEL_TESTCONTAINERS_SESSION_ID}=sessionId`, + LAMBDA_DOCKER_FLAGS: `-l mylabel=myvalue`, }) .start(); const sessionId = container.getLabels()[LABEL_TESTCONTAINERS_SESSION_ID]; diff --git a/packages/modules/localstack/src/localstack-container.ts b/packages/modules/localstack/src/localstack-container.ts index 5a0b1e546..7a5180f72 100644 --- a/packages/modules/localstack/src/localstack-container.ts +++ b/packages/modules/localstack/src/localstack-container.ts @@ -43,14 +43,9 @@ export class LocalstackContainer extends GenericContainer { const client = await getContainerRuntimeClient(); const reaper = await getReaper(client); - const lambdaDockerFlags = [ - this.environment["LAMBDA_DOCKER_FLAGS"], - `-l ${LABEL_TESTCONTAINERS_SESSION_ID}=${reaper.sessionId}`, - ] - .filter((flag) => flag !== undefined) - .join(" "); - - this.withEnvironment({ LAMBDA_DOCKER_FLAGS: lambdaDockerFlags }); + this.withEnvironment({ + LAMBDA_DOCKER_FLAGS: `${this.environment["LAMBDA_DOCKER_FLAGS"] ?? ""} -l ${LABEL_TESTCONTAINERS_SESSION_ID}=${reaper.sessionId}`, + }); } protected override async beforeContainerCreated(): Promise {