From 9d84d7c59333ecce5ace98ec038ef045f5410b23 Mon Sep 17 00:00:00 2001 From: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:59:19 -0600 Subject: [PATCH] merge conflicts --- .../HapiEmbeddedDatabasesExtension.java | 5 +-- .../jpa/embedded/MsSqlEmbeddedDatabase.java | 17 ++++++++-- .../fhir/jpa/embedded/OracleCondition.java | 22 ++---------- .../fhir/jpa/util/DatabaseSupportUtil.java | 34 +++++++++++++++++++ 4 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/util/DatabaseSupportUtil.java diff --git a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/HapiEmbeddedDatabasesExtension.java b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/HapiEmbeddedDatabasesExtension.java index 7a29e24a0ca5..87e656d4ca0d 100644 --- a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/HapiEmbeddedDatabasesExtension.java +++ b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/HapiEmbeddedDatabasesExtension.java @@ -20,6 +20,7 @@ package ca.uhn.fhir.jpa.embedded; import ca.uhn.fhir.jpa.migrate.DriverTypeEnum; +import ca.uhn.fhir.jpa.util.DatabaseSupportUtil; import ca.uhn.fhir.test.utilities.docker.DockerRequiredCondition; import ca.uhn.fhir.util.VersionEnum; import org.apache.commons.lang3.StringUtils; @@ -56,7 +57,7 @@ public HapiEmbeddedDatabasesExtension() { myEmbeddedDatabases.add(new H2EmbeddedDatabase()); myEmbeddedDatabases.add(new PostgresEmbeddedDatabase()); myEmbeddedDatabases.add(new MsSqlEmbeddedDatabase()); - if (canUseOracle()) { + if (DatabaseSupportUtil.canUseOracle()) { myEmbeddedDatabases.add(new OracleEmbeddedDatabase()); } else { String message = @@ -138,7 +139,7 @@ public Stream provideArguments(ExtensionContext context) { arguments.add(Arguments.of(DriverTypeEnum.POSTGRES_9_4)); arguments.add(Arguments.of(DriverTypeEnum.MSSQL_2012)); - if (canUseOracle()) { + if (DatabaseSupportUtil.canUseOracle()) { arguments.add(Arguments.of(DriverTypeEnum.ORACLE_12C)); } diff --git a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/MsSqlEmbeddedDatabase.java b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/MsSqlEmbeddedDatabase.java index 7ab8ed648ea3..cc498305293a 100644 --- a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/MsSqlEmbeddedDatabase.java +++ b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/MsSqlEmbeddedDatabase.java @@ -20,6 +20,7 @@ package ca.uhn.fhir.jpa.embedded; import ca.uhn.fhir.jpa.migrate.DriverTypeEnum; +import ca.uhn.fhir.jpa.util.DatabaseSupportUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.containers.MSSQLServerContainer; @@ -43,9 +44,19 @@ public class MsSqlEmbeddedDatabase extends JpaEmbeddedDatabase { private final MSSQLServerContainer myContainer; public MsSqlEmbeddedDatabase() { - DockerImageName msSqlImage = DockerImageName.parse("mcr.microsoft.com/azure-sql-edge:latest") - .asCompatibleSubstituteFor("mcr.microsoft.com/mssql/server"); - myContainer = new MSSQLServerContainer(msSqlImage).acceptLicense(); + + // azure-sql-edge docker image does not support kernel 6.7+ + // as a result, mssql container fails to start most of the time + // mssql/server:2019 image support kernel 6.7+, so use it for amd64 architecture + // See: https://github.com/microsoft/mssql-docker/issues/868 + if (DatabaseSupportUtil.canUseMsSql2019()) { + myContainer = new MSSQLServerContainer("mcr.microsoft.com/mssql/server:2019-latest").acceptLicense(); + } else { + DockerImageName msSqlImage = DockerImageName.parse("mcr.microsoft.com/azure-sql-edge:latest") + .asCompatibleSubstituteFor("mcr.microsoft.com/mssql/server"); + myContainer = new MSSQLServerContainer(msSqlImage).acceptLicense(); + } + myContainer.start(); super.initialize( DriverTypeEnum.MSSQL_2012, diff --git a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/OracleCondition.java b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/OracleCondition.java index ddefa1a127cd..6528e8f6bcc5 100644 --- a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/OracleCondition.java +++ b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/embedded/OracleCondition.java @@ -19,8 +19,7 @@ */ package ca.uhn.fhir.jpa.embedded; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.SystemUtils; +import ca.uhn.fhir.jpa.util.DatabaseSupportUtil; import org.junit.jupiter.api.extension.ConditionEvaluationResult; import org.junit.jupiter.api.extension.ExecutionCondition; import org.junit.jupiter.api.extension.ExtensionContext; @@ -33,25 +32,8 @@ public class OracleCondition implements ExecutionCondition { @Override public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext theExtensionContext) { - return canUseOracle() + return DatabaseSupportUtil.canUseOracle() ? ConditionEvaluationResult.enabled(ENABLED_MSG) : ConditionEvaluationResult.disabled(DISABLED_MSG); } - - public static boolean canUseOracle() { - if (!isMac()) { - return true; - } - return isColimaConfigured(); - } - - private static boolean isMac() { - return SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_MAC_OSX; - } - - private static boolean isColimaConfigured() { - return StringUtils.isNotBlank(System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE")) - && StringUtils.isNotBlank(System.getenv("DOCKER_HOST")) - && System.getenv("DOCKER_HOST").contains("colima"); - } } diff --git a/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/util/DatabaseSupportUtil.java b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/util/DatabaseSupportUtil.java new file mode 100644 index 000000000000..fd1d362a95a5 --- /dev/null +++ b/hapi-fhir-jpaserver-test-utilities/src/main/java/ca/uhn/fhir/jpa/util/DatabaseSupportUtil.java @@ -0,0 +1,34 @@ +package ca.uhn.fhir.jpa.util; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; + +public final class DatabaseSupportUtil { + + private DatabaseSupportUtil() {} + + public static boolean canUseMsSql2019() { + return isSupportAmd64Architecture(); + } + + public static boolean canUseOracle() { + return isSupportAmd64Architecture(); + } + + private static boolean isSupportAmd64Architecture() { + if (!isMac()) { + return true; + } + return isColimaConfigured(); + } + + private static boolean isMac() { + return SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_MAC_OSX; + } + + private static boolean isColimaConfigured() { + return StringUtils.isNotBlank(System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE")) + && StringUtils.isNotBlank(System.getenv("DOCKER_HOST")) + && System.getenv("DOCKER_HOST").contains("colima"); + } +}