[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