fhir: move to test-infra
diff --git a/fhir/pom.xml b/fhir/pom.xml
index 9045973..4fbf3ca 100644
--- a/fhir/pom.xml
+++ b/fhir/pom.xml
@@ -111,10 +111,13 @@
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- test infra -->
         <dependency>
-            <groupId>org.testcontainers</groupId>
-            <artifactId>testcontainers</artifactId>
-            <version>${testcontainers-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-fhir</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>
diff --git a/fhir/src/main/java/sample/camel/MyCamelRouter.java b/fhir/src/main/java/sample/camel/MyCamelRouter.java
index 4d0efbd..35af825 100644
--- a/fhir/src/main/java/sample/camel/MyCamelRouter.java
+++ b/fhir/src/main/java/sample/camel/MyCamelRouter.java
@@ -22,7 +22,7 @@
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.http.ProtocolException;
-import org.hl7.fhir.dstu3.model.Patient;
+import org.hl7.fhir.r4.model.Patient;
 import org.springframework.stereotype.Component;
 
 /**
diff --git a/fhir/src/main/resources/application.properties b/fhir/src/main/resources/application.properties
index e008cad..e318c57 100644
--- a/fhir/src/main/resources/application.properties
+++ b/fhir/src/main/resources/application.properties
@@ -15,9 +15,9 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-serverUrl=http://localhost:8081/hapi-fhir-jpaserver/fhir
+serverUrl=http://localhost:8081/fhir
 
-fhirVersion=DSTU3
+fhirVersion=R4
 
 input=target/work/fhir/input
 
diff --git a/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java b/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
index 0eeafca..ae63fde 100644
--- a/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
+++ b/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
@@ -16,41 +16,32 @@
  */
 package sample.camel;
 
+import java.io.File;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spring.boot.CamelContextConfiguration;
+import org.apache.camel.test.infra.fhir.services.FhirService;
+import org.apache.camel.test.infra.fhir.services.FhirServiceFactory;
 import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
 import org.apache.commons.io.FileUtils;
-
+import org.hl7.fhir.r4.model.Patient;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-
-import org.hl7.fhir.dstu3.model.Patient;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import com.github.dockerjava.api.command.CreateContainerCmd;
-import com.github.dockerjava.api.model.ExposedPort;
-import com.github.dockerjava.api.model.PortBinding;
-import com.github.dockerjava.api.model.Ports;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
+import org.springframework.context.annotation.Bean;
 
 @CamelSpringBootTest
-@SpringBootTest(classes = MyCamelApplication.class,
+@SpringBootTest(classes = {MyCamelApplication.class, MyCamelApplicationTest.class},
 		properties = "input = target/work/fhir/testinput")
 public class MyCamelApplicationTest {
 
-	private static final int CONTAINER_PORT = 8080;
-	private static final int EXPOSED_PORT = 8081;
-	private static final String CONTAINER_IMAGE = "hapiproject/hapi:v4.2.0";
-
-	private static GenericContainer container;
+	@RegisterExtension
+	public static FhirService service = FhirServiceFactory.createSingletonService();
 
 	@Autowired
 	private CamelContext camelContext;
@@ -58,25 +49,6 @@
 	@Autowired
 	private ProducerTemplate producerTemplate;
 
-	@BeforeAll
-	public static void startServer() throws Exception {
-		Consumer<CreateContainerCmd> cmd = e -> {
-			e.withPortBindings(new PortBinding(Ports.Binding.bindPort(EXPOSED_PORT),
-					new ExposedPort(CONTAINER_PORT)));
-		};
-
-		container = new GenericContainer(CONTAINER_IMAGE)
-				.withNetworkAliases("fhir")
-				.withExposedPorts(CONTAINER_PORT)
-				.withCreateContainerCmdModifier(cmd)
-				.withEnv("HAPI_FHIR_VERSION", "DSTU3")
-				.withEnv("HAPI_REUSE_CACHED_SEARCH_RESULTS_MILLIS", "-1")
-				.waitingFor(Wait.forListeningPort())
-				.waitingFor(Wait.forHttp("/hapi-fhir-jpaserver/fhir/metadata"));
-		;
-		container.start();
-	}
-
 	@Test
 	public void shouldPushConvertedHl7toFhir() throws Exception {
 		MockEndpoint mock = camelContext.getEndpoint("mock:result", MockEndpoint.class);
@@ -89,4 +61,19 @@
 		mock.assertIsSatisfied();
 		Assertions.assertEquals("Freeman", mock.getExchanges().get(0).getIn().getBody(Patient.class).getName().get(0).getFamily());
 	}
+
+	@Bean
+	CamelContextConfiguration contextConfiguration() {
+		return new CamelContextConfiguration() {
+			@Override
+			public void beforeApplicationStart(CamelContext context) {
+				context.getPropertiesComponent().addInitialProperty("serverUrl", service.getServiceBaseURL());
+			}
+
+			@Override
+			public void afterApplicationStart(CamelContext camelContext) {
+
+			}
+		};
+	}
 }