Skip to content

Commit 58e57df

Browse files
authored
Fix checking Reaper and the SSHd containers when _HUB_IMAGE_NAME_PREFIX provided (#751)
1 parent e56ec2b commit 58e57df

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

packages/testcontainers/src/container-runtime/image-name.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ describe("ContainerImage", () => {
167167
{ customRegistry: "custom.com/registry", expectedRegistry: "custom.com", expectedImagePrefix: "registry/" },
168168
{ customRegistry: "custom.com/registry/", expectedRegistry: "custom.com", expectedImagePrefix: "registry/" },
169169
{ customRegistry: "custom.com", expectedRegistry: "custom.com", expectedImagePrefix: "" },
170+
{ customRegistry: "custom.com/", expectedRegistry: "custom.com", expectedImagePrefix: "" },
170171
{
171172
customRegistry: "custom.com/registry/with/slashes",
172173
expectedRegistry: "custom.com",

packages/testcontainers/src/container-runtime/image-name.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ export class ImageName {
1414
const prefix = process.env.TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX;
1515

1616
// Parse the registry. If it's undefined - then the whole prefix is a registry.
17-
const registry = ImageName.getRegistry(prefix);
18-
this.registry = registry ?? prefix;
17+
const parsedRegistry = ImageName.getRegistry(prefix);
18+
this.registry = parsedRegistry ?? prefix;
1919

2020
// If the registry is defined, then the imagePrefix is the rest of the prefix.
21-
const imagePrefix = registry ? prefix.substring(prefix.indexOf("/") + 1).replace(/\/?$/, "/") : "";
21+
let imagePrefix = parsedRegistry ? prefix.substring(prefix.indexOf("/") + 1) : "";
22+
if (imagePrefix) {
23+
imagePrefix = imagePrefix.replace(/\/?$/, "/");
24+
}
2225
const originalImage = this.image;
2326
this.image = `${imagePrefix}${this.image}`;
2427

packages/testcontainers/src/port-forwarder/port-forwarder.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import { createSshConnection, SshConnection } from "ssh-remote-port-forward";
22
import { GenericContainer } from "../generic-container/generic-container";
33
import { log, withFileLock } from "../common";
4-
import { ContainerRuntimeClient, getContainerRuntimeClient } from "../container-runtime";
4+
import { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "../container-runtime";
55
import { getReaper } from "../reaper/reaper";
66
import { PortWithOptionalBinding } from "../utils/port";
77
import Dockerode, { ContainerInfo } from "dockerode";
88
import { LABEL_TESTCONTAINERS_SESSION_ID, LABEL_TESTCONTAINERS_SSHD } from "../utils/labels";
99

10-
export const SSHD_IMAGE = process.env["SSHD_CONTAINER_IMAGE"] ?? "testcontainers/sshd:1.1.0";
10+
export const SSHD_IMAGE = process.env["SSHD_CONTAINER_IMAGE"]
11+
? ImageName.fromString(process.env["SSHD_CONTAINER_IMAGE"]).string
12+
: ImageName.fromString("testcontainers/sshd:1.1.0").string;
1113

1214
class PortForwarder {
1315
constructor(

packages/testcontainers/src/reaper/reaper.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ import { ContainerInfo } from "dockerode";
22
import { GenericContainer } from "../generic-container/generic-container";
33
import { Wait } from "../wait-strategies/wait";
44
import { Socket } from "net";
5-
import { ContainerRuntimeClient } from "../container-runtime";
5+
import { ContainerRuntimeClient, ImageName } from "../container-runtime";
66
import { IntervalRetry, log, RandomUuid, withFileLock } from "../common";
77
import { LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels";
88

9-
export const REAPER_IMAGE = process.env["RYUK_CONTAINER_IMAGE"] ?? "testcontainers/ryuk:0.5.1";
9+
export const REAPER_IMAGE = process.env["RYUK_CONTAINER_IMAGE"]
10+
? ImageName.fromString(process.env["RYUK_CONTAINER_IMAGE"]).string
11+
: ImageName.fromString("testcontainers/ryuk:0.5.1").string;
1012

1113
export interface Reaper {
1214
sessionId: string;

0 commit comments

Comments
 (0)