/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.batch; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.suite.AnnotationTestSuite; import org.kuali.kfs.sys.suite.PreCommitSuite; import org.kuali.rice.krad.service.KualiModuleService; import org.kuali.rice.krad.service.ModuleService; import org.springframework.beans.factory.NoSuchBeanDefinitionException; /** * Tests the spring configuration for batch jobs. */ @ConfigureContext(initializeBatchSchedule=true) @AnnotationTestSuite(PreCommitSuite.class) public class BatchConfigurationTest extends KualiTestBase { private List<ModuleService> moduleServices; private Collection<JobDescriptor> jobDescriptors; private Collection<TriggerDescriptor> triggerDescriptors; /** * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); moduleServices = SpringContext.getBean(KualiModuleService.class).getInstalledModuleServices(); jobDescriptors = SpringContext.getBeansOfType(JobDescriptor.class).values(); triggerDescriptors = SpringContext.getBeansOfType(TriggerDescriptor.class).values(); } /** * Verifies that registered job names correspond to JobDescriptor beans. */ public final void testRegisteredJobsExist() throws Exception { List<String> nonExistentJobNames = new ArrayList(); StringBuffer errorMessage = new StringBuffer("The following registered job names do not correspond to JobDescriptor beans:"); for (ModuleService module : moduleServices) { for (String jobName : module.getModuleConfiguration().getJobNames()) { try { BatchSpringContext.getJobDescriptor(jobName); } catch (NoSuchBeanDefinitionException e) { nonExistentJobNames.add(jobName); errorMessage.append("\n\t").append(module.getModuleConfiguration().getNamespaceCode()).append(": ").append(jobName); } } } assertTrue(errorMessage.toString(), nonExistentJobNames.isEmpty()); } /** * Verifies that registered trigger names correspond to TriggerDescriptor beans. */ public final void testRegisteredTriggersExist() throws Exception { List<String> nonExistentTriggerNames = new ArrayList(); StringBuffer errorMessage = new StringBuffer("The following registered trigger names do not correspond to TriggerDescriptor beans:"); for (ModuleService module : moduleServices) { for (String triggerName : module.getModuleConfiguration().getTriggerNames()) { try { BatchSpringContext.getTriggerDescriptor(triggerName); } catch (NoSuchBeanDefinitionException e) { nonExistentTriggerNames.add(triggerName); errorMessage.append("\n\t").append(module.getModuleConfiguration().getNamespaceCode()).append(": ").append(triggerName); } } } assertTrue(errorMessage.toString(), nonExistentTriggerNames.isEmpty()); } /** * Verifies that beans of type JobDescriptor are registered with KFS as a whole or with an individual module. */ public final void testJobsRegistered() throws Exception { List<String> unregisteredJobNames = new ArrayList(); StringBuffer errorMessage = new StringBuffer("The following JobDescriptor beans are not registered with KFS as a whole or any module:"); for (JobDescriptor jobDescriptor : SpringContext.getBeansOfType(JobDescriptor.class).values()) { boolean isRegistered = false; for (ModuleService module : moduleServices) { if (module.getModuleConfiguration().getJobNames().contains(jobDescriptor.getJobDetail().getName())) { isRegistered = true; break; } } if (!isRegistered) { unregisteredJobNames.add(jobDescriptor.getJobDetail().getName()); errorMessage.append("\n\t").append(jobDescriptor.getJobDetail().getFullName()); } } assertTrue(errorMessage.toString(), unregisteredJobNames.isEmpty()); } /** * Verifies that beans of type TriggerDescriptor are registered with KFS as a whole or with an individual module. */ public final void testTriggersRegistered() throws Exception { List<String> unregisteredTriggerNames = new ArrayList(); StringBuffer errorMessage = new StringBuffer("The following TriggerDescriptor beans are not registered with KFS as a whole or any module:"); for (TriggerDescriptor triggerDescriptor : SpringContext.getBeansOfType(TriggerDescriptor.class).values()) { boolean isRegistered = false; for (ModuleService module : moduleServices) { if (module.getModuleConfiguration().getTriggerNames().contains(triggerDescriptor.getTrigger().getName())) { isRegistered = true; break; } } if (!isRegistered) { unregisteredTriggerNames.add(triggerDescriptor.getTrigger().getName()); errorMessage.append("\n\t").append(triggerDescriptor.getTrigger().getFullName()); } } assertTrue(errorMessage.toString(), unregisteredTriggerNames.isEmpty()); } /** * Verifies that dependecies listed for a name defined JobDescriptor beans. */ public final void testDependenciesExist() throws Exception { List<String> nonExistentDependencies = new ArrayList(); StringBuffer errorMessage = new StringBuffer("The following dependencies do not refer to JobDescriptor beans:"); for (JobDescriptor jobDescriptor : SpringContext.getBeansOfType(JobDescriptor.class).values()) { for (String dependencyJobName : jobDescriptor.getDependencies().keySet()) { try { BatchSpringContext.getJobDescriptor(dependencyJobName); } catch (NoSuchBeanDefinitionException e) { nonExistentDependencies.add(dependencyJobName); errorMessage.append("\n\t").append(jobDescriptor.getJobDetail().getFullName()).append("depends on: ").append(dependencyJobName); } } } assertTrue(errorMessage.toString(), nonExistentDependencies.isEmpty()); } }