Skip to content

Commit 8feec09

Browse files
Merge pull request #212 from codecrafters-io/docker-local-tests
Add docker file for recording fixtures and running tests
2 parents b238e55 + 1f48a18 commit 8feec09

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

docker_ci/docker-ci.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
cd "$(dirname "$0")/.."
6+
7+
# Build image
8+
docker_build() {
9+
docker build -t redis-tester -f docker_ci/ubuntu.Dockerfile .
10+
}
11+
12+
case "$1" in
13+
test)
14+
echo "🧪 Running tests using Docker container"
15+
docker_build
16+
docker run --rm -it -v "$(pwd)":/app -w /app redis-tester make test
17+
;;
18+
record_fixtures)
19+
echo "📝 Recording fixtures using Docker container"
20+
docker_build
21+
docker run --rm -it -v "$(pwd)":/app -w /app redis-tester make record_fixtures
22+
;;
23+
*)
24+
echo "Usage:"
25+
echo "$0 [test|record_fixtures]"
26+
exit 1
27+
;;
28+
esac

docker_ci/ubuntu.Dockerfile

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Use official Go 1.24 image as base
2+
FROM golang:1.24-bookworm
3+
4+
# Set environment variables
5+
ENV CGO_ENABLED=0
6+
ENV GOOS=linux
7+
ENV GOARCH=amd64
8+
9+
# Install system dependencies
10+
RUN apt-get update && apt-get install -y \
11+
curl \
12+
wget \
13+
git \
14+
build-essential \
15+
ca-certificates \
16+
gnupg \
17+
lsb-release \
18+
python3 \
19+
python3-pip \
20+
python3-venv \
21+
netcat-openbsd \
22+
&& rm -rf /var/lib/apt/lists/*
23+
24+
25+
# Install Redis
26+
RUN curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \
27+
&& chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg \
28+
&& echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list \
29+
&& apt-get update \
30+
&& apt-get install -y redis \
31+
&& rm -rf /var/lib/apt/lists/*
32+
33+
# Create workspace directory
34+
WORKDIR /workspace
35+
36+
# Copy go mod files first for better caching
37+
COPY go.mod go.sum ./
38+
39+
# Download Go dependencies
40+
RUN go mod download
41+
42+
# Copy the rest of the source code
43+
COPY . .
44+
45+
# Build the project
46+
RUN go build -o dist/main.out ./cmd/tester
47+
48+
# Expose port for Redis (if needed)
49+
EXPOSE 6379
50+
51+
# Keep the container alive
52+
CMD ["/bin/bash"]

internal/test_repl_replica_cmd_processing.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package internal
33
import (
44
"fmt"
55
"net"
6+
"time"
67

78
"github.com/codecrafters-io/redis-tester/internal/instrumented_resp_connection"
89
"github.com/codecrafters-io/redis-tester/internal/redis_executable"
@@ -81,6 +82,10 @@ func testReplCmdProcessing(stageHarness *test_case_harness.TestCaseHarness) erro
8182

8283
logger.UpdateLastSecondaryPrefix("test")
8384
replicaClient.UpdateBaseLogger(logger)
85+
// Add a small delay to wait for commands to be propagated
86+
// This was done in https://github.com/codecrafters-io/redis-tester/pull/212 to adjust fixtures
87+
// when fixtures are recorded from docker container
88+
time.Sleep(time.Millisecond)
8489

8590
for i := 1; i <= len(kvMap); i++ {
8691
key, value := kvMap[i][0], kvMap[i][1]

0 commit comments

Comments
 (0)