diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 19b38e891..f71826201 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -44,7 +44,7 @@ jobs: - name: Set up Docker Compose environment run: | mkdir -m 777 $REDIS_ENV_WORK_DIR - make docker-start + make start env: REDIS_ENV_WORK_DIR: ${{ github.workspace }}/work - name: Maven offline diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index f4ebe1dc9..289a2b568 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -31,20 +31,6 @@ jobs: REDIS_ENV_WORK_DIR: ${{ github.workspace }}/work steps: - - name: Test Redis Server Version - id: map-tags - run: | - # Map requested version to github or tag - case "${{ matrix.redis_version }}" in - "8.0") redis_branch="8.0" stack_version="8.0-M04-pre" redis_test_version="8.0-M04-pre";; - "7.4") redis_branch="7.4" stack_version="rs-7.4.0-v2" redis_test_version="7.4.2";; - "7.2") redis_branch="7.2" stack_version="rs-7.2.0-v14" redis_test_version="7.2.7";; - *) echo "Unsupported version: ${{ matrix.redis_version }}" && exit 1 ;; - esac - # Save them as outputs for later use - echo "redis_branch=$redis_branch" >> $GITHUB_OUTPUT - echo "redis_stack_version=$stack_version" >> $GITHUB_OUTPUT - echo "redis_test_version=$redis_test_version" >> $GITHUB_OUTPUT - name: Checkout project uses: actions/checkout@v4 - name: Set Java up in the runner @@ -63,8 +49,7 @@ jobs: - name: Set up Docker Compose environment run: | mkdir -m 777 $REDIS_ENV_WORK_DIR - export REDIS_VERSION="${{ steps.map-tags.outputs.redis_test_version }}" - make docker-start version=$REDIS_VERSION + make start version=${{ matrix.redis_version }} - name: Maven offline run: | mvn -q dependency:go-offline @@ -76,7 +61,6 @@ jobs: ls -la $TEST_WORK_FOLDER make test-coverage env: - REDIS_STACK_VERSION: ${{ steps.map-tags.outputs.redis_stack_version }} JVM_OPTS: -Xmx3200m TERM: dumb - name: Tear down Docker Compose environment diff --git a/Makefile b/Makefile index ec7f08840..6df7a01fe 100644 --- a/Makefile +++ b/Makefile @@ -2,11 +2,11 @@ SHELL := /bin/bash PATH := ./work/redis-git/src:${PATH} ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) PROFILE ?= ci -SUPPORTED_TEST_ENV_VERSIONS := 8.0-M04-pre 7.4.2 7.2.7 -DEFAULT_TEST_ENV_VERSION := 8.0-M04-pre +SUPPORTED_TEST_ENV_VERSIONS := 8.0 7.4 7.2 +DEFAULT_TEST_ENV_VERSION := 8.0 REDIS_ENV_WORK_DIR := $(or ${REDIS_ENV_WORK_DIR},$(ROOT_DIR)/work) -docker-start: +start: @if [ -z "$(version)" ]; then \ version=$(arg); \ if [ -z "$$version" ]; then \ @@ -27,18 +27,17 @@ docker-start: echo "Environment work directory: $(REDIS_ENV_WORK_DIR)"; \ rm -rf "$(REDIS_ENV_WORK_DIR)"; \ mkdir -p "$(REDIS_ENV_WORK_DIR)"; \ - export REDIS_VERSION=$$version && \ docker compose $$env_files -f src/test/resources/docker-env/docker-compose.yml up -d; \ echo "Started test environment with Redis version $$version." -docker-test: +test: mvn -DskipITs=false clean compile verify -P$(PROFILE) test-coverage: mvn -DskipITs=false clean compile verify jacoco:report -P$(PROFILE) -docker-stop: +stop: docker compose --env-file src/test/resources/docker-env/.env -f src/test/resources/docker-env/docker-compose.yml down; \ rm -rf "$(REDIS_ENV_WORK_DIR)" diff --git a/README.md b/README.md index d06e87be9..374cc9893 100644 --- a/README.md +++ b/README.md @@ -162,12 +162,12 @@ To build: ``` $ git clone https://github.com/redis/lettuce.git $ cd lettuce/ -$ make docker-start +$ make start ``` -* Run the build: ```make docker-test``` -* Start Redis (manually): ```make docker-start``` -* Stop Redis (manually): ```make docker-stop``` +* Run the build: ```make test``` +* Start Redis (manually): ```make start``` +* Stop Redis (manually): ```make stop``` * Clean up: ```make clean``` Bugs and Feedback diff --git a/src/test/java/io/lettuce/core/RedisContainerIntegrationTests.java b/src/test/java/io/lettuce/core/RedisContainerIntegrationTests.java deleted file mode 100644 index caa258f74..000000000 --- a/src/test/java/io/lettuce/core/RedisContainerIntegrationTests.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2024, Redis Ltd. and Contributors - * All rights reserved. - * - * Licensed under the MIT License. - */ - -package io.lettuce.core; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.junit.jupiter.api.BeforeAll; -import org.testcontainers.containers.ComposeContainer; -import org.testcontainers.containers.output.OutputFrame; -import org.testcontainers.containers.wait.strategy.Wait; -import org.testcontainers.junit.jupiter.Testcontainers; - -import java.io.File; - -@Testcontainers -public class RedisContainerIntegrationTests { - - private static final Logger LOGGER = LogManager.getLogger(RedisContainerIntegrationTests.class); - - private static final String REDIS_STACK_STANDALONE = "standalone-stack"; - - private static final String REDIS_STACK_CLUSTER = "clustered-stack"; - - private static final String REDIS_STACK_VERSION = System.getProperty("REDIS_STACK_VERSION"); - - private static Exception initializationException; - - public static ComposeContainer CLUSTERED_STACK = new ComposeContainer( - new File("src/test/resources/docker/docker-compose.yml")).withExposedService(REDIS_STACK_CLUSTER, 36379) - .withExposedService(REDIS_STACK_CLUSTER, 36380).withExposedService(REDIS_STACK_CLUSTER, 36381) - .withExposedService(REDIS_STACK_STANDALONE, 6379).withPull(false).withLocalCompose(true); - - // Singleton container pattern - start the containers only once - // See https://java.testcontainers.org/test_framework_integration/manual_lifecycle_control/#singleton-containers - static { - int attempts = 0; - - if (REDIS_STACK_VERSION != null && !REDIS_STACK_VERSION.isEmpty()) { - CLUSTERED_STACK.withEnv("REDIS_VERSION", REDIS_STACK_VERSION); - } - // In case you need to debug the container uncomment these lines to redirect the output - CLUSTERED_STACK.withLogConsumer(REDIS_STACK_CLUSTER, (OutputFrame frame) -> LOGGER.debug(frame.getUtf8String())); - CLUSTERED_STACK.withLogConsumer(REDIS_STACK_STANDALONE, (OutputFrame frame) -> LOGGER.debug(frame.getUtf8String())); - - CLUSTERED_STACK.waitingFor(REDIS_STACK_CLUSTER, Wait.forLogMessage("Cluster created with nodes:.*", 1)); - do { - try { - CLUSTERED_STACK.start(); - } catch (Exception e) { - initializationException = e; - } - // Attempt to stabilize the pipeline - sometime the `docker compose up` fails randomly - } while (initializationException != null && attempts++ < 3); - } - - @BeforeAll - public static void checkContainerInitialization() { - if (initializationException != null) { - throw new IllegalStateException("Failed to initialize containers", initializationException); - } - } - -} diff --git a/src/test/resources/docker-env/.env b/src/test/resources/docker-env/.env index b294422b6..2922382cf 100644 --- a/src/test/resources/docker-env/.env +++ b/src/test/resources/docker-env/.env @@ -1,2 +1,3 @@ REDIS_ENV_WORK_DIR=../../../../work/docker REDIS_VERSION=8.0-M04-pre +REDIS_STACK_VERSION=8.0-M04-pre \ No newline at end of file diff --git a/src/test/resources/docker-env/.env.v7.2 b/src/test/resources/docker-env/.env.v7.2 new file mode 100644 index 000000000..35a627f2d --- /dev/null +++ b/src/test/resources/docker-env/.env.v7.2 @@ -0,0 +1,3 @@ +REDIS_ENV_WORK_DIR=../../../../work/docker +REDIS_VERSION=7.2.7 +REDIS_STACK_VERSION=rs-7.2.0-v14 \ No newline at end of file diff --git a/src/test/resources/docker-env/.env.v7.4 b/src/test/resources/docker-env/.env.v7.4 new file mode 100644 index 000000000..68aba20a3 --- /dev/null +++ b/src/test/resources/docker-env/.env.v7.4 @@ -0,0 +1,3 @@ +REDIS_ENV_WORK_DIR=../../../../work/docker +REDIS_VERSION=7.4.2 +REDIS_STACK_VERSION=rs-7.4.0-v2 \ No newline at end of file diff --git a/src/test/resources/docker/docker-compose.yml b/src/test/resources/docker/docker-compose.yml deleted file mode 100644 index 58a83da33..000000000 --- a/src/test/resources/docker/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -x-client-libs-stack-image: &client-libs-stack-image - image: "redislabs/client-libs-test:${REDIS_STACK_VERSION:-8.0-M04-pre}" - -services: - - standalone-stack: - <<: *client-libs-stack-image - environment: - - REDIS_CLUSTER=no - - PORT=6379 - ports: - - "16379:6379" - - clustered-stack: - <<: *client-libs-stack-image - environment: - - REDIS_CLUSTER=yes - - PORT=36379 - ports: - - "36379-36381:36379-36381" \ No newline at end of file