1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.hr;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.List;
22
23 import org.apache.log4j.Logger;
24 import org.kuali.kpme.core.rice.test.lifecycles.KPMEXmlDataLoaderLifecycle;
25 import org.kuali.kpme.core.util.ClearDatabaseLifecycle;
26 import org.kuali.kpme.core.util.DatabaseCleanupDataLifecycle;
27 import org.kuali.kpme.core.util.HrContext;
28 import org.kuali.kpme.core.util.LoadDatabaseDataLifeCycle;
29 import org.kuali.rice.core.api.config.property.Config;
30 import org.kuali.rice.core.api.config.property.ConfigContext;
31 import org.kuali.rice.core.api.lifecycle.BaseLifecycle;
32 import org.kuali.rice.core.api.lifecycle.Lifecycle;
33 import org.kuali.rice.core.impl.services.CoreImplServiceLocator;
34 import org.kuali.rice.krad.UserSession;
35 import org.kuali.rice.krad.util.GlobalVariables;
36 import org.kuali.rice.krad.util.MessageMap;
37 import org.kuali.rice.test.RiceInternalSuiteDataTestCase;
38 import org.kuali.rice.test.TransactionalLifecycle;
39 import org.kuali.rice.test.lifecycles.JettyServerLifecycle;
40 import org.kuali.rice.test.lifecycles.JettyServerLifecycle.ConfigMode;
41 import org.springframework.cache.CacheManager;
42
43 import com.gargoylesoftware.htmlunit.BrowserVersion;
44 import com.gargoylesoftware.htmlunit.WebClient;
45
46
47
48
49 public abstract class KPMEWebTestCase extends RiceInternalSuiteDataTestCase {
50
51 private static final String FILE_PREFIX = System.getProperty("user.dir") + "/../db/src/main/resources/org/kuali/kpme/kpme-db/workflow/";
52
53 private static final String RELATIVE_WEBAPP_ROOT = "/src/main/webapp";
54
55 private TransactionalLifecycle transactionalLifecycle;
56 private WebClient webClient;
57
58 @Override
59 protected String getModuleName() {
60 return "kpme";
61 }
62
63 @Override
64 public void setUp() throws Exception {
65 if (System.getProperty("basedir") == null) {
66 System.setProperty("basedir", System.getProperty("user.dir") + "/");
67 }
68
69 super.setUp();
70
71 GlobalVariables.setMessageMap(new MessageMap());
72
73 final boolean needsSpring = false;
74 if (needsSpring) {
75 transactionalLifecycle = new TransactionalLifecycle();
76
77 transactionalLifecycle.start();
78 }
79
80 new ClearDatabaseLifecycle().start();
81
82 new LoadDatabaseDataLifeCycle(this.getClass()).start();
83
84
85 GlobalVariables.setUserSession(new UserSession("admin"));
86 setWebClient(new WebClient(BrowserVersion.FIREFOX_17));
87 getWebClient().getOptions().setJavaScriptEnabled(true);
88 getWebClient().getOptions().setTimeout(0);
89 }
90
91 @Override
92 public void tearDown() throws Exception {
93
94
95
96 HrContext.clearTargetUser();
97 getWebClient().closeAllWindows();
98 new DatabaseCleanupDataLifecycle(this.getClass()).start();
99
100 final boolean needsSpring = true;
101 if (needsSpring) {
102 if ( (transactionalLifecycle != null) && (transactionalLifecycle.isStarted()) ) {
103 transactionalLifecycle.stop();
104 }
105 }
106
107 GlobalVariables.setMessageMap(new MessageMap());
108
109 super.tearDown();
110 }
111
112 @Override
113 protected List<Lifecycle> getPerTestLifecycles() {
114 List<Lifecycle> lifecycles = super.getPerTestLifecycles();
115 lifecycles.add(new ClearCacheLifecycle());
116 return lifecycles;
117 }
118
119 @Override
120 protected List<Lifecycle> getSuiteLifecycles() {
121 List<Lifecycle> lifecycles = super.getPerTestLifecycles();
122 lifecycles.add(new Lifecycle() {
123 boolean started = false;
124
125 public boolean isStarted() {
126 return this.started;
127 }
128
129 public void start() throws Exception {
130 setModuleName(getModuleName());
131 setBaseDirSystemProperty(getModuleName());
132 Config config = getTestHarnessConfig();
133 ConfigContext.init(config);
134 this.started = true;
135 }
136
137 public void stop() throws Exception {
138 this.started = false;
139 }
140 });
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 lifecycles.add(new Lifecycle() {
159 private JettyServerLifecycle jettyServerLifecycle;
160
161 public boolean isStarted() {
162 return jettyServerLifecycle.isStarted();
163 }
164
165 public void start() throws Exception {
166 System.setProperty("web.bootstrap.spring.file", "classpath:TestHarnessSpringBeans.xml");
167 jettyServerLifecycle = new JettyServerLifecycle(getPort(), getContext(), RELATIVE_WEBAPP_ROOT);
168 jettyServerLifecycle.setConfigMode(ConfigMode.OVERRIDE);
169 jettyServerLifecycle.start();
170 }
171
172 public void stop() throws Exception {
173 this.jettyServerLifecycle.stop();
174 }
175 });
176
177 ClearDatabaseLifecycle clearDatabaseLifecycle = new ClearDatabaseLifecycle();
178 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_T");
179 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_RSP_T");
180 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_DLGN_RSP_T");
181 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_ATTR_T");
182 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_TMPL_T");
183 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_DOC_TYP_T");
184 lifecycles.add(clearDatabaseLifecycle);
185
186 File[] folders = new File(FILE_PREFIX).listFiles();
187
188 if (folders != null) {
189 Arrays.sort(folders);
190 for (File folder : folders) {
191 if (folder.getName().startsWith("00")) {
192 File[] files = new File(FILE_PREFIX + folder.getName()).listFiles();
193 if (files != null) {
194
195 for (File file : files) {
196 if (file.getName().endsWith(".xml")) {
197 lifecycles.add(new KPMEXmlDataLoaderLifecycle(FILE_PREFIX + folder.getName() + "/" + file.getName()));
198 }
199 }
200 }
201 }
202 }
203 }
204 return lifecycles;
205 }
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234 public class ClearCacheLifecycle extends BaseLifecycle {
235 private final Logger LOG = Logger.getLogger(ClearCacheLifecycle.class);
236
237 @Override
238 public void start() throws Exception {
239 long startTime = System.currentTimeMillis();
240 LOG.info("Starting cache flushing");
241 List<CacheManager> cms = new ArrayList<CacheManager>(CoreImplServiceLocator.getCacheManagerRegistry().getCacheManagers());
242 for (CacheManager cm : cms) {
243 for (String cacheName : cm.getCacheNames()) {
244
245 cm.getCache(cacheName).clear();
246 }
247 }
248 long endTime = System.currentTimeMillis();
249 LOG.info("Caches cleared in " + (endTime - startTime) + "ms");
250 }
251
252 @Override
253 public void stop() throws Exception {
254 super.stop();
255 }
256
257 }
258
259 public WebClient getWebClient() {
260 return this.webClient;
261 }
262
263 public void setWebClient(WebClient webClient) {
264 this.webClient = webClient;
265 }
266
267 public static String getBaseURL() {
268 return ConfigContext.getCurrentContextConfig().getProperty("application.url");
269 }
270
271 public static String getContext() {
272 return "/" + ConfigContext.getCurrentContextConfig().getProperty("app.context.name");
273 }
274
275 public static String getTempDir() {
276 return ConfigContext.getCurrentContextConfig().getProperty("temp.dir");
277 }
278
279 public static Integer getPort() {
280 return new Integer(ConfigContext.getCurrentContextConfig().getProperty("kns.test.port"));
281 }
282
283
284
285
286
287
288
289
290
291
292
293 }