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/config/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[] files = new File(FILE_PREFIX).listFiles();
187 if (files != null) {
188 Arrays.sort(files);
189 for (File file : files) {
190 if (file.getName().endsWith(".xml")) {
191 lifecycles.add(new KPMEXmlDataLoaderLifecycle(FILE_PREFIX + file.getName()));
192 }
193 }
194 }
195 return lifecycles;
196 }
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225 public class ClearCacheLifecycle extends BaseLifecycle {
226 private final Logger LOG = Logger.getLogger(ClearCacheLifecycle.class);
227
228 @Override
229 public void start() throws Exception {
230 long startTime = System.currentTimeMillis();
231 LOG.info("Starting cache flushing");
232 List<CacheManager> cms = new ArrayList<CacheManager>(CoreImplServiceLocator.getCacheManagerRegistry().getCacheManagers());
233 for (CacheManager cm : cms) {
234 for (String cacheName : cm.getCacheNames()) {
235
236 cm.getCache(cacheName).clear();
237 }
238 }
239 long endTime = System.currentTimeMillis();
240 LOG.info("Caches cleared in " + (endTime - startTime) + "ms");
241 }
242
243 @Override
244 public void stop() throws Exception {
245 super.stop();
246 }
247
248 }
249
250 public WebClient getWebClient() {
251 return this.webClient;
252 }
253
254 public void setWebClient(WebClient webClient) {
255 this.webClient = webClient;
256 }
257
258 public static String getBaseURL() {
259 return ConfigContext.getCurrentContextConfig().getProperty("application.url");
260 }
261
262 public static String getContext() {
263 return "/" + ConfigContext.getCurrentContextConfig().getProperty("app.context.name");
264 }
265
266 public static String getTempDir() {
267 return ConfigContext.getCurrentContextConfig().getProperty("temp.dir");
268 }
269
270 public static Integer getPort() {
271 return new Integer(ConfigContext.getCurrentContextConfig().getProperty("kns.test.port"));
272 }
273
274
275
276
277
278
279
280
281
282
283
284 }