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 }