[jboss-cvs] JBossAS SVN: r88090 - in projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server: unit and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri May 1 00:31:26 EDT 2009
Author: ALRubinger
Date: 2009-05-01 00:31:26 -0400 (Fri, 01 May 2009)
New Revision: 88090
Added:
projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/LifecycleStateChangeCapturingEventHander.java
Modified:
projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/unit/ServerLifecycleEventCallbackTestCase.java
Log:
[JBBOOT-32] Test ALL Lifecycle States
Added: projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/LifecycleStateChangeCapturingEventHander.java
===================================================================
--- projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/LifecycleStateChangeCapturingEventHander.java (rev 0)
+++ projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/LifecycleStateChangeCapturingEventHander.java 2009-05-01 04:31:26 UTC (rev 88090)
@@ -0,0 +1,121 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.bootstrap.impl.base.server;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.jboss.bootstrap.spi.lifecycle.LifecycleEventException;
+import org.jboss.bootstrap.spi.lifecycle.LifecycleEventHandler;
+import org.jboss.bootstrap.spi.lifecycle.LifecycleState;
+import org.jboss.logging.Logger;
+
+/**
+ * LifecycleStateChangeCapturingEventHander
+ *
+ * Captures lifecycle state changes, adding to a list
+ * which may be consulted to ensure changes were encountered.
+ *
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class LifecycleStateChangeCapturingEventHander implements LifecycleEventHandler
+{
+ //-------------------------------------------------------------------------------------||
+ // Class Members ----------------------------------------------------------------------||
+ //-------------------------------------------------------------------------------------||
+
+ private static final Logger log = Logger.getLogger(LifecycleStateChangeCapturingEventHander.class);
+
+ //-------------------------------------------------------------------------------------||
+ // Instance Members -------------------------------------------------------------------||
+ //-------------------------------------------------------------------------------------||
+
+ /**
+ * The states for which we've received updates
+ */
+ private List<LifecycleState> statesEntered;
+
+ //-------------------------------------------------------------------------------------||
+ // Constructor ------------------------------------------------------------------------||
+ //-------------------------------------------------------------------------------------||
+
+ public LifecycleStateChangeCapturingEventHander()
+ {
+ this.setStatesEntered(new ArrayList<LifecycleState>());
+ }
+
+ //-------------------------------------------------------------------------------------||
+ // Required Implementations -----------------------------------------------------------||
+ //-------------------------------------------------------------------------------------||
+
+ /* (non-Javadoc)
+ * @see org.jboss.bootstrap.spi.lifecycle.LifecycleEventHandler#handleEvent(org.jboss.bootstrap.spi.server.Server, org.jboss.bootstrap.spi.lifecycle.LifecycleState)
+ */
+ public void handleEvent(LifecycleState state) throws LifecycleEventException
+ {
+ // Capture state
+ log.info("Capturing state: " + state);
+ this._getStatesEntered().add(state);
+ }
+
+ /**
+ * Returns an immutable view of the entered states
+ *
+ * @return the statesEntered
+ * @throws IllegalStateException If the backing list was not instanciated
+ */
+ public List<LifecycleState> getStatesEntered() throws IllegalStateException
+ {
+ // Get states
+ final List<LifecycleState> statesEntered = this._getStatesEntered();
+ return Collections.unmodifiableList(statesEntered);
+ }
+
+ /**
+ * Returns an immutable view of the entered states
+ *
+ * @return the statesEntered
+ * @throws IllegalStateException If the backing list was not instanciated
+ */
+ private List<LifecycleState> _getStatesEntered() throws IllegalStateException
+ {
+ // Get states
+ final List<LifecycleState> statesEntered = this.statesEntered;
+ if (statesEntered == null)
+ {
+ throw new IllegalStateException("States entered was never instanciated");
+ }
+ return statesEntered;
+ }
+
+ /**
+ * @param statesEntered the statesEntered to set
+ */
+ private void setStatesEntered(List<LifecycleState> statesEntered)
+ {
+ this.statesEntered = statesEntered;
+ }
+
+}
Modified: projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/unit/ServerLifecycleEventCallbackTestCase.java
===================================================================
--- projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/unit/ServerLifecycleEventCallbackTestCase.java 2009-05-01 03:45:17 UTC (rev 88089)
+++ projects/bootstrap/trunk/impl-base/src/test/java/org/jboss/bootstrap/impl/base/server/unit/ServerLifecycleEventCallbackTestCase.java 2009-05-01 04:31:26 UTC (rev 88090)
@@ -22,12 +22,13 @@
package org.jboss.bootstrap.impl.base.server.unit;
+import java.util.EnumSet;
+import java.util.List;
+
import junit.framework.TestCase;
-import org.jboss.bootstrap.impl.base.server.LifecycleStateTracker;
-import org.jboss.bootstrap.impl.base.server.LifecycleStateUpdatingEventHander;
+import org.jboss.bootstrap.impl.base.server.LifecycleStateChangeCapturingEventHander;
import org.jboss.bootstrap.impl.base.server.TestNoOpServer;
-import org.jboss.bootstrap.spi.lifecycle.LifecycleEventHandler;
import org.jboss.bootstrap.spi.lifecycle.LifecycleState;
import org.jboss.logging.Logger;
import org.junit.After;
@@ -54,7 +55,7 @@
/**
* Message used in test failures
*/
- private static final String FAIL_MESSAGE = "Callback was not handled";
+ private static final String FAIL_MESSAGE = "Expected Callbacs(s) not received or in wrong order";
/**
* The Idle State
@@ -66,16 +67,19 @@
*/
private static final LifecycleState STARTED = LifecycleState.STARTED;
+ /**
+ * Expected order of states through full lifecycle. Excludes {@link LifecycleState#PRE_INIT}
+ * because this is not a state *change* but an init value, so we test for it separately.
+ */
+ private static final LifecycleState[] EXPECTED_FULL_LIFECYCLE_STATES = new LifecycleState[]
+ {LifecycleState.IDLE, LifecycleState.STARTING, LifecycleState.STARTED, LifecycleState.STOPPING,
+ LifecycleState.STOPPED, LifecycleState.IDLE};
+
//-------------------------------------------------------------------------------------||
// Instance Members -------------------------------------------------------------------||
//-------------------------------------------------------------------------------------||
/**
- * POJO used to track state changes via the callback handlers
- */
- private LifecycleStateTracker tracker;
-
- /**
* Server used to test callbacks
*/
private TestNoOpServer server;
@@ -83,7 +87,7 @@
/**
* Event handler
*/
- private LifecycleEventHandler handler;
+ private LifecycleStateChangeCapturingEventHander handler;
//-------------------------------------------------------------------------------------||
// Lifecycle --------------------------------------------------------------------------||
@@ -95,9 +99,8 @@
@Before
public void init()
{
- tracker = new LifecycleStateTracker();
server = new TestNoOpServer();
- handler = new LifecycleStateUpdatingEventHander(tracker);
+ handler = new LifecycleStateChangeCapturingEventHander();
}
/**
@@ -107,8 +110,8 @@
public void cleanup()
{
// Null out
- tracker = null;
server = null;
+ handler = null;
}
//-------------------------------------------------------------------------------------||
@@ -122,31 +125,31 @@
public void testLifecycleCallbacks() throws Throwable
{
// Log
- log.info("testIdleCallback");
+ log.info("testLifecycleCallbacks");
- // Register the handler with events
- server.registerEventHandler(handler, IDLE, STARTED);
+ // Get the server
+ final TestNoOpServer server = this.server;
- // Test no initial state
- TestCase.assertNull(tracker.getState());
+ // Register the handler with all events
+ server.registerEventHandler(handler, EnumSet.allOf(LifecycleState.class));
- // Init the server
- server.initialize();
-
- // Test for idle
- TestCase.assertEquals(FAIL_MESSAGE, IDLE, tracker.getState());
-
- // Start server
+ // Put server through full lifecycle
server.start();
+ server.shutdown();
- // Test for started
- TestCase.assertEquals(FAIL_MESSAGE, STARTED, tracker.getState());
+ // Get the captured events
+ final List<LifecycleState> statesCaptured = this.handler.getStatesEntered();
- // Shutdown server
- server.shutdown();
+ // For each expected
+ for (int i = 0; i < EXPECTED_FULL_LIFECYCLE_STATES.length; i++)
+ {
+ // Test
+ final LifecycleState expected = EXPECTED_FULL_LIFECYCLE_STATES[i];
+ final LifecycleState next = statesCaptured.get(i);
+ log.info("Testing for expected state change: " + expected);
+ TestCase.assertEquals(FAIL_MESSAGE, expected, next);
+ }
- // Test for idle
- TestCase.assertEquals(FAIL_MESSAGE, IDLE, tracker.getState());
}
/**
@@ -158,30 +161,34 @@
// Log
log.info("testLifecycleUnregistration");
- // Register the handler with events
- server.registerEventHandler(handler, IDLE, STARTED);
+ // Get the server
+ final TestNoOpServer server = this.server;
- // Test no initial state
- TestCase.assertNull(tracker.getState());
+ // Register the handler with all events
+ server.registerEventHandler(handler, EnumSet.allOf(LifecycleState.class));
- // Init the server
- server.initialize();
+ // Unregister "STARTED"
+ boolean unregistered = server.unregisterEventHandler(handler, LifecycleState.STARTED);
- // Test for idle
- TestCase.assertEquals(FAIL_MESSAGE, IDLE, tracker.getState());
+ // Test reports unregistered
+ TestCase.assertTrue("Server should report handler as unregisered", unregistered);
- // Unregister the STARTED callback
- final boolean wasUnregistered = server.unregisterEventHandler(handler, STARTED);
- TestCase.assertTrue("The server reports that the callback was not unregistered", wasUnregistered);
+ // Unregister "STARTED" again so we can get a false return
+ unregistered = server.unregisterEventHandler(handler, LifecycleState.STARTED);
- // Start server
+ // Test reports unregistered
+ TestCase.assertFalse("Already unregisered handler should not be reported as unregistered again", unregistered);
+
+ // Put server through full lifecycle
server.start();
+ server.shutdown();
- // Test that state is still "IDLE" (as we've cancelled the callback)
- TestCase.assertEquals(FAIL_MESSAGE, IDLE, tracker.getState());
+ // Get the captured events
+ final List<LifecycleState> statesCaptured = this.handler.getStatesEntered();
- // Shutdown server to clean up
- server.shutdown();
+ // Test that "STARTED" was not received
+ TestCase.assertFalse("Unregistered event should not have been captured", statesCaptured
+ .contains(LifecycleState.STARTED));
}
}
More information about the jboss-cvs-commits
mailing list