Author: pete.muir(a)jboss.org
Date: 2009-09-25 12:27:20 -0400 (Fri, 25 Sep 2009)
New Revision: 3785
Added:
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockLifecycle.java
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/TestContainer.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/Foo.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/NaiveClusterTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableContainerTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableSingletonProvider.java
Modified:
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java
ri/trunk/tests/src/main/java/org/jboss/webbeans/test/harness/AbstractStandaloneContainersImpl.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/DiscoverFailsBootstrapTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InjectionServicesTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/WBStartupTest.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/environments/servlet/ServletEnvironmentTest.java
Log:
Extract test bootstrap code to TestContainer, use it, and start on a naive cluster test
Added: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockLifecycle.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockLifecycle.java
(rev 0)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockLifecycle.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,24 @@
+package org.jboss.webbeans.mock;
+
+import org.jboss.webbeans.bootstrap.api.Lifecycle;
+
+public interface MockLifecycle extends Lifecycle
+{
+
+ public abstract void initialize();
+
+ public abstract void beginApplication();
+
+ public abstract void endApplication();
+
+ public abstract void resetContexts();
+
+ public abstract void beginRequest();
+
+ public abstract void endRequest();
+
+ public abstract void beginSession();
+
+ public abstract void endSession();
+
+}
\ No newline at end of file
Property changes on:
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockLifecycle.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java
===================================================================
---
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/MockServletLifecycle.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -11,7 +11,7 @@
import org.jboss.webbeans.resources.spi.ResourceLoader;
import org.jboss.webbeans.servlet.api.ServletServices;
-public class MockServletLifecycle extends ForwardingLifecycle
+public class MockServletLifecycle extends ForwardingLifecycle implements MockLifecycle
{
private static final ResourceLoader MOCK_RESOURCE_LOADER = new MockResourceLoader();
@@ -35,6 +35,9 @@
deployment.getServices().add(ServletServices.class, new
MockServletServices(deployment.getArchive()));
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#initialize()
+ */
public void initialize()
{
try
@@ -53,21 +56,28 @@
return lifecycle;
}
- public MockDeployment getDeployment()
+ protected MockDeployment getDeployment()
{
return deployment;
}
- public WebBeansBootstrap getBootstrap()
+ protected WebBeansBootstrap getBootstrap()
{
return bootstrap;
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#beginApplication()
+ */
public void beginApplication()
{
bootstrap.startInitialization().deployBeans().validateBeans().endInitialization();
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#endApplication()
+ */
+ @Override
public void endApplication()
{
bootstrap.shutdown();
@@ -78,33 +88,48 @@
return applicationBeanStore;
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#resetContexts()
+ */
public void resetContexts()
{
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#beginRequest()
+ */
public void beginRequest()
{
super.beginRequest("Mock", requestBeanStore);
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#endRequest()
+ */
public void endRequest()
{
super.endRequest("Mock", requestBeanStore);
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#beginSession()
+ */
public void beginSession()
{
super.restoreSession("Mock", sessionBeanStore);
}
+ /* (non-Javadoc)
+ * @see org.jboss.webbeans.mock.MockLifecycle#endSession()
+ */
public void endSession()
{
// TODO Conversation handling breaks this :-(
//super.endSession("Mock", sessionBeanStore);
}
- public Environment getEnvironment()
+ protected Environment getEnvironment()
{
return Environments.SERVLET;
}
Added: ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/TestContainer.java
===================================================================
--- ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/TestContainer.java
(rev 0)
+++ ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/TestContainer.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,142 @@
+package org.jboss.webbeans.mock;
+
+import java.net.URL;
+
+import org.jboss.webbeans.BeanManagerImpl;
+
+/**
+ * Control of the container, used for tests. Wraps up common operations.
+ *
+ * @author pmuir
+ *
+ */
+public class TestContainer
+{
+
+ public static class Status
+ {
+
+ private final Exception deploymentException;
+
+ public Status(Exception deploymentException)
+ {
+ this.deploymentException = deploymentException;
+ }
+
+ public Exception getDeploymentException()
+ {
+ return deploymentException;
+ }
+
+ public boolean isSuccess()
+ {
+ return deploymentException == null;
+ }
+
+ }
+
+ private final MockServletLifecycle lifecycle;
+ private final Iterable<Class<?>> classes;
+ private final Iterable<URL> beansXml;
+
+ /**
+ * Create a container, specifying the classes and beans.xml to deploy
+ *
+ * @param lifecycle
+ * @param classes
+ * @param beansXml
+ */
+ public TestContainer(MockServletLifecycle lifecycle, Iterable<Class<?>>
classes, Iterable<URL> beansXml)
+ {
+ this.lifecycle = lifecycle;
+ this.classes = classes;
+ this.beansXml = beansXml;
+ }
+
+ /**
+ * Start the container, returning the container state
+ *
+ * @return
+ */
+ public Status startContainerAndReturnStatus()
+ {
+ try
+ {
+ startContainer();
+ }
+ catch (Exception e)
+ {
+ return new Status(e);
+ }
+ return new Status(null);
+ }
+
+ public void startContainer()
+ {
+ MockBeanDeploymentArchive archive = lifecycle.getDeployment().getArchive();
+ archive.setBeanClasses(classes);
+ if (beansXml != null)
+ {
+ archive.setWebBeansXmlFiles(beansXml);
+ }
+ lifecycle.initialize();
+ lifecycle.beginApplication();
+ }
+
+ /**
+ * Get the context lifecycle, allowing fine control over the contexts' state
+ *
+ * @return
+ */
+ public MockLifecycle getLifecycle()
+ {
+ return lifecycle;
+ }
+
+ public BeanManagerImpl getBeanManager()
+ {
+ return lifecycle.getBootstrap().getManager(getDeployment().getArchive());
+ }
+
+ public MockDeployment getDeployment()
+ {
+ return lifecycle.getDeployment();
+ }
+
+ /**
+ * Utility method which ensures a request is active and available for use
+ *
+ */
+ public void ensureRequestActive()
+ {
+ if (!lifecycle.isSessionActive())
+ {
+ lifecycle.beginSession();
+ }
+ if (!lifecycle.isRequestActive())
+ {
+ lifecycle.beginRequest();
+ }
+ }
+
+ /**
+ * Clean up the container, ending any active contexts
+ *
+ */
+ public void stopContainer()
+ {
+ if (lifecycle.isRequestActive())
+ {
+ lifecycle.endRequest();
+ }
+ if (lifecycle.isSessionActive())
+ {
+ lifecycle.endSession();
+ }
+ if (lifecycle.isApplicationActive())
+ {
+ lifecycle.endApplication();
+ }
+ }
+
+}
\ No newline at end of file
Property changes on:
ri/trunk/tests/src/main/java/org/jboss/webbeans/mock/TestContainer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
ri/trunk/tests/src/main/java/org/jboss/webbeans/test/harness/AbstractStandaloneContainersImpl.java
===================================================================
---
ri/trunk/tests/src/main/java/org/jboss/webbeans/test/harness/AbstractStandaloneContainersImpl.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/main/java/org/jboss/webbeans/test/harness/AbstractStandaloneContainersImpl.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -4,39 +4,33 @@
import org.jboss.testharness.api.DeploymentException;
import org.jboss.testharness.spi.StandaloneContainers;
-import org.jboss.webbeans.mock.MockBeanDeploymentArchive;
import org.jboss.webbeans.mock.MockServletLifecycle;
+import org.jboss.webbeans.mock.TestContainer;
+import org.jboss.webbeans.mock.TestContainer.Status;
public abstract class AbstractStandaloneContainersImpl implements StandaloneContainers
{
private DeploymentException deploymentException;
+
+ private TestContainer testContainer;
- private MockServletLifecycle lifecycle;
-
public boolean deploy(Iterable<Class<?>> classes, Iterable<URL>
beansXml)
{
- this.lifecycle = newLifecycle();
+ this.testContainer = new TestContainer(newLifecycle(), classes, beansXml);
- try
+ Status status = testContainer.startContainerAndReturnStatus();
+ if (!status.isSuccess())
{
- MockBeanDeploymentArchive archive = lifecycle.getDeployment().getArchive();
- archive.setBeanClasses(classes);
- if (beansXml != null)
- {
- archive.setWebBeansXmlFiles(beansXml);
- }
- lifecycle.initialize();
- lifecycle.beginApplication();
+ this.deploymentException = new DeploymentException("Error deploying
beans", status.getDeploymentException());
+ return false;
}
- catch (Exception e)
+ else
{
- this.deploymentException = new DeploymentException("Error deploying
beans", e);
- return false;
+ testContainer.getLifecycle().beginSession();
+ testContainer.getLifecycle().beginRequest();
+ return true;
}
- lifecycle.beginSession();
- lifecycle.beginRequest();
- return true;
}
protected abstract MockServletLifecycle newLifecycle();
@@ -64,10 +58,8 @@
public void undeploy()
{
- lifecycle.endRequest();
- lifecycle.endSession();
- lifecycle.endApplication();
- lifecycle = null;
+ testContainer.stopContainer();
+ testContainer = null;
deploymentException = null;
}
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/DiscoverFailsBootstrapTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/DiscoverFailsBootstrapTest.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/DiscoverFailsBootstrapTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -1,6 +1,9 @@
package org.jboss.webbeans.test.unit.bootstrap;
-import org.jboss.webbeans.mock.MockEELifecycle;
+import org.jboss.webbeans.bootstrap.WebBeansBootstrap;
+import org.jboss.webbeans.bootstrap.api.Bootstrap;
+import org.jboss.webbeans.bootstrap.api.Environments;
+import org.jboss.webbeans.context.api.helpers.ConcurrentHashMapBeanStore;
import org.testng.annotations.Test;
public class DiscoverFailsBootstrapTest
@@ -9,10 +12,8 @@
@Test(groups="bootstrap",
expectedExceptions=IllegalArgumentException.class)
public void testDiscoverFails()
{
- MockEELifecycle lifecycle = new MockEELifecycle();
- lifecycle.getBootstrap().startContainer(lifecycle.getEnvironment(), null,
lifecycle.getApplicationBeanStore());
- lifecycle.initialize();
- lifecycle.beginApplication();
+ Bootstrap bootstrap = new WebBeansBootstrap();
+ bootstrap.startContainer(Environments.SE, null, new ConcurrentHashMapBeanStore());
}
}
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InjectionServicesTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InjectionServicesTest.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/InjectionServicesTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -7,24 +7,22 @@
import org.jboss.webbeans.injection.spi.InjectionServices;
import org.jboss.webbeans.mock.MockEELifecycle;
+import org.jboss.webbeans.mock.TestContainer;
import org.testng.annotations.Test;
public class InjectionServicesTest
{
@Test
- public void testDiscoverFails()
+ public void testInjectionOfTarget()
{
- MockEELifecycle lifecycle = new MockEELifecycle();
- lifecycle.getDeployment().getArchive().setBeanClasses(Arrays.asList(Foo.class,
Bar.class));
+ TestContainer container = new TestContainer(new MockEELifecycle(),
Arrays.asList(Foo.class, Bar.class), null);
CheckableInjectionServices ijs = new CheckableInjectionServices();
- lifecycle.getDeployment().getArchive().getServices().add(InjectionServices.class,
ijs);
- lifecycle.initialize();
- lifecycle.beginApplication();
- lifecycle.beginSession();
- lifecycle.beginRequest();
+ container.getDeployment().getArchive().getServices().add(InjectionServices.class,
ijs);
+ container.startContainer();
+ container.ensureRequestActive();
- BeanManager manager =
lifecycle.getBootstrap().getManager(lifecycle.getDeployment().getArchive());
+ BeanManager manager = container.getBeanManager();
Bean<? extends Object> bean = manager.resolve(manager.getBeans(Foo.class));
ijs.reset();
@@ -39,9 +37,7 @@
assert foo.getMessage().equals("hi!");
- lifecycle.endRequest();
- lifecycle.endSession();
- lifecycle.endApplication();
+ container.stopContainer();
}
}
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/WBStartupTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/WBStartupTest.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/bootstrap/WBStartupTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -22,6 +22,7 @@
import javax.enterprise.inject.spi.BeanManager;
import org.jboss.webbeans.mock.MockEELifecycle;
+import org.jboss.webbeans.mock.TestContainer;
import org.testng.annotations.Test;
/**
@@ -34,14 +35,11 @@
@Test
public void test()
{
- MockEELifecycle lifecycle = new MockEELifecycle();
- lifecycle.getDeployment().getArchive().setBeanClasses(Arrays.asList(Foo.class,
Bar.class));
- lifecycle.initialize();
- lifecycle.beginApplication();
- lifecycle.beginSession();
- lifecycle.beginRequest();
+ TestContainer container = new TestContainer(new MockEELifecycle(),
Arrays.asList(Foo.class, Bar.class), null);
+ container.startContainer();
+ container.ensureRequestActive();
- BeanManager manager =
lifecycle.getBootstrap().getManager(lifecycle.getDeployment().getArchive());
+ BeanManager manager = container.getBeanManager();
Bean<? extends Object> bean = manager.resolve(manager.getBeans(Foo.class));
Foo foo = (Foo) manager.getReference(bean, Foo.class,
manager.createCreationalContext(bean));
@@ -49,10 +47,7 @@
assert foo != null;
assert foo.getBar() != null;
-
- lifecycle.endRequest();
- lifecycle.endSession();
- lifecycle.endApplication();
+ container.stopContainer();
}
}
Added: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/Foo.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/Foo.java
(rev 0)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/Foo.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,23 @@
+package org.jboss.webbeans.test.unit.cluster;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+
+@SessionScoped
+public class Foo implements Serializable
+{
+
+ private String name;
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+}
Property changes on:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/Foo.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/NaiveClusterTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/NaiveClusterTest.java
(rev 0)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/NaiveClusterTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,82 @@
+package org.jboss.webbeans.test.unit.cluster;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+
+import javax.enterprise.inject.spi.Bean;
+
+import org.jboss.webbeans.BeanManagerImpl;
+import org.jboss.webbeans.bootstrap.api.SingletonProvider;
+import org.jboss.webbeans.context.ContextLifecycle;
+import org.jboss.webbeans.context.api.BeanStore;
+import org.jboss.webbeans.mock.MockEELifecycle;
+import org.jboss.webbeans.mock.TestContainer;
+import org.testng.annotations.Test;
+
+public class NaiveClusterTest
+{
+
+ @Test
+ public void testSessionReplication() throws Exception
+ {
+ SingletonProvider.initialize(new SwitchableSingletonProvider());
+
+ // Bootstrap container 1
+ SwitchableSingletonProvider.use(1);
+
+ TestContainer container1 = new TestContainer(new MockEELifecycle(),
Arrays.<Class<?>>asList(Foo.class), null);
+ container1.startContainer();
+ container1.ensureRequestActive();
+
+ BeanManagerImpl beanManager1 = container1.getBeanManager();
+ Bean<?> fooBean1 = beanManager1.resolve(beanManager1.getBeans(Foo.class));
+
+ // Bootstrap container 2
+ SwitchableSingletonProvider.use(2);
+
+ TestContainer container2 = new TestContainer(new MockEELifecycle(),
Arrays.<Class<?>>asList(Foo.class), null);
+ container2.startContainer();
+ container2.ensureRequestActive();
+
+ BeanManagerImpl beanManager2 = container2.getBeanManager();
+ Bean<?> fooBean2 = beanManager2.resolve(beanManager2.getBeans(Foo.class));
+
+ SwitchableSingletonProvider.use(1);
+ // Set a value into Foo1
+ Foo foo1 = (Foo) beanManager1.getReference(fooBean1, Foo.class,
beanManager1.createCreationalContext(fooBean1));
+ foo1.setName("container 1");
+
+ replicateSession(beanManager1, beanManager2);
+
+ SwitchableSingletonProvider.use(2);
+ Foo foo2 = (Foo) beanManager2.getReference(fooBean2, Foo.class,
beanManager2.createCreationalContext(fooBean2));
+ assert foo2.getName().equals("container 1");
+ }
+
+ private void replicateSession(BeanManagerImpl beanManager1, BeanManagerImpl
beanManager2) throws Exception
+ {
+ // Mimic replicating the session
+ BeanStore sessionBeanStore =
beanManager1.getServices().get(ContextLifecycle.class).getSessionContext().getBeanStore();
+ BeanStore replicatedSessionBeanStore = (BeanStore)
deserialize(serialize(sessionBeanStore));
+
beanManager2.getServices().get(ContextLifecycle.class).getSessionContext().setBeanStore(replicatedSessionBeanStore);
+ }
+
+ protected byte[] serialize(Object instance) throws IOException
+ {
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(bytes);
+ out.writeObject(instance);
+ return bytes.toByteArray();
+ }
+
+ protected Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException
+ {
+ ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
+ return in.readObject();
+ }
+
+}
Property changes on:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/NaiveClusterTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableContainerTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableContainerTest.java
(rev 0)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableContainerTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,56 @@
+package org.jboss.webbeans.test.unit.cluster;
+
+import java.util.Arrays;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+
+import org.jboss.webbeans.bootstrap.api.SingletonProvider;
+import org.jboss.webbeans.mock.MockEELifecycle;
+import org.jboss.webbeans.mock.TestContainer;
+import org.testng.annotations.Test;
+
+public class SwitchableContainerTest
+{
+
+ @Test
+ public void test()
+ {
+ SingletonProvider.initialize(new SwitchableSingletonProvider());
+
+ // Bootstrap container 1
+ SwitchableSingletonProvider.use(1);
+
+ TestContainer container1 = new TestContainer(new MockEELifecycle(),
Arrays.<Class<?>>asList(Foo.class), null);
+ container1.startContainer();
+ container1.ensureRequestActive();
+
+ BeanManager beanManager1 = container1.getBeanManager();
+ Bean<?> fooBean1 = beanManager1.resolve(beanManager1.getBeans(Foo.class));
+ Foo foo1 = (Foo) beanManager1.getReference(fooBean1, Foo.class,
beanManager1.createCreationalContext(fooBean1));
+ foo1.setName("container 1");
+
+ // Bootstrap container 2
+ SwitchableSingletonProvider.use(2);
+
+ TestContainer container2 = new TestContainer(new MockEELifecycle(),
Arrays.<Class<?>>asList(Foo.class), null);
+ container2.startContainer();
+ container2.ensureRequestActive();
+
+ BeanManager beanManager2 = container2.getBeanManager();
+ Bean<?> fooBean2 = beanManager2.resolve(beanManager2.getBeans(Foo.class));
+ Foo foo2 = (Foo) beanManager2.getReference(fooBean2, Foo.class,
beanManager2.createCreationalContext(fooBean2));
+ foo2.setName("container 2");
+
+ // Switch to container 1 and check value
+ SwitchableSingletonProvider.use(1);
+ foo1 = (Foo) beanManager1.getReference(fooBean1, Foo.class,
beanManager1.createCreationalContext(fooBean1));
+ assert foo1.getName().equals("container 1");
+
+ // Switch to container 2 and check value
+ SwitchableSingletonProvider.use(2);
+ foo2 = (Foo) beanManager2.getReference(fooBean2, Foo.class,
beanManager2.createCreationalContext(fooBean2));
+ assert foo2.getName().equals("container 2");
+ }
+
+}
Property changes on:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableContainerTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableSingletonProvider.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableSingletonProvider.java
(rev 0)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableSingletonProvider.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -0,0 +1,61 @@
+package org.jboss.webbeans.test.unit.cluster;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.jboss.webbeans.bootstrap.api.Singleton;
+import org.jboss.webbeans.bootstrap.api.SingletonProvider;
+
+public class SwitchableSingletonProvider extends SingletonProvider
+{
+
+ public static void use(Integer id)
+ {
+ if (id == null)
+ {
+ throw new IllegalArgumentException("id cannot be null");
+ }
+ SwitchableSingleton.id = id;
+ }
+
+ private static class SwitchableSingleton<T> implements Singleton<T>
+ {
+
+ private static Integer id = 0;
+
+ private final Map<Integer, T> store;
+
+ public SwitchableSingleton()
+ {
+ this.store = new Hashtable<Integer, T>();
+ }
+
+ public void clear()
+ {
+ store.remove(id);
+ }
+
+ public T get()
+ {
+ return store.get(id);
+ }
+
+ public boolean isSet()
+ {
+ return store.containsKey(id);
+ }
+
+ public void set(T object)
+ {
+ store.put(id, object);
+ }
+
+ }
+
+ @Override
+ public <T> Singleton<T> create(Class<? extends T> expectedType)
+ {
+ return new SwitchableSingleton<T>();
+ }
+
+}
Property changes on:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/cluster/SwitchableSingletonProvider.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/environments/servlet/ServletEnvironmentTest.java
===================================================================
---
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/environments/servlet/ServletEnvironmentTest.java 2009-09-25
16:25:33 UTC (rev 3784)
+++
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/environments/servlet/ServletEnvironmentTest.java 2009-09-25
16:27:20 UTC (rev 3785)
@@ -9,42 +9,38 @@
import javax.enterprise.inject.spi.Bean;
import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.Container;
-import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.bean.ManagedBean;
-import org.jboss.webbeans.mock.MockBeanDeploymentArchive;
+import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.mock.MockServletLifecycle;
+import org.jboss.webbeans.mock.TestContainer;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
public class ServletEnvironmentTest
{
- private MockServletLifecycle lifecycle;
+ private TestContainer container;
private BeanManagerImpl manager;
@BeforeClass
public void beforeClass() throws Throwable
{
- lifecycle = new MockServletLifecycle();
- lifecycle.initialize();
- MockBeanDeploymentArchive archive = lifecycle.getDeployment().getArchive();
- archive.setBeanClasses(Arrays.asList(Animal.class, DeadlyAnimal.class,
DeadlySpider.class, DeadlyAnimal.class, Hound.class, HoundLocal.class, Salmon.class,
ScottishFish.class, SeaBass.class, Sole.class, Spider.class, Tarantula.class,
TarantulaProducer.class, Tuna.class));
- lifecycle.beginApplication();
- lifecycle.beginSession();
- lifecycle.beginRequest();
- manager = Container.instance().deploymentManager();
+ container = new TestContainer(new MockServletLifecycle(),
Arrays.asList(Animal.class, DeadlyAnimal.class, DeadlySpider.class, DeadlyAnimal.class,
Hound.class, HoundLocal.class, Salmon.class, ScottishFish.class, SeaBass.class,
Sole.class, Spider.class, Tarantula.class, TarantulaProducer.class, Tuna.class), null);
+ container.startContainer();
+ container.ensureRequestActive();
+ manager = container.getBeanManager();
}
@AfterClass(alwaysRun=true)
public void afterClass() throws Exception
{
- lifecycle.endRequest();
- lifecycle.endSession();
- lifecycle.endApplication();
- lifecycle = null;
+ container.stopContainer();
+ container = null;
+ manager = null;
}
+ @Test
public void testSimpleBeans()
{
Map<Class<?>, Bean<?>> beans = new HashMap<Class<?>,
Bean<?>>();
@@ -67,6 +63,7 @@
manager.getInstanceByType(Sole.class, new AnnotationLiteral<Whitefish>()
{}).ping();
}
+ @Test
public void testProducerMethodBean()
{
Map<Class<?>, Bean<?>> beans = new HashMap<Class<?>,
Bean<?>>();