/* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opensymphony.xwork2.util.profiling; import junit.framework.TestCase; /** * @author tmjee * @version $Date$ $Id$ */ public class UtilTimerStackTest extends TestCase { protected String activateProp; protected String minTimeProp; public void testActivateInactivate() throws Exception { UtilTimerStack.setActive(true); assertTrue(UtilTimerStack.isActive()); UtilTimerStack.setActive(false); assertFalse(UtilTimerStack.isActive()); } public void testPushPop() throws Exception { UtilTimerStack.push("p1"); Thread.sleep(1050); ProfilingTimerBean bean = UtilTimerStack.current.get(); assertTrue(bean.startTime > 0); UtilTimerStack.pop("p1"); assertTrue(bean.totalTime > 1000); } public void testProfileCallback() throws Exception { MockProfilingBlock<String> block = new MockProfilingBlock<String>() { @Override public String performProfiling() throws Exception { Thread.sleep(1050); return "OK"; } }; String result = UtilTimerStack.profile("p1", block); assertEquals(result, "OK"); assertNotNull(block.getProfilingTimerBean()); assertTrue(block.getProfilingTimerBean().totalTime >= 1000); } public void testProfileCallbackThrowsException() throws Exception { try { UtilTimerStack.profile("p1", new UtilTimerStack.ProfilingBlock<String>() { public String doProfiling() throws Exception { throw new RuntimeException("test"); } }); fail("exception should have been thrown"); } catch (Exception e) { assertTrue(true); } } @Override protected void setUp() throws Exception { super.setUp(); activateProp = System.getProperty(UtilTimerStack.ACTIVATE_PROPERTY); minTimeProp = System.getProperty(UtilTimerStack.MIN_TIME); System.setProperty(UtilTimerStack.ACTIVATE_PROPERTY, "true"); UtilTimerStack.setActive(true); System.setProperty(UtilTimerStack.MIN_TIME, "0"); } @Override protected void tearDown() throws Exception { if (activateProp != null) { System.setProperty(UtilTimerStack.ACTIVATE_PROPERTY, activateProp); } else { System.clearProperty(UtilTimerStack.ACTIVATE_PROPERTY); } if (minTimeProp != null) { System.setProperty(UtilTimerStack.MIN_TIME, minTimeProp); } else { System.clearProperty(UtilTimerStack.ACTIVATE_PROPERTY); } activateProp = null; minTimeProp = null; super.tearDown(); } public abstract class MockProfilingBlock<T> implements UtilTimerStack.ProfilingBlock<T> { private ProfilingTimerBean bean; public T doProfiling() throws Exception { bean = UtilTimerStack.current.get(); return performProfiling(); } public ProfilingTimerBean getProfilingTimerBean() { return bean; } public abstract T performProfiling() throws Exception; } }