Extend meta source length (#6532)

* Add test

* Extend field

* Migration (aimed to backport)

* Add migration for HFJ_RES_VER_PROV table

---------

Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
This commit is contained in:
jmarchionatto 2024-12-03 14:15:21 -05:00 committed by GitHub
parent 0a88c31cf3
commit 9d584d1b83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 125 additions and 1 deletions

View File

@ -125,6 +125,7 @@ public class HapiFhirJpaMigrationTasks extends BaseMigrationTasks<VersionEnum> {
init700();
init720();
init740();
init760();
init780();
}
@ -154,6 +155,25 @@ public class HapiFhirJpaMigrationTasks extends BaseMigrationTasks<VersionEnum> {
.withType(ColumnTypeEnum.STRING, 512);
}
/**
* Built at 2024.11.02 to be backported to version 7.6
*/
protected void init760() {
final Builder version = forVersion(VersionEnum.V7_6_0);
version.onTable("HFJ_RES_VER")
.modifyColumn("20241102.10", "SOURCE_URI")
.nullable()
.withType(ColumnTypeEnum.STRING, 768)
.failureAllowed();
version.onTable("HFJ_RES_VER_PROV")
.modifyColumn("20241102.20", "SOURCE_URI")
.nullable()
.withType(ColumnTypeEnum.STRING, 768)
.failureAllowed();
}
protected void init740() {
// Start of migrations from 7.2 to 7.4

View File

@ -65,7 +65,7 @@ import java.util.Collection;
})
public class ResourceHistoryTable extends BaseHasResource implements Serializable {
public static final String IDX_RESVER_ID_VER = "IDX_RESVER_ID_VER";
public static final int SOURCE_URI_LENGTH = 100;
public static final int SOURCE_URI_LENGTH = ResourceIndexedSearchParamString.MAX_LENGTH;
/**
* @see ResourceEncodingEnum
*/

View File

@ -0,0 +1,104 @@
package ca.uhn.fhir.jpa.entity;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.jpa.rp.r4.PatientResourceProvider;
import ca.uhn.fhir.jpa.test.BaseJpaR4Test;
import ca.uhn.fhir.rest.api.EncodingEnum;
import ca.uhn.fhir.rest.client.api.IGenericClient;
import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.client.interceptor.SimpleRequestHeaderInterceptor;
import ca.uhn.fhir.rest.server.RestfulServer;
import ca.uhn.fhir.test.utilities.JettyUtil;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import org.h2.util.StringUtils;
import org.hl7.fhir.instance.model.api.IIdType;
import org.hl7.fhir.r4.model.Meta;
import org.hl7.fhir.r4.model.Patient;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class MetaSourceTest extends BaseJpaR4Test {
private static RestfulServer ourRestServer;
private static final FhirContext ourCtx = FhirContext.forR4Cached();
private static Server ourServer;
private static String ourServerBase;
private IGenericClient myClient;
@BeforeEach
void beforeStartServer() throws Exception {
if (ourRestServer == null) {
PatientResourceProvider patientRp = new PatientResourceProvider();
patientRp.setContext(ourCtx);
patientRp.setDao(myPatientDao);
RestfulServer restServer = new RestfulServer(ourCtx);
restServer.setResourceProviders(patientRp);
restServer.registerProviders(mySystemProvider);
ourServer = new Server(0);
ServletContextHandler proxyHandler = new ServletContextHandler();
proxyHandler.setContextPath("/");
ServletHolder servletHolder = new ServletHolder();
servletHolder.setServlet(restServer);
proxyHandler.addServlet(servletHolder, "/fhir/context/*");
restServer.setFhirContext(ourCtx);
ourServer.setHandler(proxyHandler);
JettyUtil.startServer(ourServer);
int myPort = JettyUtil.getPortForStartedServer(ourServer);
ourServerBase = "http://localhost:" + myPort + "/fhir/context";
ourCtx.getRestfulClientFactory().setSocketTimeout(600 * 1_000);
ourRestServer = restServer;
}
myClient = ourCtx.newRestfulGenericClient(ourServerBase);
SimpleRequestHeaderInterceptor simpleHeaderInterceptor = new SimpleRequestHeaderInterceptor();
myClient.registerInterceptor(simpleHeaderInterceptor);
ourRestServer.setDefaultResponseEncoding(EncodingEnum.XML);
ourRestServer.setPagingProvider(myPagingProvider);
LoggingInterceptor loggingInterceptor = new LoggingInterceptor();
loggingInterceptor.setLogRequestBody(true);
loggingInterceptor.setLogResponseBody(true);
}
@Test
void testMetaSourceSupportsMaxLength() {
int metaSourceLength = 700;
Patient p1 = new Patient();
p1.setActive(true);
Meta meta = new Meta();
String longSourceValue = StringUtils.pad("http://", metaSourceLength, "abc", true);
meta.setSource(longSourceValue);
p1.setMeta(meta);
IIdType patientId = myClient.create().resource(p1).execute().getId().toUnqualifiedVersionless();
// verify
Patient patient = myClient.read().resource(Patient.class).withId(patientId.getValueAsString()).execute();
assertThat(patient.getMeta().getSource()).hasSizeGreaterThan(metaSourceLength);
}
@AfterAll
public static void afterClassClearContext() throws Exception {
JettyUtil.closeServer(ourServer);
}
}