From c5a7f41ee94029d1fbfbac3703608d3ee2aab007 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 6 Jul 2025 21:22:21 +0200 Subject: [PATCH 1/2] implement #1023 --- docs/modules/mockserver.md | 6 ++++ .../src/mockserver-container.test.ts | 35 +++++++++++++++++++ .../mockserver/src/mockserver-container.ts | 4 +++ 3 files changed, 45 insertions(+) diff --git a/docs/modules/mockserver.md b/docs/modules/mockserver.md index bde009ab9..477c070ad 100644 --- a/docs/modules/mockserver.md +++ b/docs/modules/mockserver.md @@ -13,3 +13,9 @@ npm install @testcontainers/mockserver --save-dev [Start container:](../../packages/modules/mockserver/src/mockserver-container.test.ts) inside_block:startContainer + +MockServer includes built-in TLS support. To obtain an HTTPS URL, use the `getSecureUrl` method. Keep in mind that MockServer uses a self-signed certificate. + + +[Using TLS:](../../packages/modules/mockserver/src/mockserver-container.test.ts) inside_block:httpsRequests + \ No newline at end of file diff --git a/packages/modules/mockserver/src/mockserver-container.test.ts b/packages/modules/mockserver/src/mockserver-container.test.ts index a379b95a9..091a37f68 100644 --- a/packages/modules/mockserver/src/mockserver-container.test.ts +++ b/packages/modules/mockserver/src/mockserver-container.test.ts @@ -31,4 +31,39 @@ describe("MockserverContainer", { timeout: 240_000 }, () => { expect(response.text).toBe("bar"); }); // } + + it("should return an https url", async () => { + const container = await new MockserverContainer(IMAGE).start(); + const secureUrl = container.getSecureUrl() + await container.stop() + expect(secureUrl.startsWith("https://")).to.equal(true, `${secureUrl} does not start with https://`) + }) + + // httpsRequests { + it("should respond to https requests", async () => { + const container = await new MockserverContainer(IMAGE).start(); + const client = mockServerClient(container.getHost(), container.getMockserverPort()); + + await client.mockAnyResponse({ + httpRequest: { + method: "GET", + path: "/foo", + }, + httpResponse: { + body: { + string: "bar", + }, + statusCode: 200, + }, + }); + + const secureUrl = container.getSecureUrl() + const response = await superagent.get(`${secureUrl}/foo`).disableTLSCerts(); + + expect(response.statusCode).toBe(200); + expect(response.text).toBe("bar"); + + await container.stop() + }) + // } }); diff --git a/packages/modules/mockserver/src/mockserver-container.ts b/packages/modules/mockserver/src/mockserver-container.ts index 3a7e96cf7..1091bc137 100644 --- a/packages/modules/mockserver/src/mockserver-container.ts +++ b/packages/modules/mockserver/src/mockserver-container.ts @@ -8,6 +8,10 @@ export class StartedMockserverContainer extends AbstractStartedContainer { getUrl(): string { return `http://${this.getHost()}:${this.getFirstMappedPort()}`; } + + getSecureUrl(): string { + return `https://${this.getHost()}:${this.getFirstMappedPort()}` + } } const MOCKSERVER_PORT = 1080; From d7991cd03f625abe2ad86146ab57c03ec7be4b28 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 6 Jul 2025 22:02:11 +0200 Subject: [PATCH 2/2] lint --- .../mockserver/src/mockserver-container.test.ts | 16 ++++++++-------- .../mockserver/src/mockserver-container.ts | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/modules/mockserver/src/mockserver-container.test.ts b/packages/modules/mockserver/src/mockserver-container.test.ts index 091a37f68..392261923 100644 --- a/packages/modules/mockserver/src/mockserver-container.test.ts +++ b/packages/modules/mockserver/src/mockserver-container.test.ts @@ -31,13 +31,13 @@ describe("MockserverContainer", { timeout: 240_000 }, () => { expect(response.text).toBe("bar"); }); // } - + it("should return an https url", async () => { const container = await new MockserverContainer(IMAGE).start(); - const secureUrl = container.getSecureUrl() - await container.stop() - expect(secureUrl.startsWith("https://")).to.equal(true, `${secureUrl} does not start with https://`) - }) + const secureUrl = container.getSecureUrl(); + await container.stop(); + expect(secureUrl.startsWith("https://")).to.equal(true, `${secureUrl} does not start with https://`); + }); // httpsRequests { it("should respond to https requests", async () => { @@ -57,13 +57,13 @@ describe("MockserverContainer", { timeout: 240_000 }, () => { }, }); - const secureUrl = container.getSecureUrl() + const secureUrl = container.getSecureUrl(); const response = await superagent.get(`${secureUrl}/foo`).disableTLSCerts(); expect(response.statusCode).toBe(200); expect(response.text).toBe("bar"); - await container.stop() - }) + await container.stop(); + }); // } }); diff --git a/packages/modules/mockserver/src/mockserver-container.ts b/packages/modules/mockserver/src/mockserver-container.ts index 1091bc137..5b31becf8 100644 --- a/packages/modules/mockserver/src/mockserver-container.ts +++ b/packages/modules/mockserver/src/mockserver-container.ts @@ -10,7 +10,7 @@ export class StartedMockserverContainer extends AbstractStartedContainer { } getSecureUrl(): string { - return `https://${this.getHost()}:${this.getFirstMappedPort()}` + return `https://${this.getHost()}:${this.getFirstMappedPort()}`; } }