From d00c7dbea8ac687219b3cae1b82eca6f7db0ae77 Mon Sep 17 00:00:00 2001 From: James Agnew Date: Tue, 5 Dec 2017 12:08:56 -0500 Subject: [PATCH] Giant breakthrough in fixing sporadic test failures! --- .../ca/uhn/fhir/rest/param/ParameterUtil.java | 7 +++ .../uhn/fhir/jpa/config/TestDstu3Config.java | 51 +++++++++++++++---- .../fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java | 2 - .../dstu3/BaseResourceProviderDstu3Test.java | 1 + .../ResourceProviderInterceptorDstu3Test.java | 4 ++ .../fhir/rest/method/ParameterUtilTest.java | 5 ++ 6 files changed, 58 insertions(+), 12 deletions(-) diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/ParameterUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/ParameterUtil.java index 543d2561369..bdd964c8835 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/ParameterUtil.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/ParameterUtil.java @@ -149,6 +149,13 @@ public class ParameterUtil { return escape(theValue.toString()); } + /** + * Applies {@link #escapeWithDefault(Object)} followed by {@link UrlUtil#escapeUrlParam(String)} + */ + public static String escapeAndUrlEncode(String theInput) { + return UrlUtil.escapeUrlParam(escapeWithDefault(theInput)); + } + public static Integer findIdParameterIndex(Method theMethod, FhirContext theContext) { Integer index = findParamAnnotationIndex(theMethod, IdParam.class); if (index != null) { diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java index 4c7420a3c1d..351af6e31ba 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java @@ -1,16 +1,7 @@ package ca.uhn.fhir.jpa.config; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Properties; -import java.util.concurrent.TimeUnit; - -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; - -import ca.uhn.fhir.jpa.search.LuceneSearchMappingFactory; -import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel; import ca.uhn.fhir.jpa.dao.DaoConfig; +import ca.uhn.fhir.jpa.search.LuceneSearchMappingFactory; import ca.uhn.fhir.jpa.subscription.email.IEmailSender; import ca.uhn.fhir.jpa.subscription.email.JavaMailEmailSender; import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor; @@ -18,12 +9,19 @@ import ca.uhn.fhir.validation.ResultSeverityEnum; import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder; import org.apache.commons.dbcp2.BasicDataSource; import org.hibernate.jpa.HibernatePersistenceProvider; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Primary; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.env.Environment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.persistence.EntityManagerFactory; @@ -180,4 +178,37 @@ public class TestDstu3Config extends BaseJavaConfigDstu3 { return retVal; } + @Bean + public UnregisterScheduledProcessor unregisterScheduledProcessor(Environment theEnv) { + return new UnregisterScheduledProcessor(theEnv); + } + + /** + * This lets the "@Value" fields reference properties from the properties file + */ + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + + public class UnregisterScheduledProcessor implements BeanFactoryPostProcessor { + + private final Environment myEnvironment; + + public UnregisterScheduledProcessor(Environment theEnv) { + myEnvironment = theEnv; + } + + @Override + public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException { + String schedulingDisabled = myEnvironment.getProperty("scheduling_disabled"); + if (schedulingDisabled.equals("true")) { + for (String beanName : beanFactory.getBeanNamesForType(ScheduledAnnotationBeanPostProcessor.class)) { + ((DefaultListableBeanFactory) beanFactory).removeBeanDefinition(beanName); + } + } + } + } + } diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java index 8589e535e44..e24e16d68e8 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java @@ -48,10 +48,8 @@ import ca.uhn.fhir.rest.server.method.MethodUtil; import ca.uhn.fhir.util.TestUtil; import ca.uhn.fhir.util.UrlUtil; -//@formatter:off @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes= {TestDstu3Config.class}) -//@formatter:on public abstract class BaseJpaDstu3Test extends BaseJpaTest { private static JpaValidationSupportChainDstu3 ourJpaValidationSupportChainDstu3; diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java index 516ea29df48..a227dc114da 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java @@ -45,6 +45,7 @@ import java.util.concurrent.TimeUnit; import static org.apache.commons.lang3.StringUtils.isNotBlank; + public abstract class BaseResourceProviderDstu3Test extends BaseJpaDstu3Test { protected static JpaValidationSupportChainDstu3 myValidationSupport; diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderInterceptorDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderInterceptorDstu3Test.java index 2a4e87c050d..291c48d4a61 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderInterceptorDstu3Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderInterceptorDstu3Test.java @@ -28,6 +28,7 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.springframework.test.context.TestPropertySource; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -40,6 +41,9 @@ import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; +@TestPropertySource(properties = { + "scheduling_disabled=true" +}) public class ResourceProviderInterceptorDstu3Test extends BaseResourceProviderDstu3Test { private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderInterceptorDstu3Test.class); diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/method/ParameterUtilTest.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/method/ParameterUtilTest.java index d5aa2ef29ac..796671b3a98 100644 --- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/method/ParameterUtilTest.java +++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/method/ParameterUtilTest.java @@ -10,6 +10,11 @@ import ca.uhn.fhir.rest.param.ParameterUtil; public class ParameterUtilTest { + @Test + public void testEscapeAndUrlEncode() { + assertEquals("123%5C%24123", ParameterUtil.escapeAndUrlEncode("123$123")); + } + @Test public void testConvertIdToType() { IdDt id = new IdDt("Patient/123");