X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=system%2Fgeneral%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FContainerTest.java;h=dfd8ed58fc87484130ba82cb307589701a3c6d52;hb=8a6ee427cf3de42d9dd9d8fea09ee9fd059ee53e;hp=0c0a9935feb8b1da4f78321235d5c905d5aecf59;hpb=98dc838908507748b413ad0d93e9050cbb6ecdeb;p=utils diff --git a/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java b/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java index 0c0a9935..dfd8ed58 100644 --- a/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java +++ b/system/general/src/test/java/org/wamblee/system/core/ContainerTest.java @@ -12,13 +12,16 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ + */ package org.wamblee.system.core; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; +import org.easymock.classextension.ConstructorArgs; +import org.easymock.classextension.EasyMock; +import org.easymock.classextension.IMocksControl; import org.wamblee.system.core.Component; import org.wamblee.system.core.Container; import org.wamblee.system.core.DefaultProvidedInterface; @@ -61,11 +64,11 @@ public class ContainerTest extends TestCase { ProvidedInterface prov3 = new DefaultProvidedInterface("name", MyMultiple.class); - AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, - Container.filterRequiredServices(prov1, Arrays + AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, Container + .filterRequiredServices(prov1, Arrays .asList(new RequiredInterface[] { req1 }))); - AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, - Container.filterRequiredServices(prov1, Arrays + AssertionUtils.assertEquals(new RequiredInterface[] { req1 }, Container + .filterRequiredServices(prov1, Arrays .asList(new RequiredInterface[] { req1, req2 }))); AssertionUtils.assertEquals(new RequiredInterface[] { req1, req2 }, Container.filterRequiredServices(prov3, Arrays @@ -88,27 +91,25 @@ public class ContainerTest extends TestCase { Container container = new Container("root", new Component[] { environment, application }, new ProvidedInterface[0], new RequiredInterface[0]); - + container.start(); AssertionUtils.assertEquals(new String[] { "start.environment", "start.application" }, _tracker.getEvents( Thread.currentThread()).toArray(new String[0])); - ProvidedInterface[] envServices = environment.getRunningServices(); + ProvidedInterface[] envServices = environment.getRunningInterfaces(); assertEquals(2, envServices.length); - ProvidedInterface[] appServices = environment.getRunningServices(); - assertEquals(2, appServices.length); - + ProvidedInterface[] appServices = application.getRunningInterfaces(); + assertEquals(0, appServices.length); + } public void testApplicationEnvironment() { try { Component environment = new Environment(); Component application = new Application(); - Container container = new Container( - "root", - new Component[] { - application, environment }, - new ProvidedInterface[0], new RequiredInterface[0]); + Container container = new Container("root", new Component[] { + application, environment }, new ProvidedInterface[0], + new RequiredInterface[0]); container.start(); } catch (SystemAssemblyException e) { // e.printStackTrace(); @@ -123,7 +124,7 @@ public class ContainerTest extends TestCase { assertEquals(0, _tracker.getEventCount()); assertEquals(Status.NOT_STARTED, environment.getStatus()); assertEquals(Status.NOT_STARTED, application.getStatus()); - + Container system = new Container("all", new Component[] { environment, application }, new ProvidedInterface[0], new RequiredInterface[0]); @@ -136,22 +137,21 @@ public class ContainerTest extends TestCase { assertEquals(Status.RUNNING, environment.getStatus()); assertEquals(Status.RUNNING, application.getStatus()); assertEquals(Status.RUNNING, system.getStatus()); - - AssertionUtils.assertEquals( - new String[] { "start.environment", "start.application" }, - _tracker.getEvents(Thread.currentThread()).toArray(new String[0])); - _tracker.clear(); - + + AssertionUtils.assertEquals(new String[] { "start.environment", + "start.application" }, _tracker.getEvents( + Thread.currentThread()).toArray(new String[0])); + _tracker.clear(); + system.stop(); assertEquals(Status.STOPPED, environment.getStatus()); assertEquals(Status.STOPPED, application.getStatus()); assertEquals(Status.STOPPED, system.getStatus()); - - AssertionUtils.assertEquals( - new String[] { "stop.application", "stop.environment" }, - _tracker.getEvents(Thread.currentThread()).toArray(new String[0])); - - + + AssertionUtils.assertEquals(new String[] { "stop.application", + "stop.environment" }, _tracker + .getEvents(Thread.currentThread()).toArray(new String[0])); + } public void testCompositeWithWrongProvidedInfo() { @@ -265,4 +265,73 @@ public class ContainerTest extends TestCase { fail(); } + public void testEnvironmentApplicationRollbackOnException() + throws Exception { + IMocksControl control = EasyMock.createStrictControl(); + + Environment environment = new Environment(_tracker); + Application application = control.createMock(Application.class, + new ConstructorArgs(Application.class.getConstructor()), + Application.class.getDeclaredMethod("doStart")); + + application.doStart(); + EasyMock.expectLastCall().andThrow(new RuntimeException()); + control.replay(); + + try { + Container container = new Container("root", new Component[] { + environment, application }, new ProvidedInterface[0], + new RequiredInterface[0]); + + container.start(); + } catch (RuntimeException e) { + AssertionUtils.assertEquals(new String[] { "start.environment", + "stop.environment" }, _tracker.getEvents( + Thread.currentThread()).toArray(new String[0])); + ProvidedInterface[] envServices = environment.getRunningInterfaces(); + assertEquals(0, envServices.length); + return; + } + fail(); + } + + public void testEnvironmentApplicationRollbackOnExceptionWithExceptionOnStop() + throws Exception { + IMocksControl control = EasyMock.createControl(); + + Environment environment = new Environment(_tracker); + // Application 1 will throw an exception while stopping. + Application application1 = control.createMock(Application.class, + new ConstructorArgs(Application.class.getConstructor()), + Application.class.getDeclaredMethod("doStop")); + + application1.doStop(); + EasyMock.expectLastCall().andThrow(new RuntimeException()); + + // application 2 will throw an exception while starting + Application application2 = control.createMock(Application.class, + new ConstructorArgs(Application.class.getConstructor()), + Application.class.getDeclaredMethod("doStart")); + + application2.doStart(); + EasyMock.expectLastCall().andThrow(new RuntimeException()); + + control.replay(); + + try { + Container container = new Container("root", new Component[] { + environment, application1, application2 }, new ProvidedInterface[0], + new RequiredInterface[0]); + + container.start(); + } catch (RuntimeException e) { + AssertionUtils.assertEquals(new String[] { "start.environment", + "stop.environment" }, _tracker.getEvents( + Thread.currentThread()).toArray(new String[0])); + ProvidedInterface[] envServices = environment.getRunningInterfaces(); + assertEquals(0, envServices.length); + return; + } + fail(); + } }