You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/12/13 15:58:55 UTC

[01/13] brooklyn-server git commit: fix SshjToolIntegrationTest

Repository: brooklyn-server
Updated Branches:
  refs/heads/master 7f1846c0f -> b034a2727


fix SshjToolIntegrationTest


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

Branch: refs/heads/master
Commit: 1a279401aaf68a6970f96950fe45e0e72581680b
Parents: 16d4e8b
Author: Andrea Turli <an...@gmail.com>
Authored: Mon Nov 7 11:24:26 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:29:57 2016 +0100

----------------------------------------------------------------------
 .../brooklyn/util/core/internal/ssh/sshj/SshjTool.java      | 9 ++++++---
 .../core/internal/ssh/sshj/SshjToolIntegrationTest.java     | 7 +++----
 .../test/java/org/apache/brooklyn/util/osgi/OsgisTest.java  | 2 --
 3 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/1a279401/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
index 1ee02da..328f66d 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
@@ -273,7 +273,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
 
     @Override
     public int copyFromServer(Map<String,?> props, String pathAndFileOnRemoteServer, File localFile) {
-        LocalDestFile localDestFile = acquire(new GetFileAction(pathAndFileOnRemoteServer));
+        LocalDestFile localDestFile = acquire(new GetFileAction(pathAndFileOnRemoteServer, localFile));
         return 0;
     }
 
@@ -697,10 +697,13 @@ public class SshjTool extends SshAbstractTool implements SshTool {
 
     private class GetFileAction implements SshAction<LocalDestFile> {
         private final String path;
+        private final File localFile;
         private SFTPClient sftp;
 
-        GetFileAction(String path) {
+
+        public GetFileAction(String path, File localFile) {
             this.path = checkNotNull(path, "path");
+            this.localFile = checkNotNull(localFile, "localFile");
         }
 
         @Override
@@ -712,7 +715,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         @Override
         public LocalDestFile create() throws Exception {
             sftp = acquire(sftpConnection);
-            LocalDestFile localDestFile = new FileSystemFile(path);
+            LocalDestFile localDestFile = new FileSystemFile(localFile);
             sftp.get(path, localDestFile);
             return localDestFile;
         }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/1a279401/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjToolIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjToolIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjToolIntegrationTest.java
index fd3fa1a..093835e 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjToolIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjToolIntegrationTest.java
@@ -34,14 +34,11 @@ 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;
-
 import org.apache.brooklyn.core.BrooklynFeatureEnablement;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.core.internal.ssh.SshException;
 import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.core.internal.ssh.SshToolAbstractIntegrationTest;
-import org.apache.brooklyn.util.core.internal.ssh.sshj.SshjTool;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.exceptions.RuntimeTimeoutException;
 import org.apache.brooklyn.util.os.Os;
@@ -52,8 +49,10 @@ import com.google.common.base.Stopwatch;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
+import net.schmizz.sshj.connection.channel.direct.Session;
+
 /**
- * Test the operation of the {@link SshJschTool} utility class.
+ * Test the operation of the {@link SshjTool} utility class.
  */
 public class SshjToolIntegrationTest extends SshToolAbstractIntegrationTest {
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/1a279401/utils/common/src/test/java/org/apache/brooklyn/util/osgi/OsgisTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/osgi/OsgisTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/osgi/OsgisTest.java
index c23c185..c86670a 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/osgi/OsgisTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/osgi/OsgisTest.java
@@ -18,8 +18,6 @@
  */
 package org.apache.brooklyn.util.osgi;
 
-import org.apache.brooklyn.util.osgi.OsgiUtils;
-import org.apache.brooklyn.util.osgi.VersionedName;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 


[11/13] brooklyn-server git commit: Fix sshj async-exec

Posted by al...@apache.org.
Fix sshj async-exec

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

Branch: refs/heads/master
Commit: f8c764605f3e7054d33c5278bf25e735a4e1e9d8
Parents: eef749c
Author: Aled Sage <al...@gmail.com>
Authored: Tue Dec 13 14:41:39 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Dec 13 14:41:39 2016 +0000

----------------------------------------------------------------------
 .../apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/f8c76460/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
index de94c98..d641478 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
@@ -428,7 +428,8 @@ public abstract class ShellAbstractTool implements ShellTool {
             cmdParts.add(
                     //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");
+                    "ps aux | grep \"tail -c\" | grep \""+stderrPath+"\" | grep -v grep | awk '{ printf $2 }' | xargs kill 2> /dev/null",
+                    "exit 0");
 
             String cmd = Joiner.on("\n").join(cmdParts.build());
             


[07/13] brooklyn-server git commit: update jclouds version

Posted by al...@apache.org.
update jclouds version

- adapt brooklyn code to recent jclouds api
- add jclouds snapshot repo to pom.xml to be removed


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

Branch: refs/heads/master
Commit: 2a0f3e568bd3e8119291446aa11057933159f9b6
Parents: 1a27940
Author: Andrea Turli <an...@gmail.com>
Authored: Tue Nov 8 11:45:52 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:30:45 2016 +0100

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       |  2 +-
 .../AbstractPortableTemplateBuilder.java        |  3 ++
 .../templates/PortableTemplateBuilder.java      | 10 ++++-
 .../persist/jclouds/BlobStoreExpiryTest.java    | 44 +++++++-------------
 .../jclouds/DelegatingComputeService.java       | 24 +++++------
 ...dsByonLocationResolverStubbedRebindTest.java |  3 +-
 .../JcloudsByonLocationResolverStubbedTest.java |  3 +-
 .../jclouds/StubbedComputeServiceRegistry.java  |  9 ++--
 pom.xml                                         | 12 +++++-
 9 files changed, 53 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 08ddad9..8a95ca0 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -2208,7 +2208,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
 
             if (useKey) {
                 // NB: further keys are added from config *after* user creation
-                statements.add(new AuthorizeRSAPublicKeys("~"+user+"/.ssh", ImmutableList.of(credential.getPublicKeyData())));
+                statements.add(new AuthorizeRSAPublicKeys("~"+user+"/.ssh", ImmutableList.of(credential.getPublicKeyData()), null));
                 if (Strings.isNonBlank(credential.getPrivateKeyData())) {
                     createdUserCreds = LoginCredentials.builder().user(user).privateKey(credential.getPrivateKeyData()).build();
                 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java
index c935ea8..f159834 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java
@@ -28,6 +28,7 @@ import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.domain.TemplateBuilder;
 import org.jclouds.compute.options.TemplateOptions;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
@@ -63,6 +64,8 @@ public abstract class AbstractPortableTemplateBuilder<T extends AbstractPortable
     private TemplateOptions options;
     /** these are extra options that we want _added_, in order, on top of the last options set */
     private List<TemplateOptions> additionalOptions = new ArrayList<TemplateOptions>();
+    @VisibleForTesting
+    protected Boolean forceCacheReload;
     
     @Override
     public T any() {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/PortableTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/PortableTemplateBuilder.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/PortableTemplateBuilder.java
index eaea03b..8d33921 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/PortableTemplateBuilder.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/PortableTemplateBuilder.java
@@ -42,13 +42,19 @@ public class PortableTemplateBuilder<T extends PortableTemplateBuilder<?>> exten
     
     ComputeService svc;
     List<TemplateOptions> additionalOptionalOptions = new ArrayList<TemplateOptions>();
-
+    
     @Override
     public synchronized Template build() {
         if (svc!=null) return newJcloudsTemplate(svc);
         throw new IllegalStateException("Cannot build a portable template until a compute service is attached");
     }
-    
+
+    @Override
+    public TemplateBuilder forceCacheReload() {
+        this.forceCacheReload = true;
+        return this;
+    }
+
     public synchronized ComputeService attachComputeService(ComputeService svc) {
         ComputeService old = this.svc;
         this.svc = svc;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/test/java/org/apache/brooklyn/core/mgmt/persist/jclouds/BlobStoreExpiryTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/core/mgmt/persist/jclouds/BlobStoreExpiryTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/core/mgmt/persist/jclouds/BlobStoreExpiryTest.java
index 98c49a2..460d705 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/core/mgmt/persist/jclouds/BlobStoreExpiryTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/core/mgmt/persist/jclouds/BlobStoreExpiryTest.java
@@ -19,13 +19,6 @@
 package org.apache.brooklyn.core.mgmt.persist.jclouds;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.openstack.reference.AuthHeaders.URL_SUFFIX;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.List;
-import java.util.Map.Entry;
 
 import org.apache.brooklyn.api.mgmt.ManagementContext;
 import org.apache.brooklyn.core.entity.Entities;
@@ -33,34 +26,20 @@ import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.location.LocationConfigKeys;
 import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
 import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.http.HttpTool;
-import org.apache.brooklyn.util.http.HttpToolResponse;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.location.jclouds.JcloudsUtil;
 import org.apache.brooklyn.util.text.Identifiers;
-import org.apache.brooklyn.util.time.Duration;
-import org.apache.brooklyn.util.time.Time;
-import org.apache.http.client.HttpClient;
 import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.domain.Credentials;
-import org.jclouds.openstack.domain.AuthenticationResponse;
-import org.jclouds.openstack.reference.AuthHeaders;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsUtil;
 
 import com.google.common.base.Preconditions;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
-import com.google.inject.Inject;
 
-@Test(groups={"Live", "Live-sanity"})
+// Disabled as `swift` is not supported in jclouds 2.0.0+ 
+@Test(groups={"Live", "Live-sanity"} , enabled = false)
 public class BlobStoreExpiryTest {
 
     private static final Logger log = LoggerFactory.getLogger(BlobStoreExpiryTest.class);
@@ -121,6 +100,10 @@ public class BlobStoreExpiryTest {
         context = null;
     }
 
+    /** FIXME
+     * see comment on this class
+     */
+    /*
     public void testRenewAuthSucceedsInSwiftObjectStore() throws Exception {
         doTestRenewAuth();
     }
@@ -143,11 +126,6 @@ public class BlobStoreExpiryTest {
         context.getBlobStore().deleteContainer(testContainerName);
     }
 
-    private void assertContainerFound() {
-        PageSet<? extends StorageMetadata> ps = context.getBlobStore().list();
-        BlobStoreTest.assertHasItemNamed(ps, testContainerName);
-    }
-
     private void injectShortLivedTokenForSwiftAuth() throws Exception {
         URL endpointUrl = new URL(endpoint);
 
@@ -178,6 +156,11 @@ public class BlobStoreExpiryTest {
            this.authenticationResponseCache = authenticationResponseCache;
         }
     }
+
+    private void assertContainerFound() {
+        PageSet<? extends StorageMetadata> ps = context.getBlobStore().list();
+        BlobStoreTest.assertHasItemNamed(ps, testContainerName);
+    }
     
     public static HttpToolResponse requestTokenWithExplicitLifetime(URL url, String user, String key, Duration expiration) throws URISyntaxException {
         HttpClient client = HttpTool.httpClientBuilder().build();
@@ -192,5 +175,6 @@ public class BlobStoreExpiryTest {
         log.info("Requested token with explicit lifetime: "+expiration+" at "+url+"\n"+response+"\n"+response.getHeaderLists());
         return response;
     }
+    */
     
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/DelegatingComputeService.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/DelegatingComputeService.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/DelegatingComputeService.java
index 8e718e2..b1d8006 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/DelegatingComputeService.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/DelegatingComputeService.java
@@ -87,7 +87,7 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> listNodesByIds(Iterable<String> ids) {
+    public Set<? extends ComputeMetadata> listNodesByIds(Iterable<String> ids) {
         return delegate.listNodesByIds(ids);
     }
 
@@ -118,7 +118,7 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> resumeNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> resumeNodesMatching(Predicate<? super NodeMetadata> filter) {
         return delegate.resumeNodesMatching(filter);
     }
 
@@ -128,7 +128,7 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> suspendNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> suspendNodesMatching(Predicate<? super NodeMetadata> filter) {
         return delegate.suspendNodesMatching(filter);
     }
 
@@ -138,7 +138,7 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) {
         return delegate.destroyNodesMatching(filter);
     }
 
@@ -148,7 +148,7 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> rebootNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> rebootNodesMatching(Predicate<? super NodeMetadata> filter) {
         return delegate.rebootNodesMatching(filter);
     }
 
@@ -158,31 +158,27 @@ public class DelegatingComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+    public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
         return delegate.listNodesDetailsMatching(filter);
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter, String runScript)
-            throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, String runScript) throws RunScriptOnNodesException {
         return delegate.runScriptOnNodesMatching(filter, runScript);
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter, Statement runScript)
-            throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, Statement runScript) throws RunScriptOnNodesException {
         return delegate.runScriptOnNodesMatching(filter, runScript);
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter,
-            String runScript, RunScriptOptions options) throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, String runScript, RunScriptOptions options) throws RunScriptOnNodesException {
         return delegate.runScriptOnNodesMatching(filter, runScript, options);
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter,
-            Statement runScript, RunScriptOptions options) throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, Statement runScript, RunScriptOptions options) throws RunScriptOnNodesException {
         return delegate.runScriptOnNodesMatching(filter, runScript, options);
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedRebindTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedRebindTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedRebindTest.java
index 96b5786..56e8ccc 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedRebindTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedRebindTest.java
@@ -42,7 +42,6 @@ import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCr
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.text.Identifiers;
 import org.apache.brooklyn.util.time.Duration;
-import org.jclouds.compute.domain.ComputeMetadata;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeMetadata.Status;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
@@ -118,7 +117,7 @@ public class JcloudsByonLocationResolverStubbedRebindTest extends AbstractJcloud
     }
     public static class NodeCreatorForRebinding extends AbstractNodeCreator {
         @Override
-        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
             NodeMetadata result = new NodeMetadataBuilder()
                     .id(nodeId)
                     .credentials(LoginCredentials.builder().identity("dummy").credential("dummy").build())

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedTest.java
index 13cf30c..8432905 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolverStubbedTest.java
@@ -33,7 +33,6 @@ import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
 import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation;
 import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.AbstractNodeCreator;
 import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCreator;
-import org.jclouds.compute.domain.ComputeMetadata;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeMetadata.Status;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
@@ -79,7 +78,7 @@ public class JcloudsByonLocationResolverStubbedTest extends AbstractJcloudsStubb
     protected NodeCreator newNodeCreator() {
         return new AbstractNodeCreator() {
             @Override
-            public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+            public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
                 NodeMetadata result = new NodeMetadataBuilder()
                         .id(nodeId)
                         .credentials(LoginCredentials.builder().identity("dummy").credential("dummy").build())

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
index 9dee5ef..e97f0ea 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
@@ -25,7 +25,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.RunNodesException;
-import org.jclouds.compute.domain.ComputeMetadata;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeMetadata.Status;
 import org.jclouds.compute.domain.NodeMetadataBuilder;
@@ -44,7 +43,7 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
     public static interface NodeCreator {
         public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, Template template) throws RunNodesException;
         public void destroyNode(String id);
-        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter);
+        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter);
     }
 
     public static abstract class AbstractNodeCreator implements NodeCreator {
@@ -66,7 +65,7 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
             destroyed.add(id);
         }
         @Override
-        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
             return ImmutableSet.of();
         }
         protected abstract NodeMetadata newNode(String group, Template template);
@@ -116,7 +115,7 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
             nodeCreator.destroyNode(id);
         }
         @Override
-        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
             return nodeCreator.listNodesDetailsMatching(filter);
         }
         @Override
@@ -128,7 +127,7 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
             throw new UnsupportedOperationException();
         }
         @Override
-        public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<NodeMetadata> filter) {
+        public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) {
             throw new UnsupportedOperationException();
         }
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a0f3e56/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 11b97a7..f0218cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,16 @@
         </mailingList>
     </mailingLists>
 
+    <repositories>
+      <repository>
+          <id>jclouds-snapshots</id>
+        <url>https://repository.apache.org/content/repositories/snapshots</url>
+        <snapshots>
+            <enabled>true</enabled>
+        </snapshots>
+      </repository>
+    </repositories>
+
     <properties>
         <brooklyn.version>0.11.0-SNAPSHOT</brooklyn.version>  <!-- BROOKLYN_VERSION -->
 
@@ -91,7 +101,7 @@
         <surefire.failIfNoSpecifiedTests>false</surefire.failIfNoSpecifiedTests>
 
         <!-- Dependency Versions -->
-        <jclouds.version>1.9.3</jclouds.version> <!-- JCLOUDS_VERSION -->
+        <jclouds.version>2.0.0</jclouds.version> <!-- JCLOUDS_VERSION -->
         <logback.version>1.0.7</logback.version>
         <slf4j.version>1.6.6</slf4j.version>  <!-- used for java.util.logging jul-to-slf4j interception -->
         <!-- Must match jclouds' version. From jclouds 1.9.3+ can be any version in the range [16-20) -->


[04/13] brooklyn-server git commit: bump bouncycastle version

Posted by al...@apache.org.
bump bouncycastle version


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

Branch: refs/heads/master
Commit: 16d4e8b8face581866df1d78acda0e42a40b589c
Parents: 9e29d22
Author: Andrea Turli <an...@gmail.com>
Authored: Mon Nov 7 09:05:07 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:29:57 2016 +0100

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/16d4e8b8/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 7e7e0d1..11b97a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -119,7 +119,7 @@
         <gson.version>2.3</gson.version>
         <ivy.version>2.2.0</ivy.version>
         <mx4j.version>3.0.1</mx4j.version>
-        <bouncycastle.version>1.49</bouncycastle.version>
+        <bouncycastle.version>1.51</bouncycastle.version>
         <sshj.version>0.12.0</sshj.version>
         <felix.framework.version>5.4.0</felix.framework.version>
         <reflections.version>0.9.9-RC1</reflections.version>


[12/13] brooklyn-server git commit: Merge pull request #1 from aledsage/googlielmo-aled/jclouds-2.0.0

Posted by al...@apache.org.
Merge pull request #1 from aledsage/googlielmo-aled/jclouds-2.0.0

Fix sshj async-exec

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

Branch: refs/heads/master
Commit: 885a42aac5d5167bfde0a3a758c31e5f5d723897
Parents: b69e1bb f8c7646
Author: Guglielmo Nigri <go...@gmail.com>
Authored: Tue Dec 13 15:44:32 2016 +0100
Committer: GitHub <no...@github.com>
Committed: Tue Dec 13 15:44:32 2016 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[10/13] brooklyn-server git commit: Fixes jclouds unit tests

Posted by al...@apache.org.
Fixes jclouds unit tests


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

Branch: refs/heads/master
Commit: b69e1bb287ce3654d2fd20f4017533283a00ff47
Parents: 8b8b8df
Author: Mark McKenna <m4...@gmail.com>
Authored: Mon Dec 12 15:26:12 2016 +0000
Committer: Mark McKenna <m4...@gmail.com>
Committed: Mon Dec 12 15:26:12 2016 +0000

----------------------------------------------------------------------
 .../brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b69e1bb2/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
index 0e7ef12..a807dc4 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
@@ -102,7 +102,8 @@ public class JcloudsStubTemplateBuilder {
                 .of(HARDWARE_SUPPORTING_BOGUS));
 
 
-        AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(new AuthorizationException());
+//        AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(new AuthorizationException());
+        AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>();
 
         com.google.inject.Provider<GetImageStrategy> imageLoader = new com.google.inject.Provider<GetImageStrategy>() {
             @Override


[06/13] brooklyn-server git commit: remove some jclouds labs dependency

Posted by al...@apache.org.
remove some jclouds labs dependency


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

Branch: refs/heads/master
Commit: 959cd30a493e3061ed9ccf6fd5c610c7de27ba34
Parents: 2a0f3e5
Author: Andrea Turli <an...@gmail.com>
Authored: Tue Nov 8 14:02:24 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:30:45 2016 +0100

----------------------------------------------------------------------
 locations/jclouds/pom.xml | 16 ----------------
 1 file changed, 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/959cd30a/locations/jclouds/pom.xml
----------------------------------------------------------------------
diff --git a/locations/jclouds/pom.xml b/locations/jclouds/pom.xml
index 7f7d29e..347e2be 100644
--- a/locations/jclouds/pom.xml
+++ b/locations/jclouds/pom.xml
@@ -136,22 +136,6 @@
             <version>${jclouds.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>${jclouds.groupId}.labs</groupId>
-            <artifactId>abiquo</artifactId>
-            <version>${jclouds.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${jclouds.groupId}.labs</groupId>
-            <artifactId>google-compute-engine</artifactId>
-            <version>${jclouds.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>${jclouds.groupId}.labs</groupId>
-            <artifactId>docker</artifactId>
-            <version>${jclouds.version}</version>
-        </dependency>
-
         <!-- these two seem needed here to prevent Eclipse IDE from getting wrong version of logback-core -->
         <dependency>
             <groupId>ch.qos.logback</groupId>


[13/13] brooklyn-server git commit: This closes #481

Posted by al...@apache.org.
This closes #481


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

Branch: refs/heads/master
Commit: b034a2727a6f6b1853008568814c057b3ea6f84f
Parents: 7f1846c 885a42a
Author: Aled Sage <al...@gmail.com>
Authored: Tue Dec 13 15:58:40 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Dec 13 15:58:40 2016 +0000

----------------------------------------------------------------------
 core/pom.xml                                    |   2 +-
 .../core/location/LocationConfigUtils.java      |   5 +-
 .../util/core/crypto/FluentKeySigner.java       |  11 +-
 .../brooklyn/util/core/crypto/SecureKeys.java   |  51 +----
 .../core/internal/ssh/ShellAbstractTool.java    |   3 +-
 .../util/core/internal/ssh/sshj/SshjTool.java   | 211 +++++++++----------
 .../ssh/sshj/SshjToolIntegrationTest.java       |   7 +-
 karaf/features/src/main/feature/feature.xml     |  11 +-
 locations/jclouds/pom.xml                       |  10 +-
 .../location/jclouds/JcloudsLocation.java       |   2 +-
 .../AbstractPortableTemplateBuilder.java        |   3 +
 .../templates/PortableTemplateBuilder.java      |  10 +-
 .../persist/jclouds/BlobStoreExpiryTest.java    |  44 ++--
 .../jclouds/DelegatingComputeService.java       |  24 +--
 ...dsByonLocationResolverStubbedRebindTest.java |   3 +-
 .../JcloudsByonLocationResolverStubbedTest.java |   3 +-
 .../jclouds/JcloudsStubTemplateBuilder.java     |  26 ++-
 .../jclouds/StubbedComputeServiceRegistry.java  |  15 +-
 .../jclouds/UnsupportedComputeService.java      |  22 +-
 .../brooklyn/logback-logger-excludes.xml        |   4 +-
 parent/pom.xml                                  |   2 +-
 pom.xml                                         |  18 +-
 .../apache/brooklyn/util/osgi/OsgisTest.java    |   2 -
 23 files changed, 228 insertions(+), 261 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b034a272/pom.xml
----------------------------------------------------------------------


[09/13] brooklyn-server git commit: Swap service mix wrapped `jsch.agentproxy.sshj` for karaf wrap

Posted by al...@apache.org.
Swap service mix wrapped `jsch.agentproxy.sshj` for karaf wrap


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

Branch: refs/heads/master
Commit: 8b8b8dfb354f884a94a3ae230c20e005afe39f5c
Parents: eef749c
Author: Mark McKenna <m4...@gmail.com>
Authored: Mon Dec 12 15:23:20 2016 +0000
Committer: Mark McKenna <m4...@gmail.com>
Committed: Mon Dec 12 15:23:20 2016 +0000

----------------------------------------------------------------------
 karaf/features/src/main/feature/feature.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b8b8dfb/karaf/features/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index 14a9d8f..8cd569a 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -266,7 +266,7 @@
         <bundle dependency="true">mvn:org.apache.jclouds.provider/google-compute-engine/${jclouds.version}</bundle>
 
         <feature>jclouds-services</feature>
-        <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch-agentproxy-sshj/0.0.9_1</bundle>
+        <bundle dependency="true">wrap:mvn:com.jcraft/jsch.agentproxy.sshj/0.0.9$Bundle-Name=wrap%20%3A%3A%20jsch.agentproxy.sshj</bundle>
 
         <!-- Same as allcompute -->
         <feature>jclouds-aws-ec2</feature>


[05/13] brooklyn-server git commit: add azurecompute* deps to locations/jclouds/pom.xml

Posted by al...@apache.org.
add azurecompute* deps to locations/jclouds/pom.xml


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

Branch: refs/heads/master
Commit: a5e565233854dccba309e01f22887443a4bd456a
Parents: 959cd30
Author: Andrea Turli <an...@gmail.com>
Authored: Tue Nov 8 14:05:38 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:30:45 2016 +0100

----------------------------------------------------------------------
 locations/jclouds/pom.xml | 10 ++++++++++
 1 file changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/a5e56523/locations/jclouds/pom.xml
----------------------------------------------------------------------
diff --git a/locations/jclouds/pom.xml b/locations/jclouds/pom.xml
index 347e2be..76effcb 100644
--- a/locations/jclouds/pom.xml
+++ b/locations/jclouds/pom.xml
@@ -135,6 +135,16 @@
             <artifactId>jclouds-allcompute</artifactId>
             <version>${jclouds.version}</version>
         </dependency>
+        <dependency>
+            <groupId>${jclouds.groupId}.labs</groupId>
+            <artifactId>azurecompute</artifactId>
+            <version>${jclouds.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${jclouds.groupId}.labs</groupId>
+            <artifactId>azurecompute-arm</artifactId>
+            <version>${jclouds.version}</version>
+        </dependency>
 
         <!-- these two seem needed here to prevent Eclipse IDE from getting wrong version of logback-core -->
         <dependency>


[08/13] brooklyn-server git commit: Compile with jclouds 2.0.0

Posted by al...@apache.org.
Compile with jclouds 2.0.0

 - tweak karaf dependencies [WIP]
 - small changes to accommodate new signatures
 - sshj package rename throughout


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

Branch: refs/heads/master
Commit: eef749c6c9f4e36c3dcdde1a80ed4f0e809c6f9a
Parents: a5e5652
Author: Guglielmo Nigri <gu...@cloudsoftcorp.com>
Authored: Wed Dec 7 18:07:17 2016 +0100
Committer: Guglielmo Nigri <gu...@cloudsoftcorp.com>
Committed: Wed Dec 7 18:07:17 2016 +0100

----------------------------------------------------------------------
 karaf/features/src/main/feature/feature.xml     | 11 ++++-----
 .../jclouds/JcloudsStubTemplateBuilder.java     | 25 +++++++++++++++++---
 .../jclouds/StubbedComputeServiceRegistry.java  |  6 +----
 .../jclouds/UnsupportedComputeService.java      | 22 +++++++----------
 .../brooklyn/logback-logger-excludes.xml        |  4 ++--
 pom.xml                                         |  2 +-
 6 files changed, 40 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/karaf/features/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml
index 5d4c919..14a9d8f 100644
--- a/karaf/features/src/main/feature/feature.xml
+++ b/karaf/features/src/main/feature/feature.xml
@@ -144,7 +144,7 @@
         <bundle dependency="true">mvn:net.minidev/asm/${minidev.asm.version}</bundle>
         <bundle dependency="true">mvn:com.thoughtworks.xstream/xstream/${xstream.version}</bundle>
         <bundle dependency="true">mvn:org.freemarker/freemarker/${freemarker.version}</bundle>
-        <bundle dependency="true">mvn:net.schmizz/sshj/${sshj.version}</bundle>
+        <bundle dependency="true">mvn:com.hierynomus/sshj/${sshj.version}</bundle>
         <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jzlib/1.1.3_2</bundle> <!-- jzlib version is 1.1.3, but bundle is 1.1.3_2 -->
         <bundle dependency="true">mvn:org.bouncycastle/bcprov-ext-jdk15on/${bouncycastle.version}</bundle>
         <bundle dependency="true">mvn:org.bouncycastle/bcpkix-jdk15on/${bouncycastle.version}</bundle>
@@ -260,13 +260,13 @@
         <bundle dependency="true">mvn:org.apache.jclouds.driver/jclouds-okhttp/${jclouds.version}</bundle>
 
         <bundle dependency="true">mvn:org.apache.jclouds.driver/jclouds-sshj/${jclouds.version}</bundle>
-        <bundle dependency="true">mvn:org.apache.jclouds.labs/abiquo/${jclouds.version}</bundle>
-        <bundle dependency="true">mvn:org.apache.jclouds.labs/docker/${jclouds.version}</bundle>
+        <!--<bundle dependency="true">mvn:org.apache.jclouds.labs/abiquo/${jclouds.version}</bundle>--> <!-- jclouds abstraction not implemented -->
+        <bundle dependency="true">mvn:org.apache.jclouds.api/docker/${jclouds.version}</bundle>
 
-        <!-- Not bundle-ized, fixed in 2.0.0-SNAPSHOT -->
-        <!-- bundle dependency="true">mvn:org.apache.jclouds.labs/google-compute-engine/${jclouds.version}</bundle -->
+        <bundle dependency="true">mvn:org.apache.jclouds.provider/google-compute-engine/${jclouds.version}</bundle>
 
         <feature>jclouds-services</feature>
+        <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch-agentproxy-sshj/0.0.9_1</bundle>
 
         <!-- Same as allcompute -->
         <feature>jclouds-aws-ec2</feature>
@@ -291,7 +291,6 @@
         <feature>jclouds-aws-s3</feature>
         <feature>jclouds-azureblob</feature>
         <feature>jclouds-api-atmos</feature>
-        <feature>jclouds-api-swift</feature>
         <feature>jclouds-api-openstack-swift</feature>
         <feature>jclouds-rackspace-cloudfiles-uk</feature>
         <feature>jclouds-rackspace-cloudfiles-us</feature>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
index bea98f3..0e7ef12 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsStubTemplateBuilder.java
@@ -27,6 +27,7 @@ import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import org.apache.brooklyn.util.javalang.AtomicReferences;
 import org.jclouds.compute.domain.*;
 import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.compute.strategy.GetImageStrategy;
@@ -40,9 +41,11 @@ import org.jclouds.ec2.compute.functions.ImagesToRegionAndIdMap;
 import org.jclouds.ec2.compute.internal.EC2TemplateBuilderImpl;
 import org.jclouds.ec2.domain.RootDeviceType;
 import org.jclouds.ec2.domain.VirtualizationType;
+import org.jclouds.rest.AuthorizationException;
 
 import javax.inject.Provider;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.*;
 import static org.mockito.Mockito.mock;
@@ -89,7 +92,7 @@ public class JcloudsStubTemplateBuilder {
         Provider<TemplateOptions> optionsProvider = mock(Provider.class);
         Provider<TemplateBuilder> templateBuilderProvider = mock(Provider.class);
         TemplateOptions defaultOptions = mock(TemplateOptions.class);
-        GetImageStrategy getImageStrategy = mock(GetImageStrategy.class);
+        final GetImageStrategy getImageStrategy = mock(GetImageStrategy.class);
 
         when(optionsProvider.get()).thenReturn(defaultOptions);
 
@@ -98,8 +101,24 @@ public class JcloudsStubTemplateBuilder {
         Supplier<Set<? extends Hardware>> sizes = Suppliers.<Set<? extends Hardware>> ofInstance(ImmutableSet
                 .of(HARDWARE_SUPPORTING_BOGUS));
 
-        return new EC2TemplateBuilderImpl(locations, new ImageCacheSupplier(images, 60), sizes, Suppliers.ofInstance(jcloudsDomainLocation), optionsProvider,
-                templateBuilderProvider, getImageStrategy, imageCache) {
+
+        AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(new AuthorizationException());
+
+        com.google.inject.Provider<GetImageStrategy> imageLoader = new com.google.inject.Provider<GetImageStrategy>() {
+            @Override
+            public GetImageStrategy get() {
+                return getImageStrategy;
+            }
+        };
+
+        return new EC2TemplateBuilderImpl(
+                locations,
+                new ImageCacheSupplier(images, 60, authException, imageLoader),
+                sizes,
+                Suppliers.ofInstance(jcloudsDomainLocation),
+                optionsProvider,
+                templateBuilderProvider,
+                imageCache) {
             @Override
             protected ToStringHelper string() {
                 return super.string().add("type", "Stubbed-TemplateBuilder");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
index e97f0ea..4e25dbd 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/StubbedComputeServiceRegistry.java
@@ -147,7 +147,7 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
             nodeCreator.destroyNode(id);
         }
         @Override
-        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+        public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
             return nodeCreator.listNodesDetailsMatching(filter);
         }
         @Override
@@ -158,10 +158,6 @@ public class StubbedComputeServiceRegistry implements ComputeServiceRegistry {
         public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, TemplateOptions templateOptions) {
             throw new UnsupportedOperationException();
         }
-        @Override
-        public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<NodeMetadata> filter) {
-            throw new UnsupportedOperationException();
-        }
     }
     
     private final NodeCreator nodeCreator;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/UnsupportedComputeService.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/UnsupportedComputeService.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/UnsupportedComputeService.java
index 6bd89a6..b17aac4 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/UnsupportedComputeService.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/UnsupportedComputeService.java
@@ -112,7 +112,7 @@ public class UnsupportedComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> resumeNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> resumeNodesMatching(Predicate<? super NodeMetadata> filter) {
         throw new UnsupportedOperationException();
     }
 
@@ -122,7 +122,7 @@ public class UnsupportedComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> suspendNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> suspendNodesMatching(Predicate<? super NodeMetadata> filter) {
         throw new UnsupportedOperationException();
     }
 
@@ -132,7 +132,7 @@ public class UnsupportedComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) {
         throw new UnsupportedOperationException();
     }
 
@@ -142,7 +142,7 @@ public class UnsupportedComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> rebootNodesMatching(Predicate<NodeMetadata> filter) {
+    public Set<? extends NodeMetadata> rebootNodesMatching(Predicate<? super NodeMetadata> filter) {
         throw new UnsupportedOperationException();
     }
 
@@ -152,31 +152,27 @@ public class UnsupportedComputeService implements ComputeService {
     }
 
     @Override
-    public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<ComputeMetadata> filter) {
+    public Set<? extends NodeMetadata> listNodesDetailsMatching(Predicate<? super NodeMetadata> filter) {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter, String runScript)
-            throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, String runScript) throws RunScriptOnNodesException {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter, Statement runScript)
-            throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, Statement runScript) throws RunScriptOnNodesException {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter,
-            String runScript, RunScriptOptions options) throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, String runScript, RunScriptOptions options) throws RunScriptOnNodesException {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<NodeMetadata> filter,
-            Statement runScript, RunScriptOptions options) throws RunScriptOnNodesException {
+    public Map<? extends NodeMetadata, ExecResponse> runScriptOnNodesMatching(Predicate<? super NodeMetadata> filter, Statement runScript, RunScriptOptions options) throws RunScriptOnNodesException {
         throw new UnsupportedOperationException();
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
----------------------------------------------------------------------
diff --git a/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml b/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
index afc3a0f..8bc1135 100644
--- a/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
+++ b/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
@@ -19,8 +19,8 @@
 -->
 <included>
     
-    <!-- schmizz (sshj) very noisy, profligate with errors, put to file only, at warn level -->
-    <logger name="net.schmizz" level="WARN" additivity="false">
+    <!-- sshj very noisy, profligate with errors, put to file only, at warn level -->
+    <logger name="com.hierynomus" level="WARN" additivity="false">
         <appender-ref ref="FILE" />
     </logger>
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eef749c6/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index f0218cd..6b01e8e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,7 +122,7 @@
         <commons-lang3.version>3.3.2</commons-lang3.version>
         <groovy.version>2.3.7</groovy.version> <!-- Version supported by https://github.com/groovy/groovy-eclipse/wiki/Groovy-Eclipse-2.9.1-Release-Notes -->
         <jsr305.version>2.0.1</jsr305.version>
-        <snakeyaml.version>1.16</snakeyaml.version>
+        <snakeyaml.version>1.17</snakeyaml.version>
         <!-- Next version of swagger requires changes to how path mapping and scanner injection are done. -->
         <swagger.version>1.5.6</swagger.version>
         <jansi.version>1.2.1</jansi.version>


[03/13] brooklyn-server git commit: bump sshj version

Posted by al...@apache.org.
bump sshj version


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

Branch: refs/heads/master
Commit: c3de62874f04f74bc3b542ff8f4db7e1a9a96010
Parents: 9f8a3aa
Author: Andrea Turli <an...@gmail.com>
Authored: Fri Sep 16 17:50:03 2016 +0200
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:29:57 2016 +0100

----------------------------------------------------------------------
 core/pom.xml                                    |   2 +-
 .../util/core/internal/ssh/sshj/SshjTool.java   | 206 +++++++++----------
 parent/pom.xml                                  |   2 +-
 pom.xml                                         |   2 +-
 4 files changed, 102 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c3de6287/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index f133515..02c6cbf 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -58,7 +58,7 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>net.schmizz</groupId>
+            <groupId>com.hierynomus</groupId>
             <artifactId>sshj</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c3de6287/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
index fa46af0..1ee02da 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/sshj/SshjTool.java
@@ -38,17 +38,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
-import net.schmizz.sshj.connection.ConnectionException;
-import net.schmizz.sshj.connection.channel.direct.PTYMode;
-import net.schmizz.sshj.connection.channel.direct.Session;
-import net.schmizz.sshj.connection.channel.direct.Session.Command;
-import net.schmizz.sshj.connection.channel.direct.Session.Shell;
-import net.schmizz.sshj.connection.channel.direct.SessionChannel;
-import net.schmizz.sshj.sftp.FileAttributes;
-import net.schmizz.sshj.sftp.SFTPClient;
-import net.schmizz.sshj.transport.TransportException;
-import net.schmizz.sshj.xfer.InMemorySourceFile;
-
 import org.apache.brooklyn.core.BrooklynFeatureEnablement;
 import org.apache.brooklyn.util.core.internal.ssh.BackoffLimitedRetryHandler;
 import org.apache.brooklyn.util.core.internal.ssh.ShellTool;
@@ -56,11 +45,9 @@ import org.apache.brooklyn.util.core.internal.ssh.SshAbstractTool;
 import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.exceptions.RuntimeTimeoutException;
-import org.apache.brooklyn.util.io.FileUtil;
 import org.apache.brooklyn.util.repeat.Repeater;
 import org.apache.brooklyn.util.stream.KnownSizeInputStream;
 import org.apache.brooklyn.util.stream.StreamGobbler;
-import org.apache.brooklyn.util.stream.Streams;
 import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.Duration;
 import org.apache.brooklyn.util.time.Time;
@@ -80,6 +67,19 @@ import com.google.common.io.CountingOutputStream;
 import com.google.common.net.HostAndPort;
 import com.google.common.primitives.Ints;
 
+import net.schmizz.sshj.connection.ConnectionException;
+import net.schmizz.sshj.connection.channel.direct.PTYMode;
+import net.schmizz.sshj.connection.channel.direct.Session;
+import net.schmizz.sshj.connection.channel.direct.Session.Command;
+import net.schmizz.sshj.connection.channel.direct.Session.Shell;
+import net.schmizz.sshj.connection.channel.direct.SessionChannel;
+import net.schmizz.sshj.sftp.FileAttributes;
+import net.schmizz.sshj.sftp.SFTPClient;
+import net.schmizz.sshj.transport.TransportException;
+import net.schmizz.sshj.xfer.FileSystemFile;
+import net.schmizz.sshj.xfer.InMemorySourceFile;
+import net.schmizz.sshj.xfer.LocalDestFile;
+
 /**
  * For ssh and scp-style commands, using the sshj library.
  */
@@ -95,7 +95,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
      * Having multiple threads call connect/disconnect is going to be brittle. With
      * our retries we can get away with it usually, but it's not good!
      *
-     * TODO need to upgrade sshj version from 0.8.1 to 0.9, but jclouds 1.7.2 still 
+     * TODO need to upgrade sshj version from 0.8.1 to 0.9, but jclouds 1.7.2 still
      * relies on 0.8.1. In 0.9, it fixes the https://github.com/shikhar/sshj/issues/89
      * so does not throw AssertionError.
      */
@@ -108,7 +108,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
 
     /** Terminal type name for {@code allocatePTY} option. */
     final static String TERM = "vt100"; // "dumb"
-    
+
     private class CloseFtpChannelOnCloseInputStream extends ProxyInputStream {
         private final SFTPClient sftp;
 
@@ -129,17 +129,17 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     public static SshjToolBuilder builder() {
         return new SshjToolBuilder();
     }
-    
+
     public static class SshjToolBuilder extends Builder<SshjTool, SshjToolBuilder> {
     }
-    
+
     public static class Builder<T extends SshjTool, B extends Builder<T,B>> extends AbstractSshToolBuilder<T,B> {
         protected long connectTimeout;
         protected long sessionTimeout;
         protected int sshTries = 4;  //allow 4 tries by default, much safer
         protected long sshTriesTimeout = 2*60*1000;  //allow 2 minutes by default (so if too slow trying sshTries times, abort anyway)
         protected long sshRetryDelay = 50L;
-        
+
         @Override
         public B from(Map<String,?> props) {
             super.from(props);
@@ -175,10 +175,10 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     public SshjTool(Map<String,?> map) {
         this(builder().from(map));
     }
-    
+
     protected SshjTool(Builder<?,?> builder) {
         super(builder);
-        
+
         sshTries = builder.sshTries;
         sshTriesTimeout = builder.sshTriesTimeout;
         backoffLimitedRetryHandler = new BackoffLimitedRetryHandler(sshTries, builder.sshRetryDelay);
@@ -194,10 +194,10 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                 .connectTimeout(builder.connectTimeout)
                 .sessionTimeout(builder.sessionTimeout)
                 .build();
-        
+
         if (LOG.isTraceEnabled()) LOG.trace("Created SshTool {} ({})", this, System.identityHashCode(this));
     }
-    
+
     @Override
     public void connect() {
         try {
@@ -231,19 +231,19 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     public boolean isConnected() {
         return sshClientConnection.isConnected() && sshClientConnection.isAuthenticated();
     }
-    
+
     @Override
     public int copyToServer(java.util.Map<String,?> props, byte[] contents, String pathAndFileOnRemoteServer) {
         return copyToServer(props, newInputStreamSupplier(contents), contents.length, pathAndFileOnRemoteServer);
     }
-    
+
     @Override
     public int copyToServer(Map<String,?> props, InputStream contents, String pathAndFileOnRemoteServer) {
         /* sshj needs to:
          *   1) to know the length of the InputStream to copy the file to perform copy; and
          *   2) re-read the input stream on retry if the first attempt fails.
          * For now, write it to a file, unless caller supplies a KnownSizeInputStream
-         * 
+         *
          * (We could have a switch where we hold it in memory if less than some max size,
          * but most the routines should supply a string or byte array or similar,
          * so we probably don't come here too often.)
@@ -259,12 +259,12 @@ public class SshjTool extends SshAbstractTool implements SshTool {
             }
         }
     }
-    
+
     @Override
     public int copyToServer(Map<String,?> props, File localFile, String pathAndFileOnRemoteServer) {
         return copyToServer(props, newInputStreamSupplier(localFile), (int)localFile.length(), pathAndFileOnRemoteServer);
     }
-    
+
     private int copyToServer(Map<String,?> props, Supplier<InputStream> contentsSupplier, long length, String pathAndFileOnRemoteServer) {
         acquire(new PutFileAction(props, pathAndFileOnRemoteServer, contentsSupplier, length));
         return 0; // TODO Can we assume put will have thrown exception if failed? Rather than exit code != 0?
@@ -273,13 +273,8 @@ public class SshjTool extends SshAbstractTool implements SshTool {
 
     @Override
     public int copyFromServer(Map<String,?> props, String pathAndFileOnRemoteServer, File localFile) {
-        InputStream contents = acquire(new GetFileAction(pathAndFileOnRemoteServer));
-        try {
-            FileUtil.copyTo(contents, localFile);
-            return 0; // TODO Can we assume put will have thrown exception if failed? Rather than exit code != 0?
-        } finally {
-            Streams.closeQuietly(contents);
-        }
+        LocalDestFile localDestFile = acquire(new GetFileAction(pathAndFileOnRemoteServer));
+        return 0;
     }
 
     /**
@@ -304,11 +299,11 @@ public class SshjTool extends SshAbstractTool implements SshTool {
      *       e.g. by putting every second command as "echo <uid>", and waiting for the stdout.
      *       This gets fiddly...
      * </ul>
-     * 
+     *
      * So on balance, the script-based approach seems most reliable, even if there is an overhead
      * of separate message(s) for copying the file!
-     * 
-     * Another consideration is long-running scripts. On some clouds when executing a script that takes 
+     *
+     * Another consideration is long-running scripts. On some clouds when executing a script that takes
      * several minutes, we have seen it fail with -1 (e.g. 1 in 20 times). This suggests the ssh connection
      * is being dropped. To avoid this problem, we can execute the script asynchronously, writing to files
      * the stdout/stderr/pid/exitStatus. We then periodically poll to retrieve the contents of these files.
@@ -337,17 +332,17 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     /**
      * Executes the script in the background (`nohup ... &`), and then executes other ssh commands to poll for the
      * stdout, stderr and exit code of that original process (which will each have been written to separate files).
-     * 
+     *
      * The polling is a "long poll". That is, it executes a long-running ssh command to retrieve the stdout, etc.
      * If that long-poll command fails, then we just execute another one to pick up from where it left off.
      * This means we do not need to execute many ssh commands (which are expensive), but can still return promptly
      * when the command completes.
-     * 
+     *
      * Much of this was motivated by https://issues.apache.org/jira/browse/BROOKLYN-106, which is no longer
      * an issue. The retries (e.g. in the upload-script) are arguably overkill given that {@link #acquire(SshAction)}
      * will already retry. However, leaving this in place as it could prove useful when working with flakey
      * networks in the future.
-     * 
+     *
      * TODO There are (probably) issues with this method when using {@link ShellTool#PROP_RUN_AS_ROOT}.
      * I (Aled) saw the .pid file having an owner of root:root, and a failure message in stderr of:
      *   -bash: line 3: /tmp/brooklyn-20150113-161203056-XMEo-move_install_dir_from_user_to_.pid: Permission denied
@@ -362,12 +357,12 @@ public class SshjTool extends SshAbstractTool implements SshTool {
             private int stdoutCount = 0;
             private int stderrCount = 0;
             private Stopwatch timer;
-            
+
             public int run() {
                 timer = Stopwatch.createStarted();
                 final String scriptContents = toScript(props, commands, env);
                 if (LOG.isTraceEnabled()) LOG.trace("Running shell command at {} as async script: {}", host, scriptContents);
-                
+
                 // Upload script; try repeatedly because have seen timeout intermittently on vcloud-director (BROOKLYN-106 related).
                 boolean uploadSuccess = Repeater.create("async script upload on "+SshjTool.this.toString()+" (for "+getSummary()+")")
                         .backoffTo(maxDelayBetweenPolls)
@@ -389,14 +384,14 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                                 return true;
                             }})
                         .run();
-                
+
                 if (!uploadSuccess) {
                     // Unexpected! Should have either returned true or have rethrown the exception; should never get false.
                     String msg = "Unexpected state: repeated failure for async script upload on "+SshjTool.this.toString()+" ("+getSummary()+")";
                     LOG.warn(msg+"; rethrowing");
                     throw new IllegalStateException(msg);
                 }
-                
+
                 // Execute script asynchronously
                 int execResult = asInt(acquire(new ShellAction(buildRunScriptCommand(), out, err, execTimeout)), -1);
                 if (execResult != 0) return execResult;
@@ -417,16 +412,16 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                                     return exitstatus != null;
                                 }})
                             .run();
-                    
+
                     if (!success) {
                         // Timed out
                         String msg = "Timeout for async script to complete on "+SshjTool.this.toString()+" ("+getSummary()+")";
                         LOG.warn(msg+"; rethrowing");
                         throw new TimeoutException(msg);
                     }
-                    
+
                     return result.get();
-                    
+
                 } catch (Exception e) {
                     LOG.debug("Problem polling for async script on "+SshjTool.this.toString()+" (for "+getSummary()+"); rethrowing after deleting temporary files", e);
                     throw Exceptions.propagate(e);
@@ -445,13 +440,13 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                     }
                 }
             }
-            
+
             Integer longPoll() throws IOException {
                 // Long-polling to get stdout, stderr + exit status of async task.
                 // If our long-poll disconnects, we will just re-execute.
-                // We wrap the stdout/stderr so that we can get the size count. 
+                // We wrap the stdout/stderr so that we can get the size count.
                 // If we disconnect, we will pick up from that char of the stream.
-                // TODO Additional stdout/stderr written by buildLongPollCommand() could interfere, 
+                // TODO Additional stdout/stderr written by buildLongPollCommand() could interfere,
                 //      causing us to miss some characters.
                 Duration nextPollTimeout = Duration.min(pollTimeout, Duration.millis(execTimeout.toMilliseconds()-timer.elapsed(TimeUnit.MILLISECONDS)));
                 CountingOutputStream countingOut = (out == null) ? null : new CountingOutputStream(out);
@@ -459,7 +454,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                 List<String> pollCommand = buildLongPollCommand(stdoutCount, stderrCount, nextPollTimeout);
                 Duration sshJoinTimeout = nextPollTimeout.add(Duration.TEN_SECONDS);
                 ShellAction action = new ShellAction(pollCommand, countingOut, countingErr, sshJoinTimeout);
-                
+
                 int longPollResult;
                 try {
                     longPollResult = asInt(acquire(action, 3, nextPollTimeout), -1);
@@ -469,11 +464,11 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                 }
                 stdoutCount += (countingOut == null) ? 0 : countingOut.getCount();
                 stderrCount += (countingErr == null) ? 0 : countingErr.getCount();
-                
+
                 if (longPollResult == 0) {
                     if (LOG.isDebugEnabled()) LOG.debug("Long-poll succeeded (exit status 0) on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return longPollResult; // success
-                    
+
                 } else if (longPollResult == -1) {
                     // probably a connection failure; try again
                     if (LOG.isDebugEnabled()) LOG.debug("Long-poll received exit status -1; will retry on "+SshjTool.this.toString()+" (for "+getSummary()+")");
@@ -495,7 +490,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         return result;
                     }
                 }
-                    
+
                 consecutiveSshFailures++;
                 if (consecutiveSshFailures > maxConsecutiveSshFailures) {
                     LOG.warn("Aborting on "+consecutiveSshFailures+" consecutive ssh connection errors (return -1) when polling for async script to complete on "+SshjTool.this.toString()+" ("+getSummary()+")");
@@ -505,14 +500,14 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                     return null;
                 }
             }
-            
+
             Integer retrieveStatusCommand() throws IOException {
                 // want to double-check whether this is the exit-code from the async process, or
                 // some unexpected failure in our long-poll command.
                 ByteArrayOutputStream statusOut = new ByteArrayOutputStream();
                 ByteArrayOutputStream statusErr = new ByteArrayOutputStream();
                 int statusResult = asInt(acquire(new ShellAction(buildRetrieveStatusCommand(), statusOut, statusErr, execTimeout)), -1);
-                
+
                 if (statusResult == 0) {
                     // The status we retrieved really is valid; return it.
                     // TODO How to ensure no additional output in stdout/stderr when parsing below?
@@ -531,7 +526,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                     // probably a connection failure; try again with long-poll
                     if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieving status directly received exit status -1; will retry on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return null;
-                    
+
                 } else {
                     if (out != null) {
                         out.write(toUTF8ByteArray("retrieving status failed with exit code "+statusResult+" (stdout follow)"));
@@ -541,28 +536,28 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         err.write(toUTF8ByteArray("retrieving status failed with exit code "+statusResult+" (stderr follow)"));
                         err.write(statusErr.toByteArray());
                     }
-                    
+
                     if (LOG.isDebugEnabled()) LOG.debug("Long-poll retrieving status failed; returning "+statusResult+" on "+SshjTool.this.toString()+" (for "+getSummary()+")");
                     return statusResult;
                 }
             }
         }.run();
     }
-    
+
     public int execShellDirect(Map<String,?> props, List<String> commands, Map<String,?> env) {
         OutputStream out = getOptionalVal(props, PROP_OUT_STREAM);
         OutputStream err = getOptionalVal(props, PROP_ERR_STREAM);
         Duration execTimeout = getOptionalVal(props, PROP_EXEC_TIMEOUT);
-        
+
         List<String> cmdSequence = toCommandSequence(commands, env);
         List<String> allcmds = ImmutableList.<String>builder()
                 .add(getOptionalVal(props, PROP_DIRECT_HEADER))
                 .addAll(cmdSequence)
                 .add("exit $?")
                 .build();
-        
+
         if (LOG.isTraceEnabled()) LOG.trace("Running shell command at {}: {}", host, allcmds);
-        
+
         Integer result = acquire(new ShellAction(allcmds, out, err, execTimeout));
         if (LOG.isTraceEnabled()) LOG.trace("Running shell command at {} completed: return status {}", host, result);
         return asInt(result, -1);
@@ -573,7 +568,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         if (Boolean.FALSE.equals(props.get("blocks"))) {
             throw new IllegalArgumentException("Cannot exec non-blocking: command="+commands);
         }
-        
+
         // If async is set, then do it as execScript
         Boolean execAsync = getOptionalVal(props, PROP_EXEC_ASYNC);
         if (Boolean.TRUE.equals(execAsync) && BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_SSH_ASYNC_EXEC)) {
@@ -591,14 +586,14 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         if (Boolean.TRUE.equals(getOptionalVal(props, PROP_RUN_AS_ROOT))) {
             LOG.warn("Cannot run as root when executing as command; run as a script instead (will run as normal user): "+singlecmd);
         }
-        
+
         if (LOG.isTraceEnabled()) LOG.trace("Running command at {}: {}", host, singlecmd);
-        
+
         Command result = acquire(new ExecAction(singlecmd, out, err, execTimeout));
         if (LOG.isTraceEnabled()) LOG.trace("Running command at {} completed: exit code {}", host, result.getExitStatus());
         // can be null if no exit status is received (observed on kill `ps aux | grep thing-to-grep-for | awk {print $2}`
         if (result.getExitStatus()==null) LOG.warn("Null exit status running at {}: {}", host, singlecmd);
-        
+
         return asInt(result.getExitStatus(), -1);
     }
 
@@ -615,16 +610,16 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     protected <T, C extends SshAction<T>> T acquire(C action) {
         return acquire(action, sshTries, sshTriesTimeout == 0 ? Duration.PRACTICALLY_FOREVER : Duration.millis(sshTriesTimeout));
     }
-    
+
     protected <T, C extends SshAction<T>> T acquire(C action, int sshTries, Duration sshTriesTimeout) {
         Stopwatch stopwatch = Stopwatch.createStarted();
-        
+
         for (int i = 0; i < sshTries; i++) {
             try {
                 action.clear();
                 if (LOG.isTraceEnabled()) LOG.trace(">> ({}) acquiring {}", toString(), action);
                 Stopwatch perfStopwatch = Stopwatch.createStarted();
-                
+
                 T returnVal;
                 try {
                     returnVal = action.create();
@@ -633,25 +628,25 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                      * TODO In net.schmizz.sshj.SSHClient.auth(SSHClient.java:204) throws AssertionError
                      * if not connected. This can happen if another thread has called disconnect
                      * concurrently. This is changed in sshj v0.9.0 to instead throw an IllegalStateException.
-                     * 
+                     *
                      * For now, we'll retry. See "TODO" at top of class about synchronization.
                      */
                     throw new IllegalStateException("Problem in "+toString()+" for "+action, e);
                 }
-                
+
                 if (LOG.isTraceEnabled()) LOG.trace("<< ({}) acquired {}", toString(), returnVal);
                 if (LOG.isTraceEnabled()) LOG.trace("SSH Performance: {} {} took {}", new Object[] {
-                        sshClientConnection.getHostAndPort(), 
-                        action.getClass().getSimpleName() != null ? action.getClass().getSimpleName() : action, 
+                        sshClientConnection.getHostAndPort(),
+                        action.getClass().getSimpleName() != null ? action.getClass().getSimpleName() : action,
                         Time.makeTimeStringRounded(perfStopwatch)});
                 return returnVal;
             } catch (Exception e) {
-                // uninformative net.schmizz.sshj.connection.ConnectionException: 
+                // uninformative net.schmizz.sshj.connection.ConnectionException:
                 //    Request failed (reason=UNKNOWN) may mean remote Subsytem is disabled (e.g. for FTP)
                 // if key is missing, get a UserAuth error
                 String errorMessage = String.format("(%s) error acquiring %s", toString(), action);
-                String fullMessage = String.format("%s (attempt %s/%s, in time %s/%s)", 
-                        errorMessage, (i+1), sshTries, Time.makeTimeStringRounded(stopwatch.elapsed(TimeUnit.MILLISECONDS)), 
+                String fullMessage = String.format("%s (attempt %s/%s, in time %s/%s)",
+                        errorMessage, (i+1), sshTries, Time.makeTimeStringRounded(stopwatch.elapsed(TimeUnit.MILLISECONDS)),
                         (sshTriesTimeout.equals(Duration.PRACTICALLY_FOREVER) ? "unlimited" : Time.makeTimeStringRounded(sshTriesTimeout)));
                 try {
                     disconnect();
@@ -700,7 +695,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         }
     };
 
-    private class GetFileAction implements SshAction<InputStream> {
+    private class GetFileAction implements SshAction<LocalDestFile> {
         private final String path;
         private SFTPClient sftp;
 
@@ -715,10 +710,11 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         }
 
         @Override
-        public InputStream create() throws Exception {
+        public LocalDestFile create() throws Exception {
             sftp = acquire(sftpConnection);
-            return new CloseFtpChannelOnCloseInputStream(
-                    sftp.getSFTPEngine().open(path).getInputStream(), sftp);
+            LocalDestFile localDestFile = new FileSystemFile(path);
+            sftp.get(path, localDestFile);
+            return localDestFile;
         }
 
         @Override
@@ -729,7 +725,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
 
     private class PutFileAction implements SshAction<Void> {
         // TODO support backup as a property?
-        
+
         private SFTPClient sftp;
         private final String path;
         private final int permissionsMask;
@@ -738,7 +734,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         private final int uid;
         private final Supplier<InputStream> contentsSupplier;
         private final Integer length;
-        
+
         PutFileAction(Map<String,?> props, String path, Supplier<InputStream> contentsSupplier, long length) {
             String permissions = getOptionalVal(props, PROP_PERMISSIONS);
             long lastModificationDateVal = getOptionalVal(props, PROP_LAST_MODIFICATION_DATE);
@@ -817,7 +813,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
             }
         };
     }
-    
+
     protected SshAction<Session> newSessionAction() {
 
         return new SshAction<Session>() {
@@ -853,18 +849,18 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         private final OutputStream out;
         private final OutputStream err;
         private final Duration timeout;
-        
+
         private Session session;
         private Shell shell;
         private StreamGobbler outgobbler;
         private StreamGobbler errgobbler;
-        
+
         ExecAction(String command, OutputStream out, OutputStream err, Duration timeout) {
             this.command = checkNotNull(command, "command");
             this.out = out;
             this.err = err;
-            Duration sessionTimeout = (sshClientConnection.getSessionTimeout() == 0) 
-                    ? Duration.PRACTICALLY_FOREVER 
+            Duration sessionTimeout = (sshClientConnection.getSessionTimeout() == 0)
+                    ? Duration.PRACTICALLY_FOREVER
                     : Duration.millis(sshClientConnection.getSessionTimeout());
             this.timeout = (timeout == null) ? sessionTimeout : Duration.min(timeout, sessionTimeout);
         }
@@ -883,9 +879,9 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         public Command create() throws Exception {
             try {
                 session = acquire(newSessionAction());
-                
+
                 Command output = session.exec(checkNotNull(command, "command"));
-                
+
                 if (out != null) {
                     outgobbler = new StreamGobbler(output.getInputStream(), out, (Logger)null);
                     outgobbler.start();
@@ -897,7 +893,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                 try {
                     output.join((int)Math.min(timeout.toMilliseconds(), Integer.MAX_VALUE), TimeUnit.MILLISECONDS);
                     return output;
-                    
+
                 } finally {
                     // wait for all stdout/stderr to have been re-directed
                     try {
@@ -910,7 +906,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         Thread.currentThread().interrupt();
                     }
                 }
-                
+
             } finally {
                 clear();
             }
@@ -929,7 +925,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         final OutputStream out;
         @VisibleForTesting
         final OutputStream err;
-        
+
         private Session session;
         private Shell shell;
         private StreamGobbler outgobbler;
@@ -940,8 +936,8 @@ public class SshjTool extends SshAbstractTool implements SshTool {
             this.commands = checkNotNull(commands, "commands");
             this.out = out;
             this.err = err;
-            Duration sessionTimeout = (sshClientConnection.getSessionTimeout() == 0) 
-                    ? Duration.PRACTICALLY_FOREVER 
+            Duration sessionTimeout = (sshClientConnection.getSessionTimeout() == 0)
+                    ? Duration.PRACTICALLY_FOREVER
                     : Duration.millis(sshClientConnection.getSessionTimeout());
             this.timeout = (timeout == null) ? sessionTimeout : Duration.min(timeout, sessionTimeout);
         }
@@ -960,9 +956,9 @@ public class SshjTool extends SshAbstractTool implements SshTool {
         public Integer create() throws Exception {
             try {
                 session = acquire(newSessionAction());
-                
+
                 shell = session.startShell();
-                
+
                 if (out != null) {
                     InputStream outstream = shell.getInputStream();
                     outgobbler = new StreamGobbler(outstream, out, (Logger)null);
@@ -973,7 +969,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                     errgobbler = new StreamGobbler(errstream, err, (Logger)null);
                     errgobbler.start();
                 }
-                
+
                 OutputStream output = shell.getOutputStream();
 
                 for (CharSequence cmd : commands) {
@@ -990,12 +986,8 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         }
                     }
                 }
-                // workaround attempt for SSHJ deadlock - https://github.com/shikhar/sshj/issues/105
-                synchronized (shell.getOutputStream()) {
-                    shell.sendEOF();
-                }
                 closeWhispering(output, this);
-                
+
                 boolean timedOut = false;
                 try {
                     long timeoutMillis = Math.min(timeout.toMilliseconds(), Integer.MAX_VALUE);
@@ -1006,8 +998,8 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                             // shell closed, and exit status returned
                             break;
                         boolean endBecauseReturned =
-                            // if either condition is satisfied, then wait 1s in hopes the other does, then return
-                            (!shell.isOpen() || ((SessionChannel)session).getExitStatus()!=null);
+                                // if either condition is satisfied, then wait 1s in hopes the other does, then return
+                                (!shell.isOpen() || ((SessionChannel)session).getExitStatus()!=null);
                         try {
                             shell.join(1000, TimeUnit.MILLISECONDS);
                         } catch (ConnectionException e) {
@@ -1016,7 +1008,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         if (endBecauseReturned) {
                             // shell is still open, ie some process is running
                             // but we have a result code, so main shell is finished
-                            // we waited one second extra to allow any background process 
+                            // we waited one second extra to allow any background process
                             // which is nohupped to really be in the background (#162)
                             // now let's bail out
                             break;
@@ -1051,7 +1043,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
                         Thread.currentThread().interrupt();
                     }
                 }
-                
+
             } finally {
                 clear();
             }
@@ -1066,7 +1058,7 @@ public class SshjTool extends SshAbstractTool implements SshTool {
     private byte[] toUTF8ByteArray(String string) {
         return org.bouncycastle.util.Strings.toUTF8ByteArray(string);
     }
-    
+
     private Supplier<InputStream> newInputStreamSupplier(final byte[] contents) {
         return new Supplier<InputStream>() {
             @Override public InputStream get() {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c3de6287/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index fea6e19..3cf38b2 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -430,7 +430,7 @@
                 <version>${commons-compress.version}</version>
             </dependency>
             <dependency>
-                <groupId>net.schmizz</groupId>
+                <groupId>com.hierynomus</groupId>
                 <artifactId>sshj</artifactId>
                 <version>${sshj.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c3de6287/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 9ca5234..7e7e0d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -120,7 +120,7 @@
         <ivy.version>2.2.0</ivy.version>
         <mx4j.version>3.0.1</mx4j.version>
         <bouncycastle.version>1.49</bouncycastle.version>
-        <sshj.version>0.8.1</sshj.version>
+        <sshj.version>0.12.0</sshj.version>
         <felix.framework.version>5.4.0</felix.framework.version>
         <reflections.version>0.9.9-RC1</reflections.version>
         <jetty.version>9.2.13.v20150730</jetty.version>


[02/13] brooklyn-server git commit: fix unit tests

Posted by al...@apache.org.
fix unit tests


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

Branch: refs/heads/master
Commit: 9e29d226705aa7ae5a8eaf27e46cb767f1217f1f
Parents: c3de628
Author: Andrea Turli <an...@gmail.com>
Authored: Sun Nov 6 22:41:58 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Dec 6 15:29:57 2016 +0100

----------------------------------------------------------------------
 .../core/location/LocationConfigUtils.java      |  5 +-
 .../util/core/crypto/FluentKeySigner.java       | 11 +++--
 .../brooklyn/util/core/crypto/SecureKeys.java   | 51 ++++----------------
 3 files changed, 20 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9e29d226/core/src/main/java/org/apache/brooklyn/core/location/LocationConfigUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/LocationConfigUtils.java b/core/src/main/java/org/apache/brooklyn/core/location/LocationConfigUtils.java
index 17705f9..2ed7e1a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/LocationConfigUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/LocationConfigUtils.java
@@ -20,7 +20,6 @@ package org.apache.brooklyn.core.location;
 
 import static org.apache.brooklyn.util.JavaGroovyEquivalents.groovyTruth;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.security.KeyPair;
 import java.security.PublicKey;
@@ -36,8 +35,6 @@ import org.apache.brooklyn.core.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.location.cloud.CloudLocationConfig;
 import org.apache.brooklyn.core.location.internal.LocationInternal;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.ResourceUtils;
@@ -49,6 +46,8 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.text.StringFunctions;
 import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Objects;

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9e29d226/core/src/main/java/org/apache/brooklyn/util/core/crypto/FluentKeySigner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/crypto/FluentKeySigner.java b/core/src/main/java/org/apache/brooklyn/util/core/crypto/FluentKeySigner.java
index ecc7c36..a2aaabd 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/crypto/FluentKeySigner.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/crypto/FluentKeySigner.java
@@ -32,7 +32,9 @@ import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;
 import org.bouncycastle.asn1.x509.X509Extension;
+import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils;
 import org.bouncycastle.jce.X509Principal;
+import org.bouncycastle.x509.X509V3CertificateGenerator;
 
 /** A fluent API which simplifies generating certificates (signed keys) */
 /* NB - re deprecation - we use deprecated X509V3CertificateGenerator still
@@ -146,8 +148,10 @@ public class FluentKeySigner {
     // TODO see note re deprecation at start of file
     @SuppressWarnings("deprecation")
     public X509Certificate newCertificateFor(X500Principal subject, PublicKey keyToCertify) {
+        
         try {
-            org.bouncycastle.x509.X509V3CertificateGenerator v3CertGen = new org.bouncycastle.x509.X509V3CertificateGenerator();
+            
+            X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();
 
             v3CertGen.setSerialNumber(
                     serialNumber != null ? serialNumber :
@@ -159,10 +163,11 @@ public class FluentKeySigner {
             v3CertGen.setSignatureAlgorithm(signatureAlgorithm);   
 
             v3CertGen.setSubjectDN(subject);  
-            v3CertGen.setPublicKey(keyToCertify);  
+            v3CertGen.setPublicKey(keyToCertify);
 
+            JcaX509ExtensionUtils jcaX509ExtensionUtils = new JcaX509ExtensionUtils();
             v3CertGen.addExtension(X509Extension.subjectKeyIdentifier, false,
-                    new org.bouncycastle.x509.extension.SubjectKeyIdentifierStructure(keyToCertify));
+                    jcaX509ExtensionUtils.createSubjectKeyIdentifier(keyToCertify));
 
             if (authorityKeyIdentifier!=null)
                 v3CertGen.addExtension(X509Extension.authorityKeyIdentifier, false,

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/9e29d226/core/src/main/java/org/apache/brooklyn/util/core/crypto/SecureKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/crypto/SecureKeys.java b/core/src/main/java/org/apache/brooklyn/util/core/crypto/SecureKeys.java
index a36b00a..5a1e54a 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/crypto/SecureKeys.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/crypto/SecureKeys.java
@@ -41,7 +41,6 @@ import org.bouncycastle.openssl.PEMEncryptedKeyPair;
 import org.bouncycastle.openssl.PEMKeyPair;
 import org.bouncycastle.openssl.PEMParser;
 import org.bouncycastle.openssl.PEMWriter;
-import org.bouncycastle.openssl.PasswordFinder;
 import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
 import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
 import org.slf4j.Logger;
@@ -89,67 +88,37 @@ public class SecureKeys extends SecureKeysWithoutBouncyCastle {
     public static KeyPair readPem(byte[] key, final String passphrase) {
         // TODO cache is only for fallback "reader" strategy (2015-01); delete when Parser confirmed working
         InputStream input = new ByteArrayInputStream(key);
-
+        KeyPair keyPair;
         try {
             PEMParser pemParser = new PEMParser(new InputStreamReader(input));
-
             Object object = pemParser.readObject();
             pemParser.close();
-
+            if (Security.getProvider("BC") == null) {
+                Security.addProvider(new BouncyCastleProvider());
+            }
             JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
-            KeyPair kp = null;
             if (object==null) {
                 throw new IllegalStateException("PEM parsing failed: missing or invalid data");
             } else if (object instanceof PEMEncryptedKeyPair) {
                 if (passphrase==null) throw new PassphraseProblem("passphrase required");
                 try {
                     PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(passphrase.toCharArray());
-                    kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
+                    keyPair = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
                 } catch (Exception e) {
                     Exceptions.propagateIfFatal(e);
                     throw new PassphraseProblem("wrong passphrase", e);
                 }
             } else  if (object instanceof PEMKeyPair) {
-                kp = converter.getKeyPair((PEMKeyPair) object);
+                keyPair = converter.getKeyPair((PEMKeyPair) object);
             } else if (object instanceof PrivateKeyInfo) {
                 PrivateKey privKey = converter.getPrivateKey((PrivateKeyInfo) object);
-                kp = new KeyPair(null, privKey);
+                keyPair = new KeyPair(null, privKey);
             } else {
                 throw new IllegalStateException("PEM parser support missing for: "+object);
             }
-
-            return kp;
-
-        } catch (Exception e) {
-            Exceptions.propagateIfFatal(e);
-
-            // older code relied on PEMReader, now deprecated
-            // replaced with above based on http://stackoverflow.com/questions/14919048/bouncy-castle-pemreader-pemparser
-            // passes the same tests (Jan 2015) but leaving the old code as a fallback for the time being 
-
-            input = new ByteArrayInputStream(key);
-            try {
-                Security.addProvider(new BouncyCastleProvider());
-                @SuppressWarnings("deprecation")
-                org.bouncycastle.openssl.PEMReader pr = new org.bouncycastle.openssl.PEMReader(new InputStreamReader(input), new PasswordFinder() {
-                    public char[] getPassword() {
-                        return passphrase!=null ? passphrase.toCharArray() : new char[0];
-                    }
-                });
-                @SuppressWarnings("deprecation")
-                KeyPair result = (KeyPair) pr.readObject();
-                pr.close();
-                if (result==null)
-                    throw Exceptions.propagate(e);
-                
-                log.warn("PEMParser failed when deprecated PEMReader succeeded, with "+result+"; had: "+e);
-
-                return result;
-
-            } catch (Exception e2) {
-                Exceptions.propagateIfFatal(e2);
-                throw Exceptions.propagate(e);
-            }
+            return keyPair;
+        } catch (IOException e) {
+            throw new RuntimeException("Invalid key", e);
         }
     }