[webbeans-commits] Webbeans SVN: r3785 - in ri/trunk/tests/src: main/java/org/jboss/webbeans/test/harness and 4 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Fri Sep 25 12:27:21 EDT 2009


Author: pete.muir at 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;
+
+ at 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<?>>();




More information about the weld-commits mailing list