Prevent ApplicationBuilderOverridingTest hanging

I had an invalid entry in my brooklyn.properties, which caused 
builder.manage to fail. This caused the entire test to hang forever.

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/83727570
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/83727570
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/83727570

Branch: refs/heads/master
Commit: 83727570672952d0a3f2fd2baccbf390ab8a6a34
Parents: 3cb3b8f
Author: Aled Sage <aled.s...@gmail.com>
Authored: Mon Feb 15 12:11:59 2016 +0000
Committer: Aled Sage <aled.s...@gmail.com>
Committed: Mon Feb 15 12:11:59 2016 +0000

----------------------------------------------------------------------
 .../ApplicationBuilderOverridingTest.java       | 26 +++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/83727570/core/src/test/java/org/apache/brooklyn/core/entity/proxying/ApplicationBuilderOverridingTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/entity/proxying/ApplicationBuilderOverridingTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/entity/proxying/ApplicationBuilderOverridingTest.java
index 824439b..912c434 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/entity/proxying/ApplicationBuilderOverridingTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/entity/proxying/ApplicationBuilderOverridingTest.java
@@ -40,13 +40,14 @@ import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityInternal;
 import org.apache.brooklyn.core.entity.StartableApplication;
 import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
 import org.apache.brooklyn.core.objs.proxy.EntityProxy;
 import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
 import org.apache.brooklyn.core.test.entity.TestApplication;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.entity.stock.BasicApplication;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -57,6 +58,8 @@ import com.google.common.collect.Iterables;
 
 public class ApplicationBuilderOverridingTest {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(ApplicationBuilderOverridingTest.class);
+    
     private static final long TIMEOUT_MS = 10*1000;
     
     private ManagementContext spareManagementContext;
@@ -65,7 +68,7 @@ public class ApplicationBuilderOverridingTest {
     
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
-        spareManagementContext = new LocalManagementContextForTests();
+        spareManagementContext = LocalManagementContextForTests.newInstance();
         executor = Executors.newCachedThreadPool();
     }
     
@@ -147,7 +150,7 @@ public class ApplicationBuilderOverridingTest {
 
     @Test(expectedExceptions=IllegalStateException.class)
     public void testRentrantCallToManageForbidden() {
-        ManagementContext secondManagementContext = new 
LocalManagementContext();
+        ManagementContext secondManagementContext = 
LocalManagementContextForTests.newInstance();
         try {
             app = new ApplicationBuilder() {
                 @Override public void doBuild() {
@@ -192,13 +195,14 @@ public class ApplicationBuilderOverridingTest {
 
     @Test
     public void testConcurrentCallToManageForbidden() throws Exception {
+        final AtomicReference<Throwable> err = new 
AtomicReference<Throwable>();
         final CountDownLatch inbuildLatch = new CountDownLatch(1);
         final CountDownLatch continueLatch = new CountDownLatch(1);
         final ApplicationBuilder builder = new ApplicationBuilder() {
             @Override public void doBuild() {
+                inbuildLatch.countDown();
                 try {
-                    inbuildLatch.countDown();
-                    continueLatch.await();
+                    assertTrue(continueLatch.await(TIMEOUT_MS, 
TimeUnit.MILLISECONDS));
                 } catch (InterruptedException e) {
                     throw Exceptions.propagate(e);
                 }
@@ -206,11 +210,21 @@ public class ApplicationBuilderOverridingTest {
         };
         Future<StartableApplication> future = executor.submit(new 
Callable<StartableApplication>() {
             public StartableApplication call() {
-                return builder.manage();
+                try {
+                    return builder.manage();
+                } catch (Throwable t) {
+                    LOG.error("Problem in simple ApplicationBuilder", t);
+                    err.set(t);
+                    inbuildLatch.countDown();
+                    throw Exceptions.propagate(t);
+                }
             }
         });
         
         inbuildLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+        if (err.get() != null) {
+            throw Exceptions.propagate(err.get());
+        }
         
         try {
             app = builder.manage(spareManagementContext);

Reply via email to