From e06fc99d20cf3e451cfd5544d65c07539e64aafb Mon Sep 17 00:00:00 2001 From: Connie Date: Tue, 2 Jul 2024 14:08:27 -0700 Subject: [PATCH 1/8] Specify mcr registry to use. --- .../jedis/AzureRedisAutoConfigurationTestContainerTest.java | 6 +++++- .../src/test/resources/testcontainers.properties | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/testcontainers.properties diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index 469a1702c6a5..0b344f001675 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -42,9 +42,13 @@ public class AzureRedisAutoConfigurationTestContainerTest { private static final String REDIS_PASSWORD = "fake-testcontainer-password"; + + /** + * Pulling Docker registry name from testcontainers.properties file as prefix. + */ @Container private static GenericContainer redis = - new GenericContainer<>(DockerImageName.parse("redis:5.0.3-alpine")) + new GenericContainer<>(DockerImageName.parse("redis:6")) .withCommand("--requirepass", REDIS_PASSWORD) .withExposedPorts(6379); diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/testcontainers.properties b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/testcontainers.properties new file mode 100644 index 000000000000..129afa417c6a --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/resources/testcontainers.properties @@ -0,0 +1 @@ +hub.image.name.prefix=mcr.microsoft.com/cbl-mariner/base/ From d776e5181fc7f883a55bc71139a188c4d4014e99 Mon Sep 17 00:00:00 2001 From: Connie Date: Tue, 2 Jul 2024 14:13:58 -0700 Subject: [PATCH 2/8] Fix spelling --- .../jedis/AzureRedisAutoConfigurationTestContainerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index 0b344f001675..5a83967839a6 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -76,7 +76,7 @@ void testSetAndGet() { @Test @Order(2) - void testGetVauleAfterSet() { + void testGetValueAfterSet() { String value = (String) redisTemplate.opsForValue().get("valueMap3"); Assertions.assertEquals("map3", value); } From 6fc5aae79fd14551a0a84de154973a5660782fce Mon Sep 17 00:00:00 2001 From: Connie Date: Tue, 2 Jul 2024 14:37:54 -0700 Subject: [PATCH 3/8] Manually take care of container lifecycle. --- ...disAutoConfigurationTestContainerTest.java | 20 ++++++++++++++----- sdk/spring/tests.yml | 7 ++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index 5a83967839a6..f1a80fc9d134 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -5,12 +5,16 @@ import com.azure.identity.extensions.implementation.template.AzureAuthenticationTemplate; import com.azure.spring.cloud.autoconfigure.redis.AzureJedisPasswordlessAutoConfiguration; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -21,7 +25,6 @@ import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.testcontainers.containers.GenericContainer; -import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.utility.DockerImageName; @@ -33,6 +36,7 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) @Testcontainers +@DisabledOnOs({OS.WINDOWS, OS.MAC}) @Disabled("Disable for Container startup failed") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class AzureRedisAutoConfigurationTestContainerTest { @@ -42,16 +46,23 @@ public class AzureRedisAutoConfigurationTestContainerTest { private static final String REDIS_PASSWORD = "fake-testcontainer-password"; - /** * Pulling Docker registry name from testcontainers.properties file as prefix. */ - @Container - private static GenericContainer redis = + private final static GenericContainer redis = new GenericContainer<>(DockerImageName.parse("redis:6")) .withCommand("--requirepass", REDIS_PASSWORD) .withExposedPorts(6379); + @BeforeAll + public static void beforeAll() { + redis.start(); + } + + @AfterAll + public static void afterAll() { + redis.stop(); + } @DynamicPropertySource static void redisProperties(DynamicPropertyRegistry registry) { @@ -81,7 +92,6 @@ void testGetValueAfterSet() { Assertions.assertEquals("map3", value); } - @Configuration @Import({AzureJedisPasswordlessAutoConfiguration.class, RedisAutoConfiguration.class}) static class AzureRedisPasswordlessTestConfig { diff --git a/sdk/spring/tests.yml b/sdk/spring/tests.yml index 5c14c0309e71..f0510429b072 100644 --- a/sdk/spring/tests.yml +++ b/sdk/spring/tests.yml @@ -41,6 +41,8 @@ extends: TestName: Spring_IT TestGoals: "verify" TestOptions: "-DskipSpringITs=false" + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: UseFederatedAuth: true @@ -68,6 +70,8 @@ extends: ServiceDirectory: spring TestName: Spring_App_Config_IT TestGoals: 'verify' + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: UseFederatedAuth: true @@ -100,4 +104,5 @@ extends: TestName: 'Spring_Data_Cosmos_Integration' TestGoals: 'clean verify' TestOptions: '$(ProfileFlag)' - + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true From 5ec354feee9537002e27af5a806cdd42b2d51805 Mon Sep 17 00:00:00 2001 From: Connie Yau Date: Wed, 3 Jul 2024 15:04:32 -0700 Subject: [PATCH 4/8] Fix naming of variable. --- .../AzureRedisAutoConfigurationTestContainerTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index f1a80fc9d134..6c3e840561f6 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -49,25 +49,25 @@ public class AzureRedisAutoConfigurationTestContainerTest { /** * Pulling Docker registry name from testcontainers.properties file as prefix. */ - private final static GenericContainer redis = + private static final GenericContainer REDIS = new GenericContainer<>(DockerImageName.parse("redis:6")) .withCommand("--requirepass", REDIS_PASSWORD) .withExposedPorts(6379); @BeforeAll public static void beforeAll() { - redis.start(); + REDIS.start(); } @AfterAll public static void afterAll() { - redis.stop(); + REDIS.stop(); } @DynamicPropertySource static void redisProperties(DynamicPropertyRegistry registry) { - registry.add("spring.redis.host", redis::getHost); - registry.add("spring.redis.port", redis::getFirstMappedPort); + registry.add("spring.redis.host", REDIS::getHost); + registry.add("spring.redis.port", REDIS::getFirstMappedPort); registry.add("spring.redis.ssl", () -> false); registry.add("spring.redis.azure.passwordless-enabled", () -> true); } From 3f96fbb717c1b475916d88249067279fa35f3648 Mon Sep 17 00:00:00 2001 From: Connie Yau Date: Wed, 3 Jul 2024 17:20:33 -0700 Subject: [PATCH 5/8] Adding console.writeline. --- ...ureRedisAutoConfigurationTestContainerTest.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index 6c3e840561f6..9b91cb3c28e9 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -49,10 +49,16 @@ public class AzureRedisAutoConfigurationTestContainerTest { /** * Pulling Docker registry name from testcontainers.properties file as prefix. */ - private static final GenericContainer REDIS = - new GenericContainer<>(DockerImageName.parse("redis:6")) - .withCommand("--requirepass", REDIS_PASSWORD) - .withExposedPorts(6379); + private static final GenericContainer REDIS; + + static { + System.out.println("TESTCONTAINERS_RYUK_DISABLED value: [" + System.getenv("TESTCONTAINERS_RYUK_DISABLED") + "]"); + + REDIS = + new GenericContainer<>(DockerImageName.parse("redis:6")) + .withCommand("--requirepass", REDIS_PASSWORD) + .withExposedPorts(6379); + } @BeforeAll public static void beforeAll() { From 825e5ae538b93b7f3ec04b1e9a8a20ffedf4db8d Mon Sep 17 00:00:00 2001 From: Connie Yau Date: Wed, 3 Jul 2024 17:19:23 -0700 Subject: [PATCH 6/8] move environment variable. --- sdk/spring/tests.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/spring/tests.yml b/sdk/spring/tests.yml index f0510429b072..91153347f8a2 100644 --- a/sdk/spring/tests.yml +++ b/sdk/spring/tests.yml @@ -6,6 +6,8 @@ extends: stages: - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true UseFederatedAuth: true SupportedClouds: "Public,UsGov,China" Clouds: "Public" @@ -41,10 +43,10 @@ extends: TestName: Spring_IT TestGoals: "verify" TestOptions: "-DskipSpringITs=false" - EnvVars: - TESTCONTAINERS_RYUK_DISABLED: true - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true UseFederatedAuth: true SupportedClouds: 'Public,UsGov,China' Clouds: 'Public' @@ -70,10 +72,10 @@ extends: ServiceDirectory: spring TestName: Spring_App_Config_IT TestGoals: 'verify' - EnvVars: - TESTCONTAINERS_RYUK_DISABLED: true - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true UseFederatedAuth: true SupportedClouds: 'Public,UsGov' Clouds: 'Public' @@ -104,5 +106,3 @@ extends: TestName: 'Spring_Data_Cosmos_Integration' TestGoals: 'clean verify' TestOptions: '$(ProfileFlag)' - EnvVars: - TESTCONTAINERS_RYUK_DISABLED: true From 800a881560a8c37d839a62c04d64a3b9bfb0d831 Mon Sep 17 00:00:00 2001 From: Connie Yau Date: Fri, 5 Jul 2024 15:40:40 -0700 Subject: [PATCH 7/8] Remove Disabled annotation --- .../jedis/AzureRedisAutoConfigurationTestContainerTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java index 9b91cb3c28e9..3aabb5c7c598 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/redis/passwordless/data/jedis/AzureRedisAutoConfigurationTestContainerTest.java @@ -8,7 +8,6 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; @@ -37,7 +36,6 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) @Testcontainers @DisabledOnOs({OS.WINDOWS, OS.MAC}) -@Disabled("Disable for Container startup failed") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class AzureRedisAutoConfigurationTestContainerTest { From 425731ec8c654aa6daf6e9788817ee9a71e4b4cd Mon Sep 17 00:00:00 2001 From: Connie Yau Date: Fri, 5 Jul 2024 16:10:02 -0700 Subject: [PATCH 8/8] Add prebuild step to set env variable. --- sdk/spring/ci.yml | 6 ++++++ sdk/spring/pipeline/compatibility-tests-job.yml | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/sdk/spring/ci.yml b/sdk/spring/ci.yml index a2b8331647c6..bbb6108542c0 100644 --- a/sdk/spring/ci.yml +++ b/sdk/spring/ci.yml @@ -600,3 +600,9 @@ extends: skipPublishDocGithubIo: true skipPublishDocMs: true releaseInBatch: ${{ parameters.release_springcloudazurestarterappconfigurationconfig }} + PreBuildSteps: + # AzureRedisAutoConfigurationTestContainerTest pulls in `ryuk` image because of testcontainers dependency. + # `ryuk` does not exist in mcr.microsoft.com image repository. Do not pull image. + - bash: | + echo "##vso[task.setvariable variable=TESTCONTAINERS_RYUK_DISABLED;]true" + displayName: 'Disable testcontainers ryuk' diff --git a/sdk/spring/pipeline/compatibility-tests-job.yml b/sdk/spring/pipeline/compatibility-tests-job.yml index 5756f8f36fd6..4761c9d0818e 100644 --- a/sdk/spring/pipeline/compatibility-tests-job.yml +++ b/sdk/spring/pipeline/compatibility-tests-job.yml @@ -24,6 +24,11 @@ jobs: - script: | python -m pip install termcolor displayName: 'Python module install' + # AzureRedisAutoConfigurationTestContainerTest pulls in `ryuk` image because of testcontainers dependency. + # `ryuk` does not exist in mcr.microsoft.com image repository. Do not pull image. + - bash: | + echo "##vso[task.setvariable variable=TESTCONTAINERS_RYUK_DISABLED;]true" + displayName: 'Disable testcontainers ryuk' - bash: | echo "##vso[task.setVariable variable=SPRING_CLOUD_AZURE_TEST_SUPPORTED_SPRING_CLOUD_VERSION]$(python ./sdk/spring/scripts/compatibility_get_spring_cloud_version.py -b $(SPRING_CLOUD_AZURE_TEST_SUPPORTED_SPRING_BOOT_VERSION))" displayName: 'Set env'