Skip to content

Commit

Permalink
Base test classes enhancements for gateway test configuration flexibi…
Browse files Browse the repository at this point in the history
…lity (#5821)

* Allow tests to set paging provider by server

* Allow tests to set target server port range

---------

Co-authored-by: juan.marchionatto <[email protected]>
  • Loading branch information
jmarchionatto and juan.marchionatto authored Apr 16, 2024
1 parent 80d382d commit a90ccde
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,25 @@
import ca.uhn.fhir.rest.server.IResourceProvider;
import ca.uhn.fhir.rest.server.IServerAddressStrategy;
import ca.uhn.fhir.tls.KeyStoreType;
import jakarta.servlet.Servlet;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
import org.junit.jupiter.api.extension.RegisterExtension;

import jakarta.servlet.Servlet;
import java.security.KeyStore;
import java.util.List;

public abstract class BaseRestServerHelper {
private static int myFirstTargetPort = -1;

private final String SERVER_KEYSTORE_PATH = "/tls/server-keystore.p12";
private final String SERVER_TRUSTSTORE_PATH = "/tls/server-truststore.p12";
Expand Down Expand Up @@ -75,9 +76,11 @@ public IGenericClient getClient() {
}

protected void startServer(Servlet theServlet) throws Exception {
myListenerServer = new Server(0);

int port = myFirstTargetPort == -1 ? 0 : myFirstTargetPort++;
myListenerServer = new Server(port);

myFhirContext.getRestfulClientFactory().setSocketTimeout(120000);
myFhirContext.getRestfulClientFactory().setSocketTimeout(120_000);

ServletContextHandler proxyHandler = new ServletContextHandler();
proxyHandler.setContextPath("/");
Expand Down Expand Up @@ -119,7 +122,7 @@ private void assignHttpAndHttpsPorts() {
myHttpsListenerPort = ((ServerConnector)myListenerServer.getConnectors()[1]).getLocalPort();
}

private SslContextFactory.Server getSslContextFactory() throws Exception{
private SslContextFactory.Server getSslContextFactory() {
try {
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();

Expand Down Expand Up @@ -199,5 +202,9 @@ public void setServerAddressStrategy(boolean theUseHttps){
setServerAddressStrategy(strategy);
}

public static void setMyFirstTargetPort(int theMyFirstTargetPort) {
myFirstTargetPort = theMyFirstTargetPort;
}

protected abstract void setServerAddressStrategy(IServerAddressStrategy theServerAddressStrategy);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,16 @@
import ca.uhn.fhir.rest.api.RequestTypeEnum;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.FifoMemoryPagingProvider;
import ca.uhn.fhir.rest.server.IPagingProvider;
import ca.uhn.fhir.rest.server.IResourceProvider;
import ca.uhn.fhir.rest.server.IServerAddressStrategy;
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
import ca.uhn.fhir.rest.server.provider.HashMapResourceProvider;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.ee10.servlet.ServletApiRequest;
import org.eclipse.jetty.server.Request;
import org.hl7.fhir.instance.model.api.IBaseBundle;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
Expand All @@ -48,9 +51,6 @@
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -61,7 +61,8 @@
import java.util.stream.Collectors;

public class RestServerR4Helper extends BaseRestServerHelper implements BeforeEachCallback, AfterEachCallback {
protected final MyRestfulServer myRestServer;
private final MyRestfulServer myRestServer;
private static IPagingProvider myPagingProvider = new FifoMemoryPagingProvider(20);

public RestServerR4Helper() {
this(false, false);
Expand Down Expand Up @@ -216,6 +217,10 @@ public void setConceptMapResourceProvider(HashMapResourceProvider<ConceptMap> th
myRestServer.setConceptMapResourceProvider(theResourceProvider);
}

public void setPagingProvider(IPagingProvider thePagingProvider) {
myPagingProvider = thePagingProvider;
}

@Override
public IIdType createPatientWithId(String theId) {
Patient patient = new Patient();
Expand Down Expand Up @@ -331,8 +336,7 @@ public void setFailNextPut(boolean theFailNextPut) {

public void clearCounts() {
for (IResourceProvider next : getResourceProviders()) {
if (next instanceof HashMapResourceProvider) {
HashMapResourceProvider provider = (HashMapResourceProvider) next;
if (next instanceof HashMapResourceProvider<?> provider) {
provider.clearCounts();
}
}
Expand Down Expand Up @@ -372,8 +376,7 @@ private Map<String, String> pullOutHeaders(HttpServletRequest theReq) {

public void clearDataAndCounts() {
for (IResourceProvider next : getResourceProviders()) {
if (next instanceof HashMapResourceProvider) {
HashMapResourceProvider provider = (HashMapResourceProvider) next;
if (next instanceof HashMapResourceProvider<?> provider) {
provider.clear();
}
}
Expand All @@ -385,7 +388,7 @@ public HashMapResourceProvider<Observation> getObservationResourceProvider() {
}

public void setObservationResourceProvider(HashMapResourceProvider<Observation> theResourceProvider) {
myObservationResourceProvider.getStoredResources().forEach(o -> theResourceProvider.store(o));
myObservationResourceProvider.getStoredResources().forEach(theResourceProvider::store);

unregisterProvider(myObservationResourceProvider);
registerProvider(theResourceProvider);
Expand All @@ -401,7 +404,7 @@ public HashMapResourceProvider<ConceptMap> getConceptMapResourceProvider() {
}

public void setConceptMapResourceProvider(HashMapResourceProvider<ConceptMap> theResourceProvider) {
myConceptMapResourceProvider.getStoredResources().forEach(c -> theResourceProvider.store(c));
myConceptMapResourceProvider.getStoredResources().forEach(theResourceProvider::store);

unregisterProvider(myConceptMapResourceProvider);
registerProvider(theResourceProvider);
Expand All @@ -417,23 +420,23 @@ protected void initialize() throws ServletException {
super.initialize();

FhirContext fhirContext = getFhirContext();
myPatientResourceProvider = new MyHashMapResourceProvider(fhirContext, Patient.class);
myPatientResourceProvider = new MyHashMapResourceProvider<>(fhirContext, Patient.class);
registerProvider(myPatientResourceProvider);
myObservationResourceProvider = new MyHashMapResourceProvider(fhirContext, Observation.class);
myObservationResourceProvider = new MyHashMapResourceProvider<>(fhirContext, Observation.class);
registerProvider(myObservationResourceProvider);
myOrganizationResourceProvider = new MyHashMapResourceProvider(fhirContext, Organization.class);
myOrganizationResourceProvider = new MyHashMapResourceProvider<>(fhirContext, Organization.class);
registerProvider(myOrganizationResourceProvider);
myConceptMapResourceProvider = new MyHashMapResourceProvider(fhirContext, ConceptMap.class);
myConceptMapResourceProvider = new MyHashMapResourceProvider<>(fhirContext, ConceptMap.class);
registerProvider(myConceptMapResourceProvider);

myPlainProvider = new RestServerDstu3Helper.MyPlainProvider(myInitialTransactionLatchEnabled);
registerProvider(myPlainProvider);

setPagingProvider(new FifoMemoryPagingProvider(20));
setPagingProvider(myPagingProvider);
}

public class MyHashMapResourceProvider<T extends IBaseResource> extends HashMapResourceProvider<T> {
public MyHashMapResourceProvider(FhirContext theContext, Class theType) {
public MyHashMapResourceProvider(FhirContext theContext, Class<T> theType) {
super(theContext, theType);
}

Expand Down

0 comments on commit a90ccde

Please sign in to comment.