brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aleds...@apache.org
Subject [1/3] incubator-brooklyn git commit: Fix integration tests - brooklyn-core
Date Fri, 19 Jun 2015 20:34:12 GMT
Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master d20d452d8 -> d2b47e770


Fix integration tests - brooklyn-core


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

Branch: refs/heads/master
Commit: fae666cfbc0502af7b0afeac135c4604fd429bf9
Parents: 9c9a866
Author: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
Authored: Thu Jun 18 13:00:15 2015 +0300
Committer: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
Committed: Fri Jun 19 12:43:02 2015 +0300

----------------------------------------------------------------------
 .../location/basic/SshMachineLocation.java      | 10 ++++---
 .../util/internal/ssh/ShellAbstractTool.java    | 29 +++++++++++-------
 .../catalog/internal/CatalogDtoTest.java        | 12 ++++----
 .../entity/basic/ServiceStateLogicTest.java     | 22 +++++++-------
 .../persister/XmlMementoSerializerTest.java     | 15 ++++++++++
 .../brooklyn/event/feed/http/HttpFeedTest.java  | 17 ++---------
 .../SshMachineLocationIntegrationTest.java      |  9 +++++-
 .../location/basic/SshMachineLocationTest.java  |  4 ++-
 .../geo/HostGeoLookupIntegrationTest.java       |  6 +++-
 .../sshj/SshjToolAsyncStubIntegrationTest.java  |  6 ++--
 .../ssh/sshj/SshjToolIntegrationTest.java       | 31 +++++++++++++-------
 11 files changed, 100 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java b/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
index 40dc1e5..a249305 100644
--- a/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
+++ b/core/src/main/java/brooklyn/location/basic/SshMachineLocation.java
@@ -35,9 +35,9 @@ import java.io.PipedOutputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.security.KeyPair;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -76,12 +76,10 @@ import brooklyn.util.file.ArchiveUtils;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.flags.TypeCoercions;
 import brooklyn.util.guava.KeyTransformingLoadingCache.KeyTransformingSameTypeLoadingCache;
-import brooklyn.util.guava.Maybe;
 import brooklyn.util.internal.ssh.ShellTool;
 import brooklyn.util.internal.ssh.SshException;
 import brooklyn.util.internal.ssh.SshTool;
 import brooklyn.util.internal.ssh.sshj.SshjTool;
-import brooklyn.util.javalang.StackTraceSimplifier;
 import brooklyn.util.mutex.MutexSupport;
 import brooklyn.util.mutex.WithMutexes;
 import brooklyn.util.net.Urls;
@@ -133,6 +131,9 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
     public static final Logger LOG = LoggerFactory.getLogger(SshMachineLocation.class);
     /** @deprecated since 0.7.0 shouldn't be public */
     public static final Logger logSsh = LoggerFactory.getLogger(BrooklynLogging.SSH_IO);
+    
+    // Use a sane timeout when doing a connectivity test
+    private static final int SSHABLE_CONNECT_TIMEOUT = (int)Duration.minutes(2).toMilliseconds();
 
     public static final ConfigKey<Duration> SSH_CACHE_EXPIRY_DURATION = ConfigKeys.newConfigKey(Duration.class,
             "sshCacheExpiryDuration", "Expiry time for unused cached ssh connections", Duration.FIVE_MINUTES);
@@ -876,7 +877,8 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
         String cmd = "date";
         try {
             try {
-                Socket s = new Socket(getAddress(), getPort());
+                Socket s = new Socket();
+                s.connect(new InetSocketAddress(getAddress(), getPort()), SSHABLE_CONNECT_TIMEOUT);
                 s.close();
             } catch (IOException e) {
                 if (LOG.isDebugEnabled()) LOG.debug(""+this+" not [yet] reachable (socket
"+getAddress()+":"+getPort()+"): "+e);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java b/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
index e677399..10e9699 100644
--- a/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
+++ b/core/src/main/java/brooklyn/util/internal/ssh/ShellAbstractTool.java
@@ -296,9 +296,10 @@ public abstract class ShellAbstractTool implements ShellTool {
          * The executed command will return immediately, but the output from the script
          * will continue to be written 
          * note that some modes require \$RESULT passed in order to access a variable, whereas
most just need $ */
+        @Override
         protected List<String> buildRunScriptCommand() {
             String touchCmd = String.format("touch %s %s %s %s", stdoutPath, stderrPath,
exitStatusPath, pidPath);
-            String cmd = String.format("( %s > %s 2> %s < /dev/null ; echo $? >
%s ) & disown", scriptPath, stdoutPath, stderrPath, exitStatusPath);
+            String cmd = String.format("nohup sh -c \"( %s > %s 2> %s < /dev/null
) ; echo \\$? > %s \" > /dev/null 2>&1 < /dev/null &", scriptPath, stdoutPath,
stderrPath, exitStatusPath);
             MutableList.Builder<String> cmds = MutableList.<String>builder()
                     .add(runAsRoot ? BashCommands.sudo(touchCmd) : touchCmd)
                     .add(runAsRoot ? BashCommands.sudo(cmd) : cmd)
@@ -352,8 +353,8 @@ public abstract class ShellAbstractTool implements ShellTool {
          */
         protected List<String> buildRetrieveStdoutAndStderrCommand(int stdoutPosition,
int stderrPosition) {
             // Note that `tail -c +1` means start at the *first* character (i.e. start counting
from 1, not 0)
-            String catStdoutCmd = "tail -c +"+(stdoutPosition+1)+" "+stdoutPath;
-            String catStderrCmd = "tail -c +"+(stderrPosition+1)+" "+stderrPath+" 1>&2";
+            String catStdoutCmd = "tail -c +"+(stdoutPosition+1)+" "+stdoutPath+" 2> /dev/null";
+            String catStderrCmd = "tail -c +"+(stderrPosition+1)+" "+stderrPath+" 2>&1
> /dev/null";
             MutableList.Builder<String> cmds = MutableList.<String>builder()
                     .add((runAsRoot ? BashCommands.sudo(catStdoutCmd) : catStdoutCmd))
                     .add((runAsRoot ? BashCommands.sudo(catStderrCmd) : catStderrCmd))
@@ -371,9 +372,12 @@ public abstract class ShellAbstractTool implements ShellTool {
             
             // Note that `tail -c +1` means start at the *first* character (i.e. start counting
from 1, not 0)
             List<String> waitForExitStatusParts = ImmutableList.of(
+                    //Should be careful here because any output will be part of the stdout/stderr
streams
                     "# Long poll", // comment is to aid testing - see SshjToolAsyncStubIntegrationTest
-                    "tail -c +"+(stdoutPosition+1)+" -f "+stdoutPath+" & export TAIL_STDOUT_PID=$!",
-                    "tail -c +"+(stderrPosition+1)+" -f "+stderrPath+" 1>&2 &
export TAIL_STDERR_PID=$!",
+                    // disown to avoid Terminated message after killing the process
+                    // redirect error output to avoid "file truncated" messages
+                    "tail -c +"+(stdoutPosition+1)+" -f "+stdoutPath+" 2> /dev/null &
export TAIL_STDOUT_PID=$!; disown",
+                    "tail -c +"+(stderrPosition+1)+" -f "+stderrPath+" 1>&2 2>
/dev/null & export TAIL_STDERR_PID=$!; disown",
                     "EXIT_STATUS_PATH="+exitStatusPath,
                     "PID_PATH="+pidPath,
                     "MAX_TIME="+maxTime,
@@ -381,19 +385,20 @@ public abstract class ShellAbstractTool implements ShellTool {
                     "while [ \"$COUNTER\" -lt $MAX_TIME ]; do",
                     "    if test -s $EXIT_STATUS_PATH; then",
                     "        EXIT_STATUS=`cat $EXIT_STATUS_PATH`",
+                    "        kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID} 2> /dev/null",
                     "        exit $EXIT_STATUS",
                     "    elif test -s $PID_PATH; then",
                     "        PID=`cat $PID_PATH`",
-                    "        if ! ps -p $PID > /dev/null < /dev/null; then",
+                    "        if ! ps -p $PID > /dev/null 2>&1 < /dev/null; then",
                     "            # no exit status, and not executing; give a few seconds
grace in case just about to write exit status",
                     "            sleep 3",
                     "            if test -s $EXIT_STATUS_PATH; then",
                     "                EXIT_STATUS=`cat $EXIT_STATUS_PATH`",
-                    "                kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID}",
+                    "                kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID} 2> /dev/null",
                     "                exit $EXIT_STATUS",
                     "            else",
                     "                echo \"No exit status in $EXIT_STATUS_PATH, and pid
in $PID_PATH ($PID) not executing\"",
-                    "                kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID}",
+                    "                kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID} 2> /dev/null",
                     "                exit 126",
                     "            fi",
                     "        fi",
@@ -402,7 +407,7 @@ public abstract class ShellAbstractTool implements ShellTool {
                     "    sleep 1",
                     "    COUNTER+=1",
                     "done",
-                    "kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID}",
+                    "kill ${TAIL_STDERR_PID} ${TAIL_STDOUT_PID} 2> /dev/null",
                     "exit 125"+"\n");
             String waitForExitStatus = Joiner.on("\n").join(waitForExitStatusParts);
 
@@ -422,14 +427,16 @@ public abstract class ShellAbstractTool implements ShellTool {
             // If the buildLongPollCommand didn't complete properly then it might have left
tail command running;
             // ensure they are killed.
             cmdParts.add(
-                    "ps aux | grep \"tail -c\" | grep \""+stdoutPath+"\" | grep -v grep |
awk '{ printf $2 }' | xargs kill",
-                    "ps aux | grep \"tail -c\" | grep \""+stderrPath+"\" | grep -v grep |
awk '{ printf $2 }' | xargs kill");
+                    //ignore error output for the case where there are no running processes
and kill is called without arguments
+                    "ps aux | grep \"tail -c\" | grep \""+stdoutPath+"\" | grep -v grep |
awk '{ printf $2 }' | xargs kill 2> /dev/null",
+                    "ps aux | grep \"tail -c\" | grep \""+stderrPath+"\" | grep -v grep |
awk '{ printf $2 }' | xargs kill 2> /dev/null");
 
             String cmd = Joiner.on("\n").join(cmdParts.build());
             
             return ImmutableList.of(runAsRoot ? BashCommands.sudo(cmd) : cmd);
         }
 
+        @Override
         public abstract int run();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java b/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
index 8ab75d5..a6f5c80 100644
--- a/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
+++ b/core/src/test/java/brooklyn/catalog/internal/CatalogDtoTest.java
@@ -21,8 +21,6 @@ package brooklyn.catalog.internal;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-import java.util.Arrays;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -40,6 +38,8 @@ import brooklyn.test.entity.TestEntity;
 import brooklyn.util.BrooklynMavenArtifacts;
 import brooklyn.util.maven.MavenRetriever;
 
+import com.google.common.collect.ImmutableList;
+
 public class CatalogDtoTest {
 
     private static final Logger log = LoggerFactory.getLogger(CatalogDtoTest.class);
@@ -100,10 +100,12 @@ public class CatalogDtoTest {
                 CatalogDto.newNamedInstance("Test Entities from Java", null, "test-java"));
         testEntitiesJavaCatalog.setClasspathScanForEntities(CatalogScanningModes.NONE);
         testEntitiesJavaCatalog.addToClasspath(bundleUrl);
-        testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newTemplate(TestApplication.class.getCanonicalName(),
"Test App from JAR")
+        testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newTemplate(TestApplication.class.getCanonicalName(),
BasicBrooklynCatalog.NO_VERSION)
+                .displayName("Test App from JAR")
                 .javaType(TestApplication.class.getCanonicalName())
                 .build());
-        testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newEntity(TestEntity.class.getCanonicalName(),
"Test Entity from JAR")
+        testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newEntity(TestEntity.class.getCanonicalName(),
BasicBrooklynCatalog.NO_VERSION)
+                .displayName("Test Entity from JAR")
                 .javaType(TestEntity.class.getCanonicalName())
                 .build());
         root.addCatalog(testEntitiesJavaCatalog.dto);
@@ -122,7 +124,7 @@ public class CatalogDtoTest {
         osgiCatalog.setClasspathScanForEntities(CatalogScanningModes.NONE);
         CatalogEntityItemDto osgiEntity = CatalogItemBuilder.newEntity(TestEntity.class.getCanonicalName(),
"Test Entity from OSGi")
                 // NB: this is not actually an OSGi bundle, but it's okay as we don't instantiate
the bundles ahead of time (currently)
-                .libraries(Arrays.<CatalogBundle>asList(new CatalogBundleDto(null,
null, bundleUrl)))
+                .libraries(ImmutableList.<CatalogBundle>of(new CatalogBundleDto(null,
null, bundleUrl)))
                 .build();
         testEntitiesJavaCatalog.addEntry(osgiEntity);
         root.addCatalog(osgiCatalog.dto);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java b/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
index b39c585..ae1e1a0 100644
--- a/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/ServiceStateLogicTest.java
@@ -167,14 +167,15 @@ public class ServiceStateLogicTest extends BrooklynAppUnitTestSupport
{
         // won't propagate due to it's SERVICE_STATE_ACTUAL (null) being in IGNORE_ENTITIES_WITH_THESE_SERVICE_STATES
         ServiceNotUpLogic.updateNotUpIndicator(entity, INDICATOR_KEY_1, "We're also pretending
to block service up");
         assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, false);
-        assertAttributeEqualsEventually(app, Attributes.SERVICE_UP, true);
-        assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        assertAttributeEqualsContinually(app, Attributes.SERVICE_UP, true);
+        assertAttributeEqualsContinually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
         // the entity still has no opinion about its state
-        assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, null);
+        assertAttributeEqualsContinually(entity, Attributes.SERVICE_STATE_ACTUAL, null);
         
         // switching the entity state to one not in IGNORE_ENTITIES_WITH_THESE_SERVICE_STATES
will propagate the up state
         ServiceStateLogic.setExpectedState(entity, Lifecycle.RUNNING);
-        assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, false);
+        assertAttributeEqualsContinually(entity, Attributes.SERVICE_UP, false);
+        assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
         assertAttributeEqualsEventually(app, Attributes.SERVICE_UP, false);
         assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
 
@@ -182,17 +183,18 @@ public class ServiceStateLogicTest extends BrooklynAppUnitTestSupport
{
         // if the entity expects to be stopped, it will report stopped
         ServiceStateLogic.setExpectedState(entity, Lifecycle.STOPPED);
         assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
-        // and now so does the app 
-        assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
+        // and the app will ignore the entity state, so becomes running
+        assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        assertAttributeEqualsEventually(app, Attributes.SERVICE_UP, true);
         
         // if we clear the not-up indicator, both the entity and the app report service up
(with the entity first)
         ServiceNotUpLogic.clearNotUpIndicator(entity, INDICATOR_KEY_1);
-        assertAttributeEqualsEventually(app, Attributes.SERVICE_UP, true);
-        assertAttributeEquals(entity, Attributes.SERVICE_UP, true);
+        assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, true);
         // but entity is still stopped because that is what is expected there, and that's
okay even if service is apparently up
-        assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
+        assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPED);
         // the app however is running, because the default state quorum check is "all are
healthy"
-        assertAttributeEqualsEventually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        assertAttributeEqualsContinually(app, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
+        assertAttributeEqualsContinually(app, Attributes.SERVICE_UP, true);
         
         // if we change the state quorum check for the app to be "all are healthy and at
least one running" *then* it shows stopped
         // (normally this would be done in `initEnrichers` of course)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
index 316c549..0aeaa86 100644
--- a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
@@ -20,6 +20,8 @@ package brooklyn.entity.rebind.persister;
 
 import static org.testng.Assert.assertEquals;
 
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
@@ -108,6 +110,19 @@ public class XmlMementoSerializerTest {
     }
 
     @Test
+    public void testArraysAsList() throws Exception {
+        // For some reason Arrays.asList used in the catalog's libraries can't be deserialized
correctly,
+        // but here works perfectly - the generated catalog xml contains
+        //    <libraries class="list">
+        //      <a ...>
+        //        <bundle....>
+        // which is deserialized as an ArrayList with a single member array of bundles.
+        // The cause is the class="list" type which should be java.util.Arrays$ArrayList
instead.
+        Collection<String> obj = Arrays.asList("a", "b");
+        assertSerializeAndDeserialize(obj);
+    }
+
+    @Test
     public void testImmutableList() throws Exception {
         List<String> obj = ImmutableList.of("123");
         assertSerializeAndDeserialize(obj);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/event/feed/http/HttpFeedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/event/feed/http/HttpFeedTest.java b/core/src/test/java/brooklyn/event/feed/http/HttpFeedTest.java
index 817fdb1..99b095d 100644
--- a/core/src/test/java/brooklyn/event/feed/http/HttpFeedTest.java
+++ b/core/src/test/java/brooklyn/event/feed/http/HttpFeedTest.java
@@ -300,24 +300,11 @@ public class HttpFeedTest extends BrooklynAppUnitTestSupport {
     }
 
 
-    @Test(groups="Integration")
-    /** marked as integration so it doesn't fail the plain build in environments
-     * with dodgy DNS (ie where "unresolvable_hostname_or_one_with_no_webserver_on_port_80"
resolves as a host run by the provider)
-     * <p>
-     * (a surprising number of ISP's do this,
-     * happily serving adverts for your ISP, yielding "success" here,
-     * or timing out, giving null here)
-     * <p>
-     * if you want to make this test work, you can e.g. set it to loopback IP assuming you
don't have any servers on port 80,
-     * with the following in /etc/hosts
-     * <p>  
-     * 127.0.0.1  unresolvable_hostname_or_one_with_no_webserver_on_port_80
-    // or some other IP which won't resolve
-     */
+    @Test
     public void testPollsAndParsesHttpErrorResponseWild() throws Exception {
         feed = HttpFeed.builder()
                 .entity(entity)
-                .baseUri("http://unresolvable_hostname_or_one_with_no_webserver_on_port_80")
+                .baseUri("http://0.0.0.0")
                 .poll(HttpPollConfig.forSensor(SENSOR_STRING)
                         .onSuccess(Functions.constant("success"))
                         .onFailure(Functions.constant("failure"))

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/location/basic/SshMachineLocationIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/SshMachineLocationIntegrationTest.java
b/core/src/test/java/brooklyn/location/basic/SshMachineLocationIntegrationTest.java
index 9c85e95..1c0e570 100644
--- a/core/src/test/java/brooklyn/location/basic/SshMachineLocationIntegrationTest.java
+++ b/core/src/test/java/brooklyn/location/basic/SshMachineLocationIntegrationTest.java
@@ -63,7 +63,14 @@ public class SshMachineLocationIntegrationTest {
         mgmt = null;
     }
 
-    // Note: requires `named:localhost-passphrase` set up with a key whose passphrase is
"localhost"    
+    // Note: requires `named:localhost-passphrase` set up with a key whose passphrase is
"localhost"
+    // * create the key with:
+    //      ssh-keygen -t rsa -N "brooklyn" -f ~/.ssh/id_rsa_passphrase
+    //      ssh-copy-id localhost
+    // * create brooklyn.properties, containing:
+    //      brooklyn.location.named.localhost-passphrase=localhost
+    //      brooklyn.location.named.localhost-passphrase.privateKeyFile=~/.ssh/id_rsa_passphrase
+    //      brooklyn.location.named.localhost-passphrase.privateKeyPassphrase=brooklyn
     @Test(groups = "Integration")
     public void testExtractingConnectablePassphraselessKey() throws Exception {
         LocalhostMachineProvisioningLocation lhp = (LocalhostMachineProvisioningLocation)
mgmt.getLocationRegistry().resolve("named:localhost-passphrase", true, null).orNull();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/location/basic/SshMachineLocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/basic/SshMachineLocationTest.java b/core/src/test/java/brooklyn/location/basic/SshMachineLocationTest.java
index 774d54e..31d48f2 100644
--- a/core/src/test/java/brooklyn/location/basic/SshMachineLocationTest.java
+++ b/core/src/test/java/brooklyn/location/basic/SshMachineLocationTest.java
@@ -275,6 +275,8 @@ public class SshMachineLocationTest {
     
     // Note: on some (home/airport) networks, `ssh 123.123.123.123` hangs seemingly forever.
     // Make sure we fail, waiting for longer than the 70 second TCP timeout.
+    //
+    // Times out in 2m7s on Ubuntu Vivid (syn retries set to 6)
     @Test(groups = "Integration")
     public void testIsSshableWhenFalse() throws Exception {
         byte[] unreachableIp = new byte[] {123,123,123,123};
@@ -283,7 +285,7 @@ public class SshMachineLocationTest {
             public void run() {
                 assertFalse(unreachableHost.isSshable());
             }},
-            Duration.TWO_MINUTES);
+            Duration.minutes(3));
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/location/geo/HostGeoLookupIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/geo/HostGeoLookupIntegrationTest.java b/core/src/test/java/brooklyn/location/geo/HostGeoLookupIntegrationTest.java
index 85acb6d..c362ab4 100644
--- a/core/src/test/java/brooklyn/location/geo/HostGeoLookupIntegrationTest.java
+++ b/core/src/test/java/brooklyn/location/geo/HostGeoLookupIntegrationTest.java
@@ -27,6 +27,7 @@ import org.testng.annotations.Test;
 
 import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.util.time.Duration;
 
 import com.google.common.base.Objects;
 
@@ -34,6 +35,7 @@ public class HostGeoLookupIntegrationTest {
 
     public static final Logger log = LoggerFactory.getLogger(HostGeoLookupIntegrationTest.class);
     
+    // Needs fast network connectivity to figure out the external IP. If response not returned
in 2s fails.
     @Test(groups = "Integration")
     public void testLocalhostGetsLocation() throws Exception {
         LocalhostMachineProvisioningLocation ll = new LocalhostMachineProvisioningLocation();
@@ -58,7 +60,9 @@ public class HostGeoLookupIntegrationTest {
 
     @Test(groups = "Integration")
     public void testUtraceLookup() throws Exception {
-        HostGeoInfo geo = new UtraceHostGeoLookup().getHostGeoInfo(InetAddress.getByName("utrace.de"));
+        // The test times out in a VM - VirtualBox + Ubuntu Vivid, possibly due to proxy
usage?
+        // Increase the timeout so we can actually test it's working correctly, regardless
of test environment.
+        HostGeoInfo geo = new UtraceHostGeoLookup().getHostGeoInfo(InetAddress.getByName("utrace.de"),
Duration.THIRTY_SECONDS);
         Assert.assertNotNull(geo, "host lookup unavailable - maybe network not available
");
         Assert.assertTrue(geo.displayName.contains("(DE)"));
         Assert.assertEquals(geo.latitude, 51, 2);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
index caebac1..9d468a6 100644
--- a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
+++ b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
@@ -117,7 +117,7 @@ public class SshjToolAsyncStubIntegrationTest {
     @Test(groups="Integration")
     public void testPolls() throws Exception {
         sequence = ImmutableList.of(
-                new InjectedResult(containsCmd("& disown"), returning(0, "", "")),
+                new InjectedResult(containsCmd("nohup"), returning(0, "", "")),
                 new InjectedResult(containsCmd("# Long poll"), returning(0, "mystringToStdout",
"mystringToStderr")));
 
         runTest(0, "mystringToStdout", "mystringToStderr");
@@ -127,7 +127,7 @@ public class SshjToolAsyncStubIntegrationTest {
     @Test(groups="Integration")
     public void testPollsAndReturnsNonZeroExitCode() throws Exception {
         sequence = ImmutableList.of(
-                new InjectedResult(containsCmd("& disown"), returning(0, "", "")),
+                new InjectedResult(containsCmd("nohup"), returning(0, "", "")),
                 new InjectedResult(containsCmd("# Long poll"), returning(123, "mystringToStdout",
"mystringToStderr")),
                 new InjectedResult(containsCmd("# Retrieve status"), returning(0, "123",
"")));
 
@@ -138,7 +138,7 @@ public class SshjToolAsyncStubIntegrationTest {
     @Test(groups="Integration")
     public void testPollsRepeatedly() throws Exception {
         sequence = ImmutableList.of(
-                new InjectedResult(containsCmd("& disown"), returning(0, "", "")),
+                new InjectedResult(containsCmd("nohup"), returning(0, "", "")),
                 new InjectedResult(containsCmd("# Long poll"), returning(125, "mystringToStdout",
"mystringToStderr")),
                 new InjectedResult(containsCmd("# Retrieve status"), returning(0, "", "")),
                 new InjectedResult(containsCmd("# Long poll"), returning(125, "mystringToStdout2",
"mystringToStderr2")),

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/fae666cf/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
index c809ad1..de3f58e 100644
--- a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
+++ b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 
 import net.schmizz.sshj.connection.channel.direct.Session;
 
@@ -236,18 +237,24 @@ public class SshjToolIntegrationTest extends SshToolAbstractIntegrationTest
{
 
     @Test(groups = {"Integration"})
     public void testAsyncExecAbortsIfProcessFails() throws Exception {
+        final AtomicReference<Throwable> error = new AtomicReference<Throwable>();
         Thread thread = new Thread(new Runnable() {
+            @Override
             public void run() {
-                Stopwatch stopwatch = Stopwatch.createStarted();
-                int exitStatus = tool.execScript(
-                    ImmutableMap.of(SshjTool.PROP_EXEC_ASYNC.getName(), true, SshjTool.PROP_EXEC_TIMEOUT.getName(),
Duration.millis(1)), 
-                    ImmutableList.of("sleep 63"), 
-                    ImmutableMap.<String,String>of());
-                
-                assertEquals(exitStatus, 1);
-                
-                long seconds = stopwatch.elapsed(TimeUnit.SECONDS);
-                assertTrue(seconds < 30, "exec took "+seconds+" seconds");
+                try {
+                    Stopwatch stopwatch = Stopwatch.createStarted();
+                    int exitStatus = tool.execScript(
+                        ImmutableMap.of(SshjTool.PROP_EXEC_ASYNC.getName(), true, SshjTool.PROP_EXEC_TIMEOUT.getName(),
Duration.millis(1)), 
+                        ImmutableList.of("sleep 63"), 
+                        ImmutableMap.<String,String>of());
+                    
+                    assertEquals(exitStatus, 143 /* 128 + Signal number (SIGTERM) */);
+                    
+                    long seconds = stopwatch.elapsed(TimeUnit.SECONDS);
+                    assertTrue(seconds < 30, "exec took "+seconds+" seconds");
+                } catch (Throwable t) {
+                    error.set(t);
+                }
             }});
         
         boolean origFeatureEnablement = BrooklynFeatureEnablement.enable(BrooklynFeatureEnablement.FEATURE_SSH_ASYNC_EXEC);
@@ -255,6 +262,7 @@ public class SshjToolIntegrationTest extends SshToolAbstractIntegrationTest
{
             thread.start();
             
             Asserts.succeedsEventually(new Runnable() {
+                @Override
                 public void run() {
                     int exitStatus = tool.execCommands(ImmutableMap.<String,Object>of(),
ImmutableList.of("ps aux| grep \"sleep 63\" | grep -v grep"));
                     assertEquals(exitStatus, 0);
@@ -264,6 +272,9 @@ public class SshjToolIntegrationTest extends SshToolAbstractIntegrationTest
{
             
             thread.join(30*1000);
             assertFalse(thread.isAlive());
+            if (error.get() != null) {
+                throw Exceptions.propagate(error.get());
+            }
         } finally {
             thread.interrupt();
             BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.FEATURE_SSH_ASYNC_EXEC,
origFeatureEnablement);


Mime
View raw message