diff --git a/docs/modules/redis.md b/docs/modules/redis.md index 63279a906..b6468fe5b 100644 --- a/docs/modules/redis.md +++ b/docs/modules/redis.md @@ -11,21 +11,37 @@ npm install @testcontainers/redis --save-dev ## Examples + [Start container:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:startContainer + + [Connect redis client to container:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:simpleConnect + + [Start container with password authentication:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:startWithCredentials + + [Define volume for persistent/predefined data:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:persistentData + + +[Start container with redis/redis-stack-server image:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:startWithRedisStack + + + + + [Execute a command inside the container:](../../packages/modules/redis/src/redis-container.test.ts) inside_block:executeCommand + diff --git a/packages/modules/redis/src/redis-container.test.ts b/packages/modules/redis/src/redis-container.test.ts index 988ace1eb..86fa43ad3 100644 --- a/packages/modules/redis/src/redis-container.test.ts +++ b/packages/modules/redis/src/redis-container.test.ts @@ -102,6 +102,22 @@ describe("RedisContainer", { timeout: 240_000 }, () => { }); // } + // startWithRedisStack { + it("should start with redis-stack-server and json module", async () => { + const container = await new RedisContainer("redis/redis-stack-server:7.4.0-v4") + .withPassword("testPassword") + .start(); + const client = await connectTo(container); + + await client.json.set("key", "$", { name: "test" }); + const result = await client.json.get("key"); + expect(result).toEqual({ name: "test" }); + + await client.disconnect(); + await container.stop(); + }); + // } + // simpleConnect { async function connectTo(container: StartedRedisContainer) { const client = createClient({ diff --git a/packages/modules/redis/src/redis-container.ts b/packages/modules/redis/src/redis-container.ts index 6091872bd..314ab9ced 100644 --- a/packages/modules/redis/src/redis-container.ts +++ b/packages/modules/redis/src/redis-container.ts @@ -39,11 +39,17 @@ export class RedisContainer extends GenericContainer { } public override async start(): Promise { - this.withCommand([ - "redis-server", - ...(this.password ? [`--requirepass "${this.password}"`] : []), + const redisArgs = [ + ...(this.password ? [`--requirepass ${this.password}`] : []), ...(this.persistenceVolume ? ["--save 1 1 ", "--appendonly yes"] : []), - ]); + ]; + if (this.imageName.image.includes("redis-stack")) { + this.withEnvironment({ + REDIS_ARGS: redisArgs.join(" "), + }).withEntrypoint(["/entrypoint.sh"]); + } else { + this.withCommand(["redis-server", ...redisArgs]); + } if (this.persistenceVolume) { this.withBindMounts([{ mode: "rw", source: this.persistenceVolume, target: "/data" }]); }