1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.kuali.kfs.sys.batch;
20  
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.List;
24  
25  import org.kuali.kfs.sys.ConfigureContext;
26  import org.kuali.kfs.sys.context.KualiTestBase;
27  import org.kuali.kfs.sys.context.SpringContext;
28  import org.kuali.kfs.sys.suite.AnnotationTestSuite;
29  import org.kuali.kfs.sys.suite.PreCommitSuite;
30  import org.kuali.rice.krad.service.KualiModuleService;
31  import org.kuali.rice.krad.service.ModuleService;
32  import org.springframework.beans.factory.NoSuchBeanDefinitionException;
33  
34  
35  
36  
37  @ConfigureContext(initializeBatchSchedule=true)
38  @AnnotationTestSuite(PreCommitSuite.class)
39  public class BatchConfigurationTest extends KualiTestBase {
40      private List<ModuleService> moduleServices;
41      private Collection<JobDescriptor> jobDescriptors;
42      private Collection<TriggerDescriptor> triggerDescriptors;
43  
44      
45  
46  
47      @Override
48      protected void setUp() throws Exception {
49          super.setUp();
50          moduleServices = SpringContext.getBean(KualiModuleService.class).getInstalledModuleServices();
51          jobDescriptors = SpringContext.getBeansOfType(JobDescriptor.class).values();
52          triggerDescriptors = SpringContext.getBeansOfType(TriggerDescriptor.class).values();
53      }
54  
55      
56  
57  
58      public final void testRegisteredJobsExist() throws Exception {
59          List<String> nonExistentJobNames = new ArrayList();
60          StringBuffer errorMessage = new StringBuffer("The following registered job names do not correspond to JobDescriptor beans:");
61          for (ModuleService module : moduleServices) {
62              for (String jobName : module.getModuleConfiguration().getJobNames()) {
63                  try {
64                      BatchSpringContext.getJobDescriptor(jobName);
65                  }
66                  catch (NoSuchBeanDefinitionException e) {
67                      nonExistentJobNames.add(jobName);
68                      errorMessage.append("\n\t").append(module.getModuleConfiguration().getNamespaceCode()).append(": ").append(jobName);
69                  }
70              }
71          }
72          assertTrue(errorMessage.toString(), nonExistentJobNames.isEmpty());
73      }
74  
75      
76  
77  
78      public final void testRegisteredTriggersExist() throws Exception {
79          List<String> nonExistentTriggerNames = new ArrayList();
80          StringBuffer errorMessage = new StringBuffer("The following registered trigger names do not correspond to TriggerDescriptor beans:");
81          for (ModuleService module : moduleServices) {
82              for (String triggerName : module.getModuleConfiguration().getTriggerNames()) {
83                  try {
84                      BatchSpringContext.getTriggerDescriptor(triggerName);
85                  }
86                  catch (NoSuchBeanDefinitionException e) {
87                      nonExistentTriggerNames.add(triggerName);
88                      errorMessage.append("\n\t").append(module.getModuleConfiguration().getNamespaceCode()).append(": ").append(triggerName);
89                  }
90              }
91          }
92          assertTrue(errorMessage.toString(), nonExistentTriggerNames.isEmpty());
93      }
94  
95      
96  
97  
98      public final void testJobsRegistered() throws Exception {
99          List<String> unregisteredJobNames = new ArrayList();
100         StringBuffer errorMessage = new StringBuffer("The following JobDescriptor beans are not registered with KFS as a whole or any module:");
101         for (JobDescriptor jobDescriptor : SpringContext.getBeansOfType(JobDescriptor.class).values()) {
102             boolean isRegistered = false;
103             for (ModuleService module : moduleServices) {
104                 if (module.getModuleConfiguration().getJobNames().contains(jobDescriptor.getJobDetail().getName())) {
105                     isRegistered = true;
106                     break;
107                 }
108             }
109             if (!isRegistered) {
110                 unregisteredJobNames.add(jobDescriptor.getJobDetail().getName());
111                 errorMessage.append("\n\t").append(jobDescriptor.getJobDetail().getFullName());
112             }
113         }
114         assertTrue(errorMessage.toString(), unregisteredJobNames.isEmpty());
115     }
116 
117     
118 
119 
120     public final void testTriggersRegistered() throws Exception {
121         List<String> unregisteredTriggerNames = new ArrayList();
122         StringBuffer errorMessage = new StringBuffer("The following TriggerDescriptor beans are not registered with KFS as a whole or any module:");
123         for (TriggerDescriptor triggerDescriptor : SpringContext.getBeansOfType(TriggerDescriptor.class).values()) {
124             boolean isRegistered = false;
125             for (ModuleService module : moduleServices) {
126                 if (module.getModuleConfiguration().getTriggerNames().contains(triggerDescriptor.getTrigger().getName())) {
127                     isRegistered = true;
128                     break;
129                 }
130             }
131             if (!isRegistered) {
132                 unregisteredTriggerNames.add(triggerDescriptor.getTrigger().getName());
133                 errorMessage.append("\n\t").append(triggerDescriptor.getTrigger().getFullName());
134             }
135         }
136         assertTrue(errorMessage.toString(), unregisteredTriggerNames.isEmpty());
137     }
138 
139     
140 
141 
142     public final void testDependenciesExist() throws Exception {
143         List<String> nonExistentDependencies = new ArrayList();
144         StringBuffer errorMessage = new StringBuffer("The following dependencies do not refer to JobDescriptor beans:");
145         for (JobDescriptor jobDescriptor : SpringContext.getBeansOfType(JobDescriptor.class).values()) {
146             for (String dependencyJobName : jobDescriptor.getDependencies().keySet()) {
147                 try {
148                     BatchSpringContext.getJobDescriptor(dependencyJobName);
149                 }
150                 catch (NoSuchBeanDefinitionException e) {
151                     nonExistentDependencies.add(dependencyJobName);
152                     errorMessage.append("\n\t").append(jobDescriptor.getJobDetail().getFullName()).append("depends on: ").append(dependencyJobName);
153                 }
154             }
155         }
156         assertTrue(errorMessage.toString(), nonExistentDependencies.isEmpty());
157     }
158 }