diff --git a/tofhir-engine/pom.xml b/tofhir-engine/pom.xml
index 20527703..b8bc5a48 100644
--- a/tofhir-engine/pom.xml
+++ b/tofhir-engine/pom.xml
@@ -263,6 +263,12 @@
kafka
test
+
+
+ org.testcontainers
+ mongodb
+ test
+
org.testcontainers
diff --git a/tofhir-engine/src/test/scala/io/tofhir/OnFhirTestContainer.scala b/tofhir-engine/src/test/scala/io/tofhir/OnFhirTestContainer.scala
index 1807b321..cdf1011c 100644
--- a/tofhir-engine/src/test/scala/io/tofhir/OnFhirTestContainer.scala
+++ b/tofhir-engine/src/test/scala/io/tofhir/OnFhirTestContainer.scala
@@ -2,7 +2,7 @@ package io.tofhir
import io.onfhir.client.OnFhirNetworkClient
import io.tofhir.engine.Execution.actorSystem
-import org.testcontainers.containers.GenericContainer
+import org.testcontainers.containers.{GenericContainer, MongoDBContainer, Network}
import org.testcontainers.containers.wait.strategy.Wait
import org.testcontainers.utility.DockerImageName
@@ -18,8 +18,19 @@ object OnFhirTestContainer {
private val TIMEOUT_SECONDS = 180 // Timeout in seconds for container startup
private lazy val container: GenericContainer[_] = {
+ // initialize a Testcontainers network
+ val network = Network.newNetwork()
+ // Start a MongoDB container and attach it to the created network
+ new MongoDBContainer("mongo:7.0")
+ .withNetwork(network)
+ .withNetworkAliases("mongoDB")
+ .start()
+ // Create a generic container for onFHIR
val container: GenericContainer[Nothing] = new GenericContainer(DockerImageName.parse("srdc/onfhir:r5")).withExposedPorts(ONFHIR_TESTCONTAINER_PORT)
- container.addEnv("DB_EMBEDDED", "true")
+ container.withNetwork(network) // attach the onFHIR container to the same network
+ container.withNetworkAliases("onFhir")
+ container.addEnv("DB_EMBEDDED", "false") // disable embedded database
+ container.addEnv("DB_HOST", s"mongoDB:27017") // connect to MongoDB
container.addEnv("SERVER_PORT", ONFHIR_TESTCONTAINER_PORT.toString)
container.addEnv("SERVER_BASE_URI", "fhir")
container.addEnv("FHIR_ROOT_URL", s"http://${container.getHost}:$ONFHIR_TESTCONTAINER_PORT/fhir")
diff --git a/tofhir-server/pom.xml b/tofhir-server/pom.xml
index ea87dcf6..a9af0b12 100644
--- a/tofhir-server/pom.xml
+++ b/tofhir-server/pom.xml
@@ -221,6 +221,12 @@
testcontainers
test
+
+
+ org.testcontainers
+ mongodb
+ test
+
org.testcontainers
junit-jupiter
diff --git a/tofhir-server/src/test/scala/io/tofhir/server/BaseEndpointTest.scala b/tofhir-server/src/test/scala/io/tofhir/server/BaseEndpointTest.scala
index 5043b999..16000642 100644
--- a/tofhir-server/src/test/scala/io/tofhir/server/BaseEndpointTest.scala
+++ b/tofhir-server/src/test/scala/io/tofhir/server/BaseEndpointTest.scala
@@ -18,9 +18,10 @@ import org.json4s.jackson.Serialization.writePretty
import org.scalatest.BeforeAndAfterAll
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
-import org.testcontainers.containers.GenericContainer
+import org.testcontainers.containers.{GenericContainer, MongoDBContainer}
import org.testcontainers.containers.wait.strategy.Wait
import org.testcontainers.junit.jupiter.Container
+import org.testcontainers.containers.Network
import org.testcontainers.utility.DockerImageName
import java.io.File
@@ -36,6 +37,8 @@ trait BaseEndpointTest extends AnyWordSpec with Matchers with ScalatestRouteTest
// route endpoint
var route: Route = _
+ private val ONFHIR_TESTCONTAINER_PORT = 8081 // Port number of the OnFhir instance to be created for testing.
+
// Instance of OnFhirNetworkClient initialized with onFhir container
lazy val onFhirClient: OnFhirNetworkClient = initializeOnFhirClient()
@@ -44,11 +47,22 @@ trait BaseEndpointTest extends AnyWordSpec with Matchers with ScalatestRouteTest
* */
def initializeOnFhirClient(): OnFhirNetworkClient = {
@Container
- val container: GenericContainer[Nothing] = new GenericContainer(DockerImageName.parse("srdc/onfhir:r5")).withExposedPorts(8081);
- container.addEnv("DB_EMBEDDED", "true");
- container.addEnv("SERVER_PORT", "8081");
- container.addEnv("SERVER_BASE_URI", "fhir");
- container.addEnv("FHIR_ROOT_URL", s"http://${container.getHost}:8081/fhir")
+ // initialize a Testcontainers network
+ val network = Network.newNetwork()
+ // Start a MongoDB container and attach it to the created network
+ new MongoDBContainer("mongo:7.0")
+ .withNetwork(network)
+ .withNetworkAliases("mongoDB")
+ .start()
+ // Create a generic container for onFHIR
+ val container: GenericContainer[Nothing] = new GenericContainer(DockerImageName.parse("srdc/onfhir:r5")).withExposedPorts(ONFHIR_TESTCONTAINER_PORT)
+ container.withNetwork(network) // attach the onFHIR container to the same network
+ container.withNetworkAliases("onFhir")
+ container.addEnv("DB_EMBEDDED", "false") // disable embedded database
+ container.addEnv("DB_HOST", s"mongoDB:27017") // connect to MongoDB
+ container.addEnv("SERVER_PORT", ONFHIR_TESTCONTAINER_PORT.toString)
+ container.addEnv("SERVER_BASE_URI", "fhir")
+ container.addEnv("FHIR_ROOT_URL", s"http://${container.getHost}:$ONFHIR_TESTCONTAINER_PORT/fhir")
// The default startup timeout of 60 seconds is not sufficient for OnFhir, as it utilizes an embedded
// MongoDB, which requires additional initialization time. Therefore, we increase the timeout to 3 minutes (180 seconds).
container.waitingFor(Wait.forHttp("/fhir/metadata").forStatusCode(200).withStartupTimeout(Duration.ofSeconds(180)))