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.openqa.selenium.WebDriver;
42 import org.openqa.selenium.htmlunit.HtmlUnitDriver;
43 import org.openqa.selenium.remote.CapabilityType;
44 import org.openqa.selenium.remote.DesiredCapabilities;
45 import org.springframework.cache.CacheManager;
46
47 import com.gargoylesoftware.htmlunit.BrowserVersion;
48
49 public abstract class KPMESeleniumTestCase 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 WebDriver driver;
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
87 DesiredCapabilities capabilities = new DesiredCapabilities();
88 capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
89 capabilities.setCapability(CapabilityType.BROWSER_NAME, BrowserVersion.FIREFOX_17);
90 driver = new HtmlUnitDriver(capabilities);
91 }
92
93 @Override
94 public void tearDown() throws Exception {
95
96
97
98 HrContext.clearTargetUser();
99
100 new DatabaseCleanupDataLifecycle(this.getClass()).start();
101
102 final boolean needsSpring = true;
103 if (needsSpring) {
104 if ( (transactionalLifecycle != null) && (transactionalLifecycle.isStarted()) ) {
105 transactionalLifecycle.stop();
106 }
107 }
108
109 GlobalVariables.setMessageMap(new MessageMap());
110
111 super.tearDown();
112 }
113
114 @Override
115 protected List<Lifecycle> getPerTestLifecycles() {
116 List<Lifecycle> lifecycles = super.getPerTestLifecycles();
117 lifecycles.add(new ClearCacheLifecycle());
118 return lifecycles;
119 }
120
121 @Override
122 protected List<Lifecycle> getSuiteLifecycles() {
123 List<Lifecycle> lifecycles = super.getPerTestLifecycles();
124 lifecycles.add(new Lifecycle() {
125 boolean started = false;
126
127 public boolean isStarted() {
128 return this.started;
129 }
130
131 public void start() throws Exception {
132 setModuleName(getModuleName());
133 setBaseDirSystemProperty(getModuleName());
134 Config config = getTestHarnessConfig();
135 ConfigContext.init(config);
136 this.started = true;
137 }
138
139 public void stop() throws Exception {
140 this.started = false;
141 }
142 });
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160 lifecycles.add(new Lifecycle() {
161 private JettyServerLifecycle jettyServerLifecycle;
162
163 public boolean isStarted() {
164 return jettyServerLifecycle.isStarted();
165 }
166
167 public void start() throws Exception {
168 System.setProperty("web.bootstrap.spring.file", "classpath:TestHarnessSpringBeans.xml");
169 jettyServerLifecycle = new JettyServerLifecycle(getPort(), getContext(), RELATIVE_WEBAPP_ROOT);
170 jettyServerLifecycle.setConfigMode(ConfigMode.OVERRIDE);
171 jettyServerLifecycle.start();
172 }
173
174 public void stop() throws Exception {
175 this.jettyServerLifecycle.stop();
176 }
177 });
178
179 ClearDatabaseLifecycle clearDatabaseLifecycle = new ClearDatabaseLifecycle();
180 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_T");
181 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_RSP_T");
182 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_DLGN_RSP_T");
183 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_ATTR_T");
184 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_RULE_TMPL_T");
185 clearDatabaseLifecycle.getAlternativeTablesToClear().add("KREW_DOC_TYP_T");
186 lifecycles.add(clearDatabaseLifecycle);
187
188 File[] files = new File(FILE_PREFIX).listFiles();
189 if (files != null) {
190 Arrays.sort(files);
191 for (File file : files) {
192 if (file.getName().endsWith(".xml")) {
193 lifecycles.add(new KPMEXmlDataLoaderLifecycle(FILE_PREFIX + file.getName()));
194 }
195 }
196 }
197 return lifecycles;
198 }
199
200 public class ClearCacheLifecycle extends BaseLifecycle {
201 private final Logger LOG = Logger.getLogger(ClearCacheLifecycle.class);
202
203 @Override
204 public void start() throws Exception {
205 long startTime = System.currentTimeMillis();
206 LOG.info("Starting cache flushing");
207 List<CacheManager> cms = new ArrayList<CacheManager>(CoreImplServiceLocator.getCacheManagerRegistry().getCacheManagers());
208 for (CacheManager cm : cms) {
209 for (String cacheName : cm.getCacheNames()) {
210
211 cm.getCache(cacheName).clear();
212 }
213 }
214 long endTime = System.currentTimeMillis();
215 LOG.info("Caches cleared in " + (endTime - startTime) + "ms");
216 }
217
218 @Override
219 public void stop() throws Exception {
220 super.stop();
221 }
222
223 }
224
225 public static String getBaseURL() {
226 return ConfigContext.getCurrentContextConfig().getProperty("application.url");
227 }
228
229 public static String getContext() {
230 return "/" + ConfigContext.getCurrentContextConfig().getProperty("app.context.name");
231 }
232
233 public static String getTempDir() {
234 return ConfigContext.getCurrentContextConfig().getProperty("temp.dir");
235 }
236
237 public static Integer getPort() {
238 return new Integer(ConfigContext.getCurrentContextConfig().getProperty("kns.test.port"));
239 }
240
241 }