001package ca.uhn.fhir.test.utilities;
002
003/*-
004 * #%L
005 * HAPI FHIR Test Utilities
006 * %%
007 * Copyright (C) 2014 - 2023 Smile CDR, Inc.
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023import org.springframework.beans.BeansException;
024import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
025import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
026import org.springframework.beans.factory.support.DefaultListableBeanFactory;
027import org.springframework.core.env.Environment;
028import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
029import org.springframework.scheduling.concurrent.ExecutorConfigurationSupport;
030
031/**
032 * This bean postprocessor disables all scheduled tasks. It is intended
033 * only to be used in unit tests in circumstances where scheduled
034 * tasks cause issues.
035 */
036public class UnregisterScheduledProcessor implements BeanFactoryPostProcessor {
037
038        public static final String SCHEDULING_DISABLED = "scheduling_disabled";
039        public static final String SCHEDULING_DISABLED_EQUALS_TRUE = "scheduling_disabled=true";
040        public static final String SCHEDULING_DISABLED_EQUALS_FALSE = "scheduling_disabled=false";
041
042        private final Environment myEnvironment;
043
044        public UnregisterScheduledProcessor(Environment theEnv) {
045                myEnvironment = theEnv;
046        }
047
048        @Override
049        public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException {
050                String schedulingDisabled = myEnvironment.getProperty(SCHEDULING_DISABLED);
051                if ("true".equals(schedulingDisabled)) {
052                        for (String beanName : beanFactory.getBeanNamesForType(ScheduledAnnotationBeanPostProcessor.class)) {
053                                ((DefaultListableBeanFactory) beanFactory).removeBeanDefinition(beanName);
054                        }
055
056                        for (String beanName : beanFactory.getBeanNamesForType(ExecutorConfigurationSupport.class)) {
057                                ExecutorConfigurationSupport executorConfigSupport = beanFactory.getBean(beanName, ExecutorConfigurationSupport.class);
058                                executorConfigSupport.shutdown();
059                        }
060                }
061
062        }
063}