Running tests, builds, and the Docker stack
Tests run against a Redis stack started via Docker Compose. Profiles in docker-compose.yml control which services come up (standalone, cluster, sentinel, all, e2e, …).
Make targets
make docker.start # bring up the full test stack (profile: all)
make docker.stop
make test # docker.start -> test.ci -> docker.stop
make test.ci # run tests assuming containers are already up
make test.ci.skip-vectorsets # used when REDIS_VERSION < 8
make bench # go test -bench=. (root module only)
make fmt # gofumpt + goimports (-local github.com/redis/go-redis)
make build
make go_mod_tidy # go mod tidy across every module
The Makefile iterates over every go.mod (GO_MOD_DIRS) for test.ci, go_mod_tidy, etc.
E2E (maintenance notifications)
Needs an extra cae-resp-proxy service:
make test.e2e # auto-starts the e2e profile, runs ./maintnotifications/e2e/, tears down
make test.e2e.docker # subset that runs inside docker
make test.e2e.logic # logic-only tests, no proxy required
Env knobs (passed through the Makefile)
REDIS_VERSION— e.g.8.8. Drives both the test image tag andmain_test.goversion-gating helpers (SkipBeforeRedisVersion/SkipAfterRedisVersion).CLIENT_LIBS_TEST_IMAGE— full image ref, e.g.redislabs/client-libs-test:8.8-m03. (To change the default tag, use theupdate-ci-imageskill — it lives in several files.)RE_CLUSTER=true— point tests at a Redis Enterprise cluster instead of the docker-compose stack. The suite then skips ring/sentinel/TLS-cluster setup.RCE_DOCKER=true— using Redis CE in docker (default formake test).REDIS_PORT— override the default standalone port (6380) used bymain_test.go.
Running a single test
The root suite is Ginkgo-based (bsm/ginkgo + bsm/gomega forks). go test -run matches the Go-level wrapper, so to focus a Ginkgo spec use the Ginkgo focus flag:
go test -run TestGinkgoSuite . -ginkgo.focus="ZAdd"
go test -run TestGinkgoSuite . -ginkgo.focus="cluster"
Plain go test-style tests (most files outside the Ginkgo suite, e.g. internal/..., maintnotifications/...) work the usual way:
go test -run TestConnStateMachine ./internal/pool/...
go test -race -run TestCircuitBreaker ./maintnotifications/...
Version-gating
Gate Redis-version-specific tests with SkipBeforeRedisVersion / SkipAfterRedisVersion (driven by REDIS_VERSION) rather than skipping at the suite level.