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 }