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' 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..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 @@ -5,12 +5,15 @@ 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.Disabled; +import org.junit.jupiter.api.BeforeAll; 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 +24,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,7 +35,7 @@ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) @Testcontainers -@Disabled("Disable for Container startup failed") +@DisabledOnOs({OS.WINDOWS, OS.MAC}) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class AzureRedisAutoConfigurationTestContainerTest { @@ -42,17 +44,34 @@ public class AzureRedisAutoConfigurationTestContainerTest { private static final String REDIS_PASSWORD = "fake-testcontainer-password"; - @Container - private static GenericContainer redis = - new GenericContainer<>(DockerImageName.parse("redis:5.0.3-alpine")) - .withCommand("--requirepass", REDIS_PASSWORD) - .withExposedPorts(6379); + /** + * Pulling Docker registry name from testcontainers.properties file as prefix. + */ + 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() { + REDIS.start(); + } + + @AfterAll + public static void afterAll() { + 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); } @@ -72,12 +91,11 @@ void testSetAndGet() { @Test @Order(2) - void testGetVauleAfterSet() { + void testGetValueAfterSet() { String value = (String) redisTemplate.opsForValue().get("valueMap3"); Assertions.assertEquals("map3", value); } - @Configuration @Import({AzureJedisPasswordlessAutoConfiguration.class, RedisAutoConfiguration.class}) static class AzureRedisPasswordlessTestConfig { 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/ diff --git a/sdk/spring/tests.yml b/sdk/spring/tests.yml index 5c14c0309e71..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" @@ -43,6 +45,8 @@ extends: TestOptions: "-DskipSpringITs=false" - 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,6 +74,8 @@ extends: TestGoals: 'verify' - template: /eng/pipelines/templates/stages/archetype-sdk-tests-isolated.yml parameters: + EnvVars: + TESTCONTAINERS_RYUK_DISABLED: true UseFederatedAuth: true SupportedClouds: 'Public,UsGov' Clouds: 'Public' @@ -100,4 +106,3 @@ extends: TestName: 'Spring_Data_Cosmos_Integration' TestGoals: 'clean verify' TestOptions: '$(ProfileFlag)' -