Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 4f7c1441b -> 9595ddc94


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
new file mode 100644
index 0000000..568ffeb
--- /dev/null
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerEc2LiveTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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 brooklyn.entity.webapp.tomcat;
+
+import static org.testng.Assert.assertNotNull;
+
+import org.testng.annotations.Test;
+
+import brooklyn.entity.AbstractEc2LiveTest;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.tomcat.Tomcat8Server;
+import brooklyn.location.Location;
+import brooklyn.test.Asserts;
+import brooklyn.test.HttpTestUtils;
+import brooklyn.test.TestResourceUnavailableException;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * A simple test of installing+running on AWS-EC2, using various OS distros 
and versions. 
+ */
+public class Tomcat8ServerEc2LiveTest extends AbstractEc2LiveTest {
+
+    public String getTestWar() {
+        
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
"/hello-world.war");
+        return "classpath://hello-world.war";
+    }
+
+    @Override
+    protected void doTest(Location loc) throws Exception {
+        final Tomcat8Server server = 
app.createAndManageChild(EntitySpec.create(Tomcat8Server.class)
+                .configure("war", getTestWar()));
+        
+        app.start(ImmutableList.of(loc));
+        
+        String url = server.getAttribute(Tomcat8Server.ROOT_URL);
+        
+        HttpTestUtils.assertHttpStatusCodeEventuallyEquals(url, 200);
+        HttpTestUtils.assertContentContainsText(url, "Hello");
+        
+        Asserts.succeedsEventually(new Runnable() {
+            @Override public void run() {
+                
assertNotNull(server.getAttribute(Tomcat8Server.REQUEST_COUNT));
+                assertNotNull(server.getAttribute(Tomcat8Server.ERROR_COUNT));
+                
assertNotNull(server.getAttribute(Tomcat8Server.TOTAL_PROCESSING_TIME));
+            }});
+    }
+    
+    @Test(enabled=false)
+    public void testDummy() {} // Convince testng IDE integration that this 
really does have test methods  
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerRestartIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerRestartIntegrationTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerRestartIntegrationTest.java
new file mode 100644
index 0000000..d84c8a0
--- /dev/null
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerRestartIntegrationTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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 brooklyn.entity.webapp.tomcat;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.AbstractSoftwareProcessRestartIntegrationTest;
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.tomcat.Tomcat8Server;
+
+/**
+ * Tests restart of the software *process* (as opposed to the VM).
+ */
+@Test(groups="Integration")
+public class Tomcat8ServerRestartIntegrationTest extends 
AbstractSoftwareProcessRestartIntegrationTest {
+    
+    // TODO Remove duplication from MySqlRestartIntegrationTest
+    
+    @SuppressWarnings("unused")
+    private static final Logger LOG = 
LoggerFactory.getLogger(Tomcat8ServerRestartIntegrationTest.class);
+
+    @Override
+    protected EntitySpec<? extends SoftwareProcess> newEntitySpec() {
+        return EntitySpec.create(Tomcat8Server.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSimpleIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSimpleIntegrationTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSimpleIntegrationTest.java
new file mode 100644
index 0000000..c8f33a7
--- /dev/null
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSimpleIntegrationTest.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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 brooklyn.entity.webapp.tomcat;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.fail;
+
+import java.net.ServerSocket;
+import java.util.Iterator;
+
+import org.jclouds.util.Throwables2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.location.PortRange;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.location.basic.PortRanges;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.util.net.Networking;
+import brooklyn.util.time.Duration;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * This tests the operation of the {@link Tomcat8Server} entity.
+ * 
+ * FIXME this test is largely superseded by WebApp*IntegrationTest which tests 
inter alia Tomcat
+ */
+public class Tomcat8ServerSimpleIntegrationTest {
+    @SuppressWarnings("unused")
+    private static final Logger LOG = 
LoggerFactory.getLogger(Tomcat8ServerSimpleIntegrationTest.class);
+    
+    /** don't use 8080 since that is commonly used by testing software; use 
different from other tests. */
+    static PortRange DEFAULT_HTTP_PORT_RANGE = 
PortRanges.fromString("7880-7980");
+    
+    private TestApplication app;
+    private Tomcat8Server tc;
+    private int httpPort;
+    
+    @BeforeMethod(alwaysRun=true)
+    public void pickFreePort() {
+        for (Iterator<Integer> iter = DEFAULT_HTTP_PORT_RANGE.iterator(); 
iter.hasNext();) {
+            Integer port = iter.next();
+            if (Networking.isPortAvailable(port)) {
+                httpPort = port;
+                return;
+            }
+        }
+        fail("someone is already listening on ports 
"+DEFAULT_HTTP_PORT_RANGE+"; tests assume that port is free on localhost");
+    }
+ 
+    @AfterMethod(alwaysRun=true)
+    public void tearDown() throws Exception {
+        if (app != null) Entities.destroyAll(app.getManagementContext());
+    }
+    
+       /*
+        * TODO Tomcat's HTTP connector fails to start when the HTTP port is in 
use.
+        * 
+        * This prevents the the SERVICE_UP check from receiving an answer,
+        * which causes the test to timeout.
+        */
+    @Test(groups="Integration")
+    public void detectFailureIfTomcatCantBindToPort() throws Exception {
+       ServerSocket listener = new ServerSocket(httpPort);
+        try {
+            app = ApplicationBuilder.newManagedApp(TestApplication.class);
+            tc = 
app.createAndManageChild(EntitySpec.create(Tomcat8Server.class)
+                       .configure("httpPort", httpPort)
+                       .configure(TomcatServer.START_TIMEOUT, 
Duration.ONE_MINUTE));
+            try {
+                
tc.start(ImmutableList.of(app.getManagementContext().getLocationManager().manage(new
 LocalhostMachineProvisioningLocation())));
+                fail("Should have thrown start-exception");
+            } catch (Exception e) {
+                // LocalhostMachineProvisioningLocation does 
NetworkUtils.isPortAvailable, so get -1
+                IllegalArgumentException iae = 
Throwables2.getFirstThrowableOfType(e, IllegalArgumentException.class);
+                if (iae == null || iae.getMessage() == null || 
!iae.getMessage().equals("port for httpPort is null")) throw e;
+            } finally {
+                tc.stop();
+            }
+            assertFalse(tc.getAttribute(Tomcat8ServerImpl.SERVICE_UP));
+        } finally {
+            listener.close();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
new file mode 100644
index 0000000..176ef86
--- /dev/null
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerSoftlayerLiveTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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 brooklyn.entity.webapp.tomcat;
+
+import static org.testng.Assert.assertNotNull;
+
+import org.testng.annotations.Test;
+
+import brooklyn.entity.AbstractSoftlayerLiveTest;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.tomcat.Tomcat8Server;
+import brooklyn.location.Location;
+import brooklyn.test.Asserts;
+import brooklyn.test.HttpTestUtils;
+import brooklyn.test.TestResourceUnavailableException;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * A simple test of installing+running on Softlayer, using various OS distros 
and versions. 
+ */
+public class Tomcat8ServerSoftlayerLiveTest extends AbstractSoftlayerLiveTest {
+
+    public String getTestWar() {
+        
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
"/hello-world.war");
+        return "classpath://hello-world.war";
+    }
+
+    @Override
+    protected void doTest(Location loc) throws Exception {
+        final Tomcat8Server server = 
app.createAndManageChild(EntitySpec.create(Tomcat8Server.class)
+                .configure("war", getTestWar()));
+        
+        app.start(ImmutableList.of(loc));
+        
+        String url = server.getAttribute(Tomcat8Server.ROOT_URL);
+        
+        HttpTestUtils.assertHttpStatusCodeEventuallyEquals(url, 200);
+        HttpTestUtils.assertContentContainsText(url, "Hello");
+        
+        Asserts.succeedsEventually(new Runnable() {
+            @Override public void run() {
+                
assertNotNull(server.getAttribute(Tomcat8Server.REQUEST_COUNT));
+                assertNotNull(server.getAttribute(Tomcat8Server.ERROR_COUNT));
+                
assertNotNull(server.getAttribute(Tomcat8Server.TOTAL_PROCESSING_TIME));
+                
+                // TODO These appear not to be set in 
TomcatServerImpl.connectSensors
+                //      See TomcatServerEc2LiveTest, where these are also not 
included.
+//                
assertNotNull(server.getAttribute(TomcatServer.MAX_PROCESSING_TIME));
+//                
assertNotNull(server.getAttribute(TomcatServer.BYTES_RECEIVED));
+//                assertNotNull(server.getAttribute(TomcatServer.BYTES_SENT));
+            }});
+    }
+
+    @Test(groups = {"Live", "Live-sanity"})
+    @Override
+    public void test_Ubuntu_12_0_4() throws Exception {
+        super.test_Ubuntu_12_0_4();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
new file mode 100644
index 0000000..e3bd45b
--- /dev/null
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/Tomcat8ServerWebAppFixtureIntegrationTest.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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 brooklyn.entity.webapp.tomcat;
+
+import java.io.File;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.SocketException;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.SoftwareProcess;
+import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.webapp.AbstractWebAppFixtureIntegrationTest;
+import brooklyn.entity.webapp.HttpsSslConfig;
+import brooklyn.entity.webapp.JavaWebAppSoftwareProcess;
+import brooklyn.entity.webapp.tomcat.Tomcat8Server;
+import brooklyn.location.basic.PortRanges;
+import brooklyn.test.TestResourceUnavailableException;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.repeat.Repeater;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+
+public class Tomcat8ServerWebAppFixtureIntegrationTest extends 
AbstractWebAppFixtureIntegrationTest {
+
+    @SuppressWarnings("unused")
+    private static final Logger log = 
LoggerFactory.getLogger(Tomcat8ServerWebAppFixtureIntegrationTest.class);
+    
+    @DataProvider(name = "basicEntities")
+    public Object[][] basicEntities() {
+        TestApplication tomcatApp = newTestApplication();
+        Tomcat8Server tomcat = 
tomcatApp.createAndManageChild(EntitySpec.create(Tomcat8Server.class)
+                .configure(Tomcat8Server.HTTP_PORT, 
PortRanges.fromString(DEFAULT_HTTP_PORT)));
+
+
+        File keystoreFile;
+        try {
+            keystoreFile = createTemporaryKeyStore("myname", "mypass");
+            keystoreFile.deleteOnExit();
+        } catch (Exception e) {
+            throw Exceptions.propagate(e);
+        }
+
+        TestApplication tomcatHttpsApp = newTestApplication();
+        Tomcat8Server httpsTomcat = 
tomcatHttpsApp.createAndManageChild(EntitySpec.create(Tomcat8Server.class)
+                .configure(Tomcat8Server.ENABLED_PROTOCOLS, 
ImmutableSet.of("https"))
+                .configure(Tomcat8Server.HTTPS_SSL_CONFIG,
+                        new 
HttpsSslConfig().keyAlias("myname").keystorePassword("mypass").keystoreUrl(keystoreFile.getAbsolutePath())));
+
+        return new JavaWebAppSoftwareProcess[][] {
+                new JavaWebAppSoftwareProcess[] { tomcat },
+                new JavaWebAppSoftwareProcess[] { httpsTomcat }
+        };
+    }
+
+    // exists to be able to test on this class from GUI in Eclipse IDE
+    @Test(groups = "Integration", dataProvider = "basicEntities")
+    public void canStartAndStop(final SoftwareProcess entity) {
+        super.canStartAndStop(entity);
+    }
+    @Test(groups = "Integration", dataProvider = "basicEntities")
+    public void testReportsServiceDownWhenKilled(final SoftwareProcess entity) 
throws Exception {
+        super.testReportsServiceDownWhenKilled(entity);
+    }
+
+    @Override
+    // as parent, but with spring travel
+    @DataProvider(name = "entitiesWithWarAndURL")
+    public Object[][] entitiesWithWar() {
+        
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), 
"/hello-world.war");
+        List<Object[]> result = Lists.newArrayList();
+        
+        for (Object[] entity : basicEntities()) {
+            result.add(new Object[] {
+                    entity[0],
+                    "hello-world.war",
+                    "hello-world/",
+                    "" // no sub-page path
+                    });
+        }
+
+        // TODO would be nice to test against spring web framework stock 
booking example
+        // but we'd need an external URL for that (we removed the binary from 
here for apache compliance reasons)
+//        TestApplication tomcatApp = newTestApplication();
+//        TomcatServer tomcat = 
tomcatApp.createAndManageChild(EntitySpec.create(TomcatServer.class)
+//                .configure(TomcatServer.HTTP_PORT, 
PortRanges.fromString(DEFAULT_HTTP_PORT)));
+//        result.add(new Object[] {
+//                tomcat,
+//                "swf-booking-mvc.war",
+//                "swf-booking-mvc/",
+//                "spring/intro",
+//               });
+        
+        return result.toArray(new Object[][] {});
+    }
+
+    @AfterMethod(alwaysRun=true, dependsOnMethods="shutdownApp")
+    public void ensureIsShutDown() throws Exception {
+        final AtomicReference<Socket> shutdownSocket = new 
AtomicReference<Socket>();
+        final AtomicReference<SocketException> gotException = new 
AtomicReference<SocketException>();
+        final Integer shutdownPort = (entity != null) ? 
entity.getAttribute(Tomcat8Server.SHUTDOWN_PORT) : null;
+        
+        if (shutdownPort != null) {
+            boolean socketClosed = Repeater.create("Checking WebApp has shut 
down")
+                    .repeat(new Callable<Void>() {
+                            public Void call() throws Exception {
+                                if (shutdownSocket.get() != null) 
shutdownSocket.get().close();
+                                try {
+                                    shutdownSocket.set(new 
Socket(InetAddress.getLocalHost(), shutdownPort));
+                                    gotException.set(null);
+                                } catch (SocketException e) {
+                                    gotException.set(e);
+                                }
+                                return null;
+                            }})
+                    .every(100, TimeUnit.MILLISECONDS)
+                    .until(new Callable<Boolean>() {
+                            public Boolean call() {
+                                return (gotException.get() != null);
+                            }})
+                    .limitIterationsTo(25)
+                    .run();
+            
+            if (socketClosed == false) {
+//                log.error("WebApp did not shut down - this is a failure of 
the last test run");
+//                log.warn("I'm sending a message to the shutdown port {}", 
shutdownPort);
+//                OutputStreamWriter writer = new 
OutputStreamWriter(shutdownSocket.getOutputStream());
+//                writer.write("SHUTDOWN\r\n");
+//                writer.flush();
+//                writer.close();
+//                shutdownSocket.close();
+                throw new Exception("Last test run did not shut down WebApp 
entity "+entity+" (port "+shutdownPort+")");
+            }
+        } else {
+            Assert.fail("Cannot shutdown, because shutdown-port not set for 
"+entity);
+        }
+    }
+
+    public static void main(String ...args) throws Exception {
+        Tomcat8ServerWebAppFixtureIntegrationTest t = new 
Tomcat8ServerWebAppFixtureIntegrationTest();
+        t.setUp();
+        t.testReportsServiceDownWhenKilled((SoftwareProcess) 
t.basicEntities()[0][0]);
+        t.shutdownApp();
+        t.ensureIsShutDown();
+        t.shutdownMgmt();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fa382b4d/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
index 032e49a..0189456 100644
--- 
a/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
+++ 
b/software/webapp/src/test/java/brooklyn/entity/webapp/tomcat/TomcatServerSimpleIntegrationTest.java
@@ -39,6 +39,7 @@ import 
brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.PortRanges;
 import brooklyn.test.entity.TestApplication;
 import brooklyn.util.net.Networking;
+import brooklyn.util.time.Duration;
 
 import com.google.common.collect.ImmutableList;
 
@@ -75,13 +76,20 @@ public class TomcatServerSimpleIntegrationTest {
         if (app != null) Entities.destroyAll(app.getManagementContext());
     }
     
+       /*
+        * TODO Tomcat's HTTP connector fails to start when the HTTP port is in 
use.
+        * 
+        * This prevents the the SERVICE_UP check from receiving an answer,
+        * which causes the test to timeout.
+        */
     @Test(groups="Integration")
     public void detectFailureIfTomcatCantBindToPort() throws Exception {
         ServerSocket listener = new ServerSocket(httpPort);
         try {
             app = ApplicationBuilder.newManagedApp(TestApplication.class);
-            tc = 
app.createAndManageChild(EntitySpec.create(TomcatServer.class).configure("httpPort",
 httpPort));
-            
+            tc = app.createAndManageChild(EntitySpec.create(TomcatServer.class)
+               .configure("httpPort", httpPort)
+               .configure(TomcatServer.START_TIMEOUT, Duration.ONE_MINUTE));
             try {
                 
tc.start(ImmutableList.of(app.getManagementContext().getLocationManager().manage(new
 LocalhostMachineProvisioningLocation())));
                 fail("Should have thrown start-exception");

Reply via email to