From 635cb472809389dfe7264e8969ec1b6b8e727806 Mon Sep 17 00:00:00 2001 From: Ga Lam CHOI Date: Mon, 5 Apr 2021 18:44:59 +0900 Subject: [PATCH] [#7666] Added oracle container wait strategy --- plugins-it/oracledb-it/pom.xml | 1 + .../jdbc/oracle/Oracle11_Ojdbc6_IT.java | 2 +- .../jdbc/oracle/Oracle12_18_Ojdbc8_IT.java | 8 ++++-- .../jdbc/oracle/Oracle19_Ojdbc10_IT.java | 6 +++-- ...jdbc10_IT_ConnectWithGssCredential_IT.java | 3 ++- ...19_Ojdbc8_ConnectWithGssCredential_IT.java | 6 +++-- .../jdbc/oracle/Oracle19_Ojdbc8_IT.java | 6 +++-- .../jdbc/oracle/OracleContainerWithWait.java | 22 +++++++++++++++ .../plugin/jdbc/oracle/Oracle_IT_Base.java | 27 ++++++++++++++++--- 9 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OracleContainerWithWait.java diff --git a/plugins-it/oracledb-it/pom.xml b/plugins-it/oracledb-it/pom.xml index 905d78683a..0f69148b68 100644 --- a/plugins-it/oracledb-it/pom.xml +++ b/plugins-it/oracledb-it/pom.xml @@ -31,6 +31,7 @@ 1.8 ${env.JAVA_8_HOME} + true diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle11_Ojdbc6_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle11_Ojdbc6_IT.java index ff20c1d92e..f476162052 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle11_Ojdbc6_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle11_Ojdbc6_IT.java @@ -40,7 +40,7 @@ public class Oracle11_Ojdbc6_IT extends Oracle_IT_Base { @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_11_X_IMAGE, logger); + startOracleDB(OracleITConstants.ORACLE_11_X_IMAGE); helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle12_18_Ojdbc8_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle12_18_Ojdbc8_IT.java index 128414b62e..bbd0ef2dfd 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle12_18_Ojdbc8_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle12_18_Ojdbc8_IT.java @@ -18,10 +18,12 @@ package com.navercorp.pinpoint.plugin.jdbc.oracle; import com.navercorp.pinpoint.pluginit.jdbc.*; import com.navercorp.pinpoint.pluginit.utils.AgentPath; import com.navercorp.pinpoint.test.plugin.*; -import org.junit.*; +import org.junit.BeforeClass; +import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.wait.strategy.Wait; @RunWith(PinpointPluginTestSuite.class) @PinpointAgent(AgentPath.PATH) @@ -34,7 +36,9 @@ public class Oracle12_18_Ojdbc8_IT extends Oracle_IT_Base{ @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_12_X_IMAGE, logger); + + startOracleDB(OracleITConstants.ORACLE_12_X_IMAGE, Wait.forLogMessage(".*Database ready to use.*\\n", 1)); + helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT.java index ac2c090b06..bf77c7be5b 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT.java @@ -18,10 +18,12 @@ package com.navercorp.pinpoint.plugin.jdbc.oracle; import com.navercorp.pinpoint.pluginit.jdbc.*; import com.navercorp.pinpoint.pluginit.utils.AgentPath; import com.navercorp.pinpoint.test.plugin.*; -import org.junit.*; +import org.junit.BeforeClass; +import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.wait.strategy.Wait; @RunWith(PinpointPluginTestSuite.class) @PinpointAgent(AgentPath.PATH) @@ -35,7 +37,7 @@ public class Oracle19_Ojdbc10_IT extends Oracle_IT_Base { @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, logger); + startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, Wait.forLogMessage(".*Completed.*", 1)); helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT_ConnectWithGssCredential_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT_ConnectWithGssCredential_IT.java index 783bafb798..2b67558683 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT_ConnectWithGssCredential_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc10_IT_ConnectWithGssCredential_IT.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.wait.strategy.Wait; @RunWith(PinpointPluginTestSuite.class) @PinpointAgent(AgentPath.PATH) @@ -36,7 +37,7 @@ public class Oracle19_Ojdbc10_IT_ConnectWithGssCredential_IT extends Oracle_IT_B @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, logger); + startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, Wait.forLogMessage(".*Completed.*", 1)); helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_ConnectWithGssCredential_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_ConnectWithGssCredential_IT.java index e5b958602b..157ce28107 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_ConnectWithGssCredential_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_ConnectWithGssCredential_IT.java @@ -18,10 +18,12 @@ package com.navercorp.pinpoint.plugin.jdbc.oracle; import com.navercorp.pinpoint.pluginit.jdbc.*; import com.navercorp.pinpoint.pluginit.utils.AgentPath; import com.navercorp.pinpoint.test.plugin.*; -import org.junit.*; +import org.junit.BeforeClass; +import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.wait.strategy.Wait; @RunWith(PinpointPluginTestSuite.class) @PinpointAgent(AgentPath.PATH) @@ -34,7 +36,7 @@ public class Oracle19_Ojdbc8_ConnectWithGssCredential_IT extends Oracle_IT_Base @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, logger); + startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, Wait.forLogMessage(".*Completed.*", 1)); helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_IT.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_IT.java index d8b2c3dd81..b833786f61 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_IT.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle19_Ojdbc8_IT.java @@ -18,10 +18,12 @@ package com.navercorp.pinpoint.plugin.jdbc.oracle; import com.navercorp.pinpoint.pluginit.jdbc.*; import com.navercorp.pinpoint.pluginit.utils.AgentPath; import com.navercorp.pinpoint.test.plugin.*; -import org.junit.*; +import org.junit.BeforeClass; +import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.wait.strategy.Wait; @RunWith(PinpointPluginTestSuite.class) @PinpointAgent(AgentPath.PATH) @@ -34,7 +36,7 @@ public class Oracle19_Ojdbc8_IT extends Oracle_IT_Base { @BeforeClass public static void setup() throws Exception { logger.info("Setting up oracle db..."); - startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, logger); + startOracleDB(OracleITConstants.ORACLE_18_X_IMAGE, Wait.forLogMessage(".*Completed.*", 1)); helper.create(JDBC_API); } diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OracleContainerWithWait.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OracleContainerWithWait.java new file mode 100644 index 0000000000..9d82e35311 --- /dev/null +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/OracleContainerWithWait.java @@ -0,0 +1,22 @@ +package com.navercorp.pinpoint.plugin.jdbc.oracle; + +import org.testcontainers.containers.OracleContainer; +import org.testcontainers.containers.wait.strategy.WaitStrategy; + +public class OracleContainerWithWait extends OracleContainer { + public OracleContainerWithWait(String dockerImageVersion) { + super(dockerImageVersion); + } + + @Override + protected void waitUntilContainerStarted() { + // wait for Oracle to be fully initialized + WaitStrategy waitStrategy = getWaitStrategy(); + if (waitStrategy != null) { + waitStrategy.waitUntilReady(this); + } + + // now, the JDBC connection should definitely work without lots of wasteful polling + super.waitUntilContainerStarted(); + } +} diff --git a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle_IT_Base.java b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle_IT_Base.java index 97bb3c47ff..18cc39ee24 100644 --- a/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle_IT_Base.java +++ b/plugins-it/oracledb-it/src/test/java/com/navercorp/pinpoint/plugin/jdbc/oracle/Oracle_IT_Base.java @@ -23,21 +23,40 @@ import org.junit.Before; import org.slf4j.Logger; import org.testcontainers.DockerClientFactory; import org.testcontainers.containers.OracleContainer; +import org.testcontainers.containers.startupcheck.MinimumDurationRunningStartupCheckStrategy; +import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy; +import org.testcontainers.containers.wait.strategy.WaitStrategy; import java.sql.Driver; import java.sql.DriverManager; +import java.time.Duration; import java.util.Properties; public abstract class Oracle_IT_Base { private static final JDBCDriverClass driverClass = new OracleJDBCDriverClass(); protected static final OracleJDBCApi JDBC_API = new OracleJDBCApi(driverClass); protected static OracleItHelper helper; - public static OracleContainer oracle; + public static OracleContainerWithWait oracle; - public static void startOracleDB(String dockerImageVersion, Logger logger) { - Assume.assumeTrue("Docker not enabled", DockerClientFactory.instance().isDockerAvailable()); + public static void startOracleDB(String dockerImageVersion) { + oracle = new OracleContainerWithWait(dockerImageVersion); + startOracleDBContainer(); + } + + public static void startOracleDB(String dockerImageVersion, WaitStrategy waitStrategy) { + oracle = new OracleContainerWithWait(dockerImageVersion); + + if (waitStrategy != null) { + oracle.setWaitStrategy(waitStrategy); + oracle.withStartupTimeout(Duration.ofSeconds(180)); + oracle.withReuse(true); + } + + startOracleDBContainer(); + } - oracle = new OracleContainer(dockerImageVersion); + private static void startOracleDBContainer() { + Assume.assumeTrue("Docker not enabled", DockerClientFactory.instance().isDockerAvailable()); oracle.start(); DriverProperties driverProperties = new DriverProperties(oracle.getJdbcUrl(), oracle.getUsername(), oracle.getPassword(), new Properties()); -- GitLab