[jboss-cvs] JBossAS SVN: r101877 - in projects/kernel/trunk: dependency/src/test/java/org/jboss/test/dependency/controller/test and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Mar 4 13:00:00 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-03-04 12:59:59 -0500 (Thu, 04 Mar 2010)
New Revision: 101877
Added:
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ContextInControllerWithLessStatesThanParentTestCase.java
Modified:
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/MapControllerStateModel.java
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerStateModelTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/DependencyTestSuite.java
Log:
[JBKERNEL-107] Make sure that the indexed ControllerStateWrappers are for the state model in question
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/MapControllerStateModel.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/MapControllerStateModel.java 2010-03-04 17:54:25 UTC (rev 101876)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/MapControllerStateModel.java 2010-03-04 17:59:59 UTC (rev 101877)
@@ -29,6 +29,7 @@
import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.ControllerStateModel;
/**
* Map based controller state model.
@@ -78,7 +79,7 @@
index = next.getIndex();
}
- ControllerStateWrapper newState = new ControllerStateWrapper(state, index, previous, next);
+ ControllerStateWrapper newState = new ControllerStateWrapper(this, state, index, previous, next);
//Add the state so that calls to isValid() can return successfully
states.put(state, newState);
@@ -128,7 +129,11 @@
if (state == null)
throw new IllegalArgumentException("Null state");
if (state instanceof ControllerStateWrapper)
- return (ControllerStateWrapper)state;
+ {
+ ControllerStateWrapper wrapper = (ControllerStateWrapper)state;
+ if (wrapper.owner == this)
+ return wrapper;
+ }
ControllerStateWrapper found = states.get(state);
if (found == null && !allowNotFound)
@@ -199,13 +204,15 @@
{
private static final long serialVersionUID = 1L;
+ final ControllerStateModel owner;
volatile int index;
volatile ControllerStateWrapper before;
volatile ControllerStateWrapper after;
- public ControllerStateWrapper(ControllerState state, int index, ControllerStateWrapper before, ControllerStateWrapper after)
+ public ControllerStateWrapper(ControllerStateModel owner, ControllerState state, int index, ControllerStateWrapper before, ControllerStateWrapper after)
{
super(state.getStateString(), false);
+ this.owner = owner;
this.index = index;
this.before = before;
this.after = after;
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java 2010-03-04 17:54:25 UTC (rev 101876)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java 2010-03-04 17:59:59 UTC (rev 101877)
@@ -114,6 +114,7 @@
{
underlyingController.removeControllerContext(context);
context.setController(this);
+ context.setRequiredState(indexState(context.getRequiredState()));
registerControllerContext(context);
}
catch (Throwable t)
@@ -121,6 +122,7 @@
// put the context back to original
context.setController(underlyingController);
underlyingController.addControllerContext(context);
+ context.setRequiredState(underlyingController.indexState(context.getRequiredState()));
// rethrow
if (t instanceof RuntimeException)
throw (RuntimeException)t;
@@ -145,6 +147,7 @@
{
unregisterControllerContext(context);
context.setController(underlyingController);
+ context.setRequiredState(underlyingController.indexState(context.getRequiredState()));
underlyingController.addControllerContext(context);
}
finally
Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerStateModelTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerStateModelTestCase.java 2010-03-04 17:54:25 UTC (rev 101876)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerStateModelTestCase.java 2010-03-04 17:59:59 UTC (rev 101877)
@@ -27,6 +27,7 @@
import org.jboss.dependency.plugins.ListControllerStateModel;
import org.jboss.dependency.plugins.MapControllerStateModel;
import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.ControllerStateModel;
/**
* Test to try out a new ControllerStateModel implementation
@@ -53,6 +54,7 @@
super(name);
}
+
public void testMapControllerStateModel() throws Exception
{
runControllerStateModelTest(ControllerStateModelFactory.MAP);
@@ -204,7 +206,67 @@
//TODO test list iterator
}
+ public void testStatesAcrossMapControllerStateModel() throws Throwable
+ {
+ testStatesAcrossExistingControllerStateModel(ControllerStateModelFactory.MAP);
+ }
+ public void testStatesAcrossExistingControllerStateModel() throws Throwable
+ {
+ testStatesAcrossExistingControllerStateModel(ControllerStateModelFactory.EXISITING);
+ }
+
+ public void testStatesAcrossExistingControllerStateModel(ControllerStateModelFactory factory) throws Throwable
+ {
+ AbstractControllerStateModel model1 = factory.createControllerStateModel();
+ AbstractControllerStateModel model2 = factory.createControllerStateModel();
+
+ //Add the states
+ ControllerState state1 = ControllerState.newState("1");
+ model1.addState(state1, null);
+ model2.addState(state1, null);
+
+ ControllerState stateB = ControllerState.newState("B");
+ model1.addState(stateB, null);
+
+ ControllerState state2 = ControllerState.newState("2");
+ model1.addState(state2, null);
+ model2.addState(state2, null);
+
+ //Make sure the state B only exists in the parent controller
+ ControllerState state11 = model1.getInitialState();
+ assertEquals(state1, state11);
+ ControllerState state1B = model1.getNextState(state11);
+ assertEquals(stateB, state1B);
+ ControllerState state12 = model1.getNextState(state1B);
+ assertEquals(state2, state12);
+ assertNull(model1.getNextState(state12));
+
+ assertEquals(state2, model2.getNextState(state11));
+
+ assertEquals(stateB, model1.getPreviousState(state12));
+ assertEquals(state11, model1.getPreviousState(stateB));
+
+ assertEquals(state11, model2.getPreviousState(state12));
+
+
+ AbstractControllerStateModel model3 = factory.createControllerStateModel();
+ AbstractControllerStateModel model4 = factory.createControllerStateModel();
+ model3.addState(state1, null);
+ model3.addState(state2, null);
+ model4.addState(state2, null);
+ model4.addState(state1, null);
+
+ ControllerState state31 = model3.indexState(state1);
+ ControllerState state32 = model3.indexState(state2);
+ assertTrue(model3.isBeforeState(state31, state32));
+ assertFalse(model3.isAfterState(state31, state32));
+
+ assertFalse(model4.isBeforeState(state31, state32));
+ assertTrue(model4.isAfterState(state31, state32));
+ }
+
+
public void testBenchmarkMapControllerStateModel() throws Throwable
{
benchmarkControllerStateModel(ControllerStateModelFactory.MAP);
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ContextInControllerWithLessStatesThanParentTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ContextInControllerWithLessStatesThanParentTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ContextInControllerWithLessStatesThanParentTestCase.java 2010-03-04 17:59:59 UTC (rev 101877)
@@ -0,0 +1,99 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, 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.test.kernel.dependency.test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.jboss.beans.metadata.plugins.AbstractAnnotationMetaData;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.AnnotationMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.metadata.plugins.scope.DeploymentScope;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.kernel.AbstractKernelTest;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ContextInControllerWithLessStatesThanParentTestCase extends OldAbstractKernelDependencyTest
+{
+ public ContextInControllerWithLessStatesThanParentTestCase(String name) throws Throwable
+ {
+ super(name, false, true);
+ }
+
+ public static Test suite()
+ {
+ return suite(ContextInControllerWithLessStatesThanParentTestCase.class);
+ }
+
+ public void testInstallContext() throws Throwable
+ {
+ ControllerState extraState = ControllerState.newState("EXTRA");
+ Controller main = getUtil().getKernel().getController();
+ main.addState(extraState, ControllerState.INSTALLED);
+
+ createBeanMetaData();
+
+ ControllerContext context = assertInstall(0, "Test");
+ assertNotSame(main, context.getController());
+ }
+
+ public void testUninstallContext() throws Throwable
+ {
+ Controller main = getUtil().getKernel().getController();
+ createBeanMetaData();
+
+ ControllerContext context = assertInstall(0, "Test");
+ assertNotSame(main, context.getController());
+
+ ControllerState extraState = ControllerState.newState("EXTRA");
+ main.addState(extraState, ControllerState.INSTALLED);
+
+ uninstall("Test");
+
+ System.out.println("Done");
+ }
+
+ private void createBeanMetaData()
+ {
+ BeanMetaData bmd = new AbstractBeanMetaData("Test", Object.class.getName());
+ Set<AnnotationMetaData> annotations = new HashSet<AnnotationMetaData>();
+ annotations.add(new AbstractAnnotationMetaData("@" + DeploymentScope.class.getName() + "(\"somedeployment\")"));
+ bmd.setAnnotations(annotations);
+ setBeanMetaDatas(new BeanMetaData[] {bmd});
+ }
+
+ public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+ {
+ return new AbstractTestDelegate(clazz);
+ }
+
+}
Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/DependencyTestSuite.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/DependencyTestSuite.java 2010-03-04 17:54:25 UTC (rev 101876)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/DependencyTestSuite.java 2010-03-04 17:59:59 UTC (rev 101877)
@@ -126,6 +126,7 @@
suite.addTest(OptionalAnnotationTestCase.suite());
suite.addTest(DependsOnMeCleanupTestCase.suite());
suite.addTest(ScopedDependsOnMeCleanupTestCase.suite());
+ suite.addTest(ContextInControllerWithLessStatesThanParentTestCase.suite());
return suite;
}
}
More information about the jboss-cvs-commits
mailing list