diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy index 5c3c676ea37..f962dbf19e0 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy @@ -70,10 +70,10 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { @Shared private Map jdbcUrls = [ - (POSTGRESQL): "jdbc:postgresql://localhost:5432/" + dbName.get(POSTGRESQL), - (MYSQL) : "jdbc:mysql://localhost:3306/" + dbName.get(MYSQL), - (SQLSERVER) : "jdbc:sqlserver://localhost:1433/" + dbName.get(SQLSERVER), - (ORACLE) : "jdbc:oracle:thin:@//localhost:1521/" + dbName.get(ORACLE), + (POSTGRESQL): "jdbc:postgresql://localhost:5432/${dbName.get(POSTGRESQL)}", + (MYSQL) : "jdbc:mysql://localhost:3306/${dbName.get(MYSQL)}", + (SQLSERVER) : "jdbc:sqlserver://localhost:1433/${dbName.get(SQLSERVER)}", + (ORACLE) : "jdbc:oracle:thin:@//localhost:1521/${dbName.get(ORACLE)}" ] @Shared @@ -120,14 +120,14 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { && architecture().isArm64()) } - def peerConnectionProps(DbType db){ + def peerConnectionProps(DbType db) { def props = new Properties() props.setProperty("user", jdbcUserNames.get(db)) props.setProperty("password", jdbcPasswords.get(db)) return props } - protected String getDbType(DbType dbType){ + protected String getDbType(DbType dbType) { return dbType.toString() } @@ -457,7 +457,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { resultSet.next() resultSet.getInt(1) == 3 def addDbmTag = dbmTraceInjected() - if (driver == SQLSERVER && addDbmTag){ + if (driver == SQLSERVER && addDbmTag) { assertTraces(1) { trace(3) { basicSpan(it, "parent") @@ -540,7 +540,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { if (usingHikari) { "$Tags.DB_POOL_NAME" String } - if (this.dbmTracePreparedStatements(driver)){ + if (this.dbmTracePreparedStatements(driver)) { "$InstrumentationTags.DBM_TRACE_INJECTED" true if (driver == POSTGRESQL) { "$InstrumentationTags.INSTRUMENTATION_TIME_MS" Long @@ -594,7 +594,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { resultSet.getInt(1) == 3 def addDbmTag = dbmTraceInjected() - if (driver == SQLSERVER && addDbmTag){ + if (driver == SQLSERVER && addDbmTag) { assertTraces(1) { trace(3) { basicSpan(it, "parent") @@ -679,7 +679,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { if (pool == "hikari") { "$Tags.DB_POOL_NAME" String } - if (this.dbmTracePreparedStatements(driver)){ + if (this.dbmTracePreparedStatements(driver)) { "$InstrumentationTags.DBM_TRACE_INJECTED" true if (driver == POSTGRESQL) { "$InstrumentationTags.INSTRUMENTATION_TIME_MS" Long @@ -732,7 +732,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { resultSet.next() resultSet.getInt(1) == 3 def addDbmTag = dbmTraceInjected() - if (driver == SQLSERVER && addDbmTag){ + if (driver == SQLSERVER && addDbmTag) { assertTraces(1) { trace(3) { basicSpan(it, "parent") @@ -812,7 +812,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { if (pool == "hikari") { "$Tags.DB_POOL_NAME" String } - if (this.dbmTracePreparedStatements(driver)){ + if (this.dbmTracePreparedStatements(driver)) { "$InstrumentationTags.DBM_TRACE_INJECTED" true if (driver == POSTGRESQL) { "$InstrumentationTags.INSTRUMENTATION_TIME_MS" Long @@ -1066,7 +1066,7 @@ abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { injectSysConfig("dd.dbm.propagation.mode", "full") CallableStatement proc = connection.prepareCall(query) - proc.setInt(1,1) + proc.setInt(1, 1) proc.registerOutParameter(1, Types.INTEGER) when: runUnderTrace("parent") { @@ -1219,7 +1219,7 @@ class RemoteDBMTraceInjectedForkedTest extends RemoteJDBCInstrumentationTest { } @Override - protected boolean dbmTracePreparedStatements(DbType dbType){ + protected boolean dbmTracePreparedStatements(DbType dbType) { return dbType == ORACLE } @@ -1318,7 +1318,7 @@ class RemoteDBMTraceInjectedForkedTestTracePreparedStatements extends RemoteJDBC } @Override - protected boolean dbmTracePreparedStatements(DbType dbType){ + protected boolean dbmTracePreparedStatements(DbType dbType) { return dbType == POSTGRESQL || dbType == ORACLE } } diff --git a/dd-java-agent/instrumentation/jdbc/src/test/java/test/DataDogRegistryImageNameSubstitutor.java b/dd-java-agent/instrumentation/jdbc/src/test/java/test/DataDogRegistryImageNameSubstitutor.java new file mode 100644 index 00000000000..8f7693f49d1 --- /dev/null +++ b/dd-java-agent/instrumentation/jdbc/src/test/java/test/DataDogRegistryImageNameSubstitutor.java @@ -0,0 +1,35 @@ +package test; + +import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.ImageNameSubstitutor; + +/** + * A custom {@link ImageNameSubstitutor} implementation that rewrites Docker image names to use + * Datadog's internal registry {@code registry.ddbuild.io} when running in a CI environment. + * + *

Images from DockerHub already mirrored by {@code registry.ddbuild.io} via environment variable + * {@code TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX} + * + *

For images from other repositories custom image name substitutor should be implemented. + * Internal registry is faster and not affected by rate limiting. + */ +public class DataDogRegistryImageNameSubstitutor extends ImageNameSubstitutor { + @Override + public DockerImageName apply(DockerImageName original) { + String name = original.asCanonicalNameString(); + + if (System.getenv("CI") != null) { + // For now, we need to mirror Microsoft SQL Server images only. + name = + name.replace( + "mcr.microsoft.com/mssql/server:", "registry.ddbuild.io/images/mirror/sqlserver:"); + } + + return DockerImageName.parse(name); + } + + @Override + protected String getDescription() { + return "Image name substitutor to load images from registry.ddbuild.io"; + } +} diff --git a/dd-java-agent/instrumentation/jdbc/src/test/resources/testcontainers.properties b/dd-java-agent/instrumentation/jdbc/src/test/resources/testcontainers.properties new file mode 100644 index 00000000000..03fb660c6d1 --- /dev/null +++ b/dd-java-agent/instrumentation/jdbc/src/test/resources/testcontainers.properties @@ -0,0 +1 @@ +image.substitutor=test.DataDogRegistryImageNameSubstitutor