From 248e8be5cb16ad3e3c0949669c3e43f64c7834cb Mon Sep 17 00:00:00 2001 From: Dariusz Czajkiewicz Date: Mon, 24 Feb 2025 09:22:49 +0100 Subject: [PATCH] test containers --- README.md | 10 +++++- .../BaseContainersTest.java | 4 +-- .../infrastructure/Configuration.java | 4 +-- .../infrastructure/network/TestNetwork.java | 4 +-- .../resources/MyTestResources.java | 34 +++++++++++-------- .../resources/containers}/MyMockServer.java | 13 +++++-- .../containers}/MyMockServerClient.java | 9 ++--- .../containers}/RawmindWebContainer.java | 11 +++--- .../DemoWebContainersTest.java | 4 +-- .../page/TestContainersDemoPage.java | 2 +- 10 files changed, 56 insertions(+), 39 deletions(-) rename mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/{containers => base}/BaseContainersTest.java (73%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{ => framework/playwright}/infrastructure/Configuration.java (89%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{ => framework/playwright}/infrastructure/network/TestNetwork.java (91%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{ => framework/playwright}/infrastructure/resources/MyTestResources.java (60%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{infrastructure/resources => framework/playwright/infrastructure/resources/containers}/MyMockServer.java (68%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{infrastructure/resources => framework/playwright/infrastructure/resources/containers}/MyMockServerClient.java (93%) rename mrchecker-playwright-framework/src/test/java/com/capgemini/{infrastructure/resources => framework/playwright/infrastructure/resources/containers}/RawmindWebContainer.java (82%) diff --git a/README.md b/README.md index 87dab06a..1ceca1a2 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,15 @@ This repository includes: Easy adoption, ready-to-use assets, skilled workforce, years of collective experience, skilled architects - +## Mr. Checker Test Containers support +***Docker environment is needed to run TestContainers*** +* Running tests with Test Containers requires: + * Adding container to resources in **MyTestResources** class + * Extending test with the **BaseContainersTest** +* Using Mock server + * Mock server starts as part of TestContainers tests + * Mocking server rules can be set in the **MyMockServerClient** class + * Examples included in the **MyMockServerClient** class diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/containers/BaseContainersTest.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/base/BaseContainersTest.java similarity index 73% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/containers/BaseContainersTest.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/base/BaseContainersTest.java index 95bb3105..c90b7e03 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/containers/BaseContainersTest.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/base/BaseContainersTest.java @@ -1,7 +1,7 @@ -package com.capgemini.framework.playwright.containers; +package com.capgemini.framework.playwright.base; import com.capgemini.framework.playwright.BaseTest; -import com.capgemini.infrastructure.resources.MyTestResources; +import com.capgemini.framework.playwright.infrastructure.resources.MyTestResources; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import org.testcontainers.junit.jupiter.Testcontainers; diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/Configuration.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/Configuration.java similarity index 89% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/Configuration.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/Configuration.java index 132c125c..8468ceb2 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/Configuration.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/Configuration.java @@ -1,6 +1,6 @@ -package com.capgemini.infrastructure; +package com.capgemini.framework.playwright.infrastructure; -import com.capgemini.infrastructure.resources.MyMockServer; +import com.capgemini.framework.playwright.infrastructure.resources.containers.MyMockServer; import org.apache.commons.lang3.StringUtils; import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.ConfigProvider; diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/network/TestNetwork.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/network/TestNetwork.java similarity index 91% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/network/TestNetwork.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/network/TestNetwork.java index 42fe30dc..154b3111 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/network/TestNetwork.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/network/TestNetwork.java @@ -1,6 +1,6 @@ -package com.capgemini.infrastructure.network; +package com.capgemini.framework.playwright.infrastructure.network; -import com.capgemini.infrastructure.Configuration; +import com.capgemini.framework.playwright.infrastructure.Configuration; import org.junit.runner.Description; import org.junit.runners.model.Statement; import org.testcontainers.DockerClientFactory; diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyTestResources.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/MyTestResources.java similarity index 60% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyTestResources.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/MyTestResources.java index 86464cdf..f7043afd 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyTestResources.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/MyTestResources.java @@ -1,7 +1,10 @@ -package com.capgemini.infrastructure.resources; +package com.capgemini.framework.playwright.infrastructure.resources; -import com.capgemini.infrastructure.Configuration; -import com.capgemini.infrastructure.network.TestNetwork; +import com.capgemini.framework.playwright.infrastructure.Configuration; +import com.capgemini.framework.playwright.infrastructure.network.TestNetwork; +import com.capgemini.framework.playwright.infrastructure.resources.containers.MyMockServer; +import com.capgemini.framework.playwright.infrastructure.resources.containers.MyMockServerClient; +import com.capgemini.framework.playwright.infrastructure.resources.containers.RawmindWebContainer; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.GenericContainer; @@ -11,7 +14,6 @@ import java.util.Map; public class MyTestResources implements QuarkusTestResourceLifecycleManager { - // private final Network network = TestNetwork.getInstance().getNetwork(); private final Network network = TestNetwork.createReusableNetwork(); private RawmindWebContainer rawmindWebContainer = null; private MyMockServer myMockServer = null; @@ -28,14 +30,12 @@ public Map start() { } private void startMockServer() { - if (myMockServer == null || !isContainerRunning(Configuration.MY_MOCK_NAME)) { + if (myMockServer == null || isContainerNotRunning(Configuration.MY_MOCK_NAME)) { myMockServer = new MyMockServer(network); if (!myMockServer.isRunning()) { myMockServer.start(); } - if (!myMockServer.getContainerName().contains(Configuration.MY_MOCK_NAME)) { - myMockServer.withCreateContainerCmdModifier(cmd -> cmd.withName(Configuration.MY_MOCK_NAME)); - } + renameContainerIfNeeded(myMockServer, Configuration.MY_MOCK_NAME); } Configuration.getInstance().setMyMockServer(myMockServer); } @@ -45,24 +45,28 @@ private void startMockClient() { } private void startWebServer() { - if (rawmindWebContainer == null || !isContainerRunning(Configuration.MY_WEB_APP_NAME)) { + if (rawmindWebContainer == null || isContainerNotRunning(Configuration.MY_WEB_APP_NAME)) { rawmindWebContainer = new RawmindWebContainer(network); if (!rawmindWebContainer.isRunning()) { rawmindWebContainer.start(); } - if (!rawmindWebContainer.getContainerName().contains(Configuration.MY_WEB_APP_NAME)) { - rawmindWebContainer.withCreateContainerCmdModifier(cmd -> cmd.withName(Configuration.MY_WEB_APP_NAME)); - } + renameContainerIfNeeded(rawmindWebContainer, Configuration.MY_WEB_APP_NAME); } Configuration.getInstance().setMyWebAppUrl(rawmindWebContainer.getUrl()); } - private boolean isContainerRunning(String containerName) { + private void renameContainerIfNeeded(GenericContainer container, String containerName) { + if (container.getContainerName().contains(containerName)) { + container.withCreateContainerCmdModifier(cmd -> cmd.withName(containerName)); + } + } + + private boolean isContainerNotRunning(String containerName) { return DockerClientFactory.instance().client().listContainersCmd() .withShowAll(true) .exec() .stream() - .anyMatch(container -> container.getNames()[0].contains(containerName)); + .noneMatch(container -> container.getNames()[0].contains(containerName)); } @Override @@ -73,7 +77,7 @@ public void stop() { } } - private void stopContainer(GenericContainer container) { + private void stopContainer(GenericContainer container) { if (container != null) { container.stop(); } diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServer.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServer.java similarity index 68% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServer.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServer.java index c76df2a5..f92dfad4 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServer.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServer.java @@ -1,6 +1,8 @@ -package com.capgemini.infrastructure.resources; +package com.capgemini.framework.playwright.infrastructure.resources.containers; -import com.capgemini.infrastructure.Configuration; +import com.capgemini.framework.playwright.infrastructure.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.testcontainers.containers.MockServerContainer; import org.testcontainers.containers.Network; import org.testcontainers.utility.DockerImageName; @@ -11,16 +13,20 @@ public class MyMockServer extends MockServerContainer { private static final String NETWORK_ALIAS = "mock-server"; + private static final Logger log = LoggerFactory.getLogger(MyMockServer.class); public MyMockServer(Network network) { super(DockerImageName.parse("mockserver/mockserver")); + withReuse(Configuration.DEBUG); withNetwork(network) .withNetworkAliases(NETWORK_ALIAS) .withNetworkMode(Configuration.MY_TEST_NETWORK_NAME) .withLabel("reuse-id", Configuration.MY_MOCK_NAME) .withExposedPorts(1080) - .withStartupTimeout(Duration.ofMinutes(2)); + .withStartupTimeout(Duration.ofMinutes(2)) + .withEnv("mockserver.logLevel", "none") + .withLogConsumer(containerLog -> log.info(containerLog.getUtf8String())); withCreateContainerCmdModifier(cmd -> cmd.withName(Configuration.MY_MOCK_NAME)); setPortBindings(Arrays.asList("1080:1080")); } @@ -30,6 +36,7 @@ public MyMockServer withReuse(boolean reusable) { if (reusable) { var aliases = new ArrayList(); aliases.add(NETWORK_ALIAS); + aliases.add(Configuration.MY_MOCK_NAME); this.setNetworkAliases(aliases); } return (MyMockServer) super.withReuse(reusable); diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServerClient.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServerClient.java similarity index 93% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServerClient.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServerClient.java index ef7f7ad0..69c24755 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/MyMockServerClient.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/MyMockServerClient.java @@ -1,6 +1,6 @@ -package com.capgemini.infrastructure.resources; +package com.capgemini.framework.playwright.infrastructure.resources.containers; -import com.capgemini.infrastructure.Configuration; +import com.capgemini.framework.playwright.infrastructure.Configuration; import org.mockserver.client.MockServerClient; import org.mockserver.matchers.TimeToLive; import org.mockserver.matchers.Times; @@ -32,11 +32,11 @@ public static MyMockServerClient getInstance() { } public void startMockClient() { + // Dashboard link: http://localhost:1080/mockserver/dashboard try { mockServerClient = new MockServerClient(mockServer.getHost(), mockServer.getServerPort()); - // Add rule by file - // http://localhost:1080/mockserver/dashboard + // Add rule by file with response // http://localhost:1080/my-api/sample-1 addRule("/my-api/sample-1", "sample-mock-response-1.json"); addRule("/my-api/sample-2", "sample-mock-response-2.json"); @@ -49,6 +49,7 @@ public void startMockClient() { )); // Add text response + // http://localhost:1080/my-api/sample-text-4 addRuleTxt("/my-api/sample-text-4", "Fourth sample response"); logger.info("Mock URL: {}:{}", mockServer.getHost(), mockServer.getServerPort()); diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/RawmindWebContainer.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/RawmindWebContainer.java similarity index 82% rename from mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/RawmindWebContainer.java rename to mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/RawmindWebContainer.java index e6ee936d..ed959618 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/infrastructure/resources/RawmindWebContainer.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/framework/playwright/infrastructure/resources/containers/RawmindWebContainer.java @@ -1,10 +1,6 @@ -package com.capgemini.infrastructure.resources; +package com.capgemini.framework.playwright.infrastructure.resources.containers; -import com.capgemini.infrastructure.Configuration; -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.PortBinding; -import com.github.dockerjava.api.model.Ports; +import com.capgemini.framework.playwright.infrastructure.Configuration; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.wait.strategy.Wait; @@ -29,7 +25,7 @@ public RawmindWebContainer(Network network) { .waitingFor(Wait.forLogMessage(".*Running web-test service.*", 1)) .withStartupTimeout(java.time.Duration.ofSeconds(20)); withCreateContainerCmdModifier(cmd -> cmd.withName(Configuration.MY_WEB_APP_NAME)); - setPortBindings(Arrays.asList("8080:8080")); + setPortBindings(Arrays.asList(APP_PORT+":"+APP_PORT)); logger().info("RawmindWebContainer starting..."); } @@ -42,6 +38,7 @@ public RawmindWebContainer withReuse(boolean reusable) { if (reusable) { var aliases = new ArrayList(); aliases.add(NETWORK_ALIAS); + aliases.add(Configuration.MY_WEB_APP_NAME); this.setNetworkAliases(aliases); } return (RawmindWebContainer) super.withReuse(reusable); diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/DemoWebContainersTest.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/DemoWebContainersTest.java index d5c3397e..b26bafe0 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/DemoWebContainersTest.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/DemoWebContainersTest.java @@ -1,7 +1,7 @@ package com.capgemini.frameworkExamples; import com.capgemini.framework.enums.PrjEpics; -import com.capgemini.framework.playwright.containers.BaseContainersTest; +import com.capgemini.framework.playwright.base.BaseContainersTest; import com.capgemini.framework.tags.Status; import com.capgemini.frameworkExamples.page.TestContainersDemoPage; import io.qameta.allure.Description; @@ -17,7 +17,7 @@ @QuarkusTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) class DemoWebContainersTest extends BaseContainersTest { - private TestContainersDemoPage testContainersDemoPage = new TestContainersDemoPage(); + private final TestContainersDemoPage testContainersDemoPage = new TestContainersDemoPage(); @TmsLink("Test Management System ID") @Epic(PrjEpics.EXAMPLES) diff --git a/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/page/TestContainersDemoPage.java b/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/page/TestContainersDemoPage.java index ea37c6c7..e72223e2 100644 --- a/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/page/TestContainersDemoPage.java +++ b/mrchecker-playwright-framework/src/test/java/com/capgemini/frameworkExamples/page/TestContainersDemoPage.java @@ -1,7 +1,7 @@ package com.capgemini.frameworkExamples.page; import com.capgemini.framework.logger.AllureStepLogger; -import com.capgemini.infrastructure.Configuration; +import com.capgemini.framework.playwright.infrastructure.Configuration; import com.microsoft.playwright.Page; import com.microsoft.playwright.options.AriaRole; import org.slf4j.Logger;