You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2015/01/14 16:49:22 UTC
[2/3] jclouds-labs git commit: support for docker 1.3.2
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/main/java/org/jclouds/docker/suppliers/KeyStoreSupplier.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/suppliers/KeyStoreSupplier.java b/docker/src/main/java/org/jclouds/docker/suppliers/KeyStoreSupplier.java
deleted file mode 100644
index e8643cd..0000000
--- a/docker/src/main/java/org/jclouds/docker/suppliers/KeyStoreSupplier.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.docker.suppliers;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Throwables.propagate;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-import java.util.Collection;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.crypto.Crypto;
-import org.jclouds.crypto.Pems;
-import org.jclouds.domain.Credentials;
-import org.jclouds.location.Provider;
-import org.jclouds.rest.AuthorizationException;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Supplier;
-import com.google.common.io.ByteSource;
-
-@Singleton
-public class KeyStoreSupplier implements Supplier<KeyStore> {
- private final Crypto crypto;
- private final Supplier<Credentials> creds;
-
- @Inject
- KeyStoreSupplier(Crypto crypto, @Provider Supplier<Credentials> creds) {
- this.crypto = crypto;
- this.creds = creds;
- }
-
- @Override
- public KeyStore get() {
- Credentials currentCreds = checkNotNull(creds.get(), "credential supplier returned null");
- String cert = checkNotNull(currentCreds.identity, "credential supplier returned null identity (should be cert)");
- String keyStorePassword = checkNotNull(currentCreds.credential,
- "credential supplier returned null credential (should be keyStorePassword)");
- try {
- KeyStore keyStore = KeyStore.getInstance("PKCS12");
-
- File certFile = new File(checkNotNull(cert));
- if (certFile.isFile()) { // cert is path to pkcs12 file
- FileInputStream stream = new FileInputStream(certFile);
- try {
- keyStore.load(stream, keyStorePassword.toCharArray());
- } finally {
- stream.close();
- }
- } else { // cert is PEM encoded, containing private key and certs
-
- // split in private key and certs
- int privateKeyBeginIdx = cert.indexOf("-----BEGIN PRIVATE KEY");
- int privateKeyEndIdx = cert.indexOf("-----END PRIVATE KEY");
- if (privateKeyBeginIdx != -1) {
- String pemPrivateKey = cert.substring(privateKeyBeginIdx, privateKeyEndIdx + 26);
-
- StringBuilder pemCerts = new StringBuilder();
- int certsBeginIdx = 0;
-
- do {
- certsBeginIdx = cert.indexOf("-----BEGIN CERTIFICATE", certsBeginIdx);
-
- if (certsBeginIdx >= 0) {
- int certsEndIdx = cert.indexOf("-----END CERTIFICATE", certsBeginIdx) + 26;
- pemCerts.append(cert.substring(certsBeginIdx, certsEndIdx));
- certsBeginIdx = certsEndIdx;
- }
- } while (certsBeginIdx != -1);
-
- // parse private key
- KeySpec keySpec = Pems.privateKeySpec(ByteSource.wrap(pemPrivateKey.getBytes(Charsets.UTF_8)));
- PrivateKey privateKey = crypto.rsaKeyFactory().generatePrivate(keySpec);
-
- // populate keystore with private key and certs
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- @SuppressWarnings("unchecked")
- Collection<Certificate> certs = (Collection<Certificate>) cf.generateCertificates(new ByteArrayInputStream(
- pemCerts.toString().getBytes(Charsets.UTF_8)));
- keyStore.load(null);
- keyStore.setKeyEntry("dummy", privateKey, keyStorePassword.toCharArray(),
- certs.toArray(new Certificate[0]));
- } else {
- throw new AuthorizationException();
- }
- }
- return keyStore;
- } catch (NoSuchAlgorithmException e) {
- throw propagate(e);
- } catch (KeyStoreException e) {
- throw propagate(e);
- } catch (CertificateException e) {
- throw propagate(e);
- } catch (FileNotFoundException e) {
- throw propagate(e);
- } catch (IOException e) {
- throw propagate(e);
- } catch (InvalidKeySpecException e) {
- throw propagate(e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java b/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
index 59695d3..7aeee18 100644
--- a/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
+++ b/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
@@ -18,60 +18,146 @@ package org.jclouds.docker.suppliers;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.Socket;
import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
+import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
+import java.security.Principal;
+import java.security.PrivateKey;
import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
+import java.security.Security;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
import javax.inject.Inject;
import javax.inject.Singleton;
-import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509ExtendedKeyManager;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.openssl.PEMKeyPair;
+import org.bouncycastle.openssl.PEMParser;
+import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.jclouds.domain.Credentials;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.config.SSLModule.TrustAllCerts;
import org.jclouds.location.Provider;
+import com.google.common.base.Charsets;
import com.google.common.base.Supplier;
+import com.google.common.io.Files;
@Singleton
public class SSLContextWithKeysSupplier implements Supplier<SSLContext> {
- private final Supplier<KeyStore> keyStore;
private final TrustManager[] trustManager;
private final Supplier<Credentials> creds;
@Inject
- SSLContextWithKeysSupplier(Supplier<KeyStore> keyStore, @Provider Supplier<Credentials> creds, HttpUtils utils,
- TrustAllCerts trustAllCerts) {
- this.keyStore = keyStore;
- this.trustManager = utils.trustAllCerts() ? new TrustManager[] { trustAllCerts } : null;
+ SSLContextWithKeysSupplier(@Provider Supplier<Credentials> creds, HttpUtils utils, TrustAllCerts trustAllCerts) {
+ this.trustManager = utils.trustAllCerts() ? new TrustManager[]{trustAllCerts} : null;
this.creds = creds;
}
@Override
public SSLContext get() {
Credentials currentCreds = checkNotNull(creds.get(), "credential supplier returned null");
- String keyStorePassword = checkNotNull(currentCreds.credential,
- "credential supplier returned null credential (should be keyStorePassword)");
- KeyManagerFactory kmf;
try {
- kmf = KeyManagerFactory.getInstance("SunX509");
- kmf.init(keyStore.get(), keyStorePassword.toCharArray());
- SSLContext sc = SSLContext.getInstance("TLS");
- sc.init(kmf.getKeyManagers(), trustManager, new SecureRandom());
- return sc;
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ X509Certificate certificate = getCertificate(loadFile(currentCreds.identity));
+ PrivateKey privateKey = getKey(loadFile(currentCreds.credential));
+ sslContext.init(new KeyManager[]{new InMemoryKeyManager(certificate, privateKey)}, trustManager, new SecureRandom());
+ return sslContext;
} catch (NoSuchAlgorithmException e) {
throw propagate(e);
- } catch (UnrecoverableKeyException e) {
+ } catch (KeyManagementException e) {
throw propagate(e);
- } catch (KeyStoreException e) {
+ } catch (CertificateException e) {
throw propagate(e);
- } catch (KeyManagementException e) {
+ } catch (IOException e) {
throw propagate(e);
}
}
+
+ private static X509Certificate getCertificate(String certificate) {
+ try {
+ return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(
+ new ByteArrayInputStream(certificate.getBytes(Charsets.UTF_8)));
+ } catch (CertificateException ex) {
+ throw new RuntimeException("Invalid certificate", ex);
+ }
+ }
+
+ private static PrivateKey getKey(String privateKey) {
+
+ try {
+ PEMParser pemParser = new PEMParser(new StringReader(privateKey));
+ Object object = pemParser.readObject();
+ if (Security.getProvider("BC") == null) {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+ JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
+ KeyPair keyPair = converter.getKeyPair((PEMKeyPair) object);
+ return keyPair.getPrivate();
+ } catch (IOException ex) {
+ throw new RuntimeException("Invalid private key", ex);
+ }
+ }
+
+ private static String loadFile(final String filePath) throws IOException {
+ return Files.toString(new File(filePath), Charsets.UTF_8);
+ }
+
+ private static class InMemoryKeyManager extends X509ExtendedKeyManager {
+ private static final String DEFAULT_ALIAS = "docker";
+
+ private final X509Certificate certificate;
+
+ private final PrivateKey privateKey;
+
+ public InMemoryKeyManager(final X509Certificate certificate, final PrivateKey privateKey)
+ throws IOException, CertificateException {
+ this.certificate = certificate;
+ this.privateKey = privateKey;
+ }
+
+ @Override
+ public String chooseClientAlias(final String[] keyType, final Principal[] issuers,
+ final Socket socket) {
+ return DEFAULT_ALIAS;
+ }
+
+ @Override
+ public String chooseServerAlias(final String keyType, final Principal[] issuers,
+ final Socket socket) {
+ return DEFAULT_ALIAS;
+ }
+
+ @Override
+ public X509Certificate[] getCertificateChain(final String alias) {
+ return new X509Certificate[]{certificate};
+ }
+
+ @Override
+ public String[] getClientAliases(final String keyType, final Principal[] issuers) {
+ return new String[]{DEFAULT_ALIAS};
+ }
+
+ @Override
+ public PrivateKey getPrivateKey(final String alias) {
+ return privateKey;
+ }
+
+ @Override
+ public String[] getServerAliases(final String keyType, final Principal[] issuers) {
+ return new String[]{DEFAULT_ALIAS};
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java b/docker/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
index 9aca266..447c9e4 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java
@@ -29,7 +29,6 @@ import org.jboss.shrinkwrap.api.GenericArchive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
import org.jboss.shrinkwrap.api.exporter.TarExporter;
-import org.jclouds.Constants;
import org.jclouds.apis.BaseApiLiveTest;
import org.jclouds.compute.config.ComputeServiceProperties;
import org.jclouds.docker.DockerApi;
@@ -57,8 +56,7 @@ public class BaseDockerApiLiveTest extends BaseApiLiveTest<DockerApi> {
@Override
protected Properties setupProperties() {
Properties overrides = super.setupProperties();
- overrides.setProperty(Constants.PROPERTY_MAX_RETRIES, "15");
- overrides.setProperty("jclouds.ssh.retry-auth", "true");
+ overrides.setProperty("jclouds.trust-all-certs", "false");
overrides.setProperty(ComputeServiceProperties.IMAGE_LOGIN_USER, "root:password");
return overrides;
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
index c3da551..9aae9bf 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
@@ -116,10 +116,4 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
return ImmutableSet.<Module>of(getLoggingModule(), new SshjSshClientModule());
}
- @Override
- protected Properties setupProperties() {
- Properties properties = super.setupProperties();
- properties.setProperty("jclouds.ssh.max-retries", "10");
- return properties;
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
index 94ee205..850863c 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
@@ -34,6 +34,7 @@ import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.docker.domain.Config;
import org.jclouds.docker.domain.Container;
import org.jclouds.docker.domain.HostConfig;
@@ -97,12 +98,13 @@ public class ContainerToNodeMetadataTest {
0, // exitCode
"2014-03-24T20:28:37.537659054Z", // startedAt
"0001-01-01T00:00:00Z", // finishedAt
- false // ghost
+ false, // paused
+ false // restarting
);
container = Container.builder()
.id("6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9")
.name("/hopeful_mclean")
- .created("2014-03-22T07:16:45.784120972Z")
+ .created(new SimpleDateFormatDateService().iso8601DateParse("2014-03-22T07:16:45.784120972Z"))
.path("/usr/sbin/sshd")
.args(Arrays.asList("-D"))
.config(containerConfig)
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
index 76d82ee..db02e3d 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
@@ -21,8 +21,11 @@ import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.testng.Assert.assertEquals;
+import java.util.Date;
+
import org.easymock.EasyMock;
import org.jclouds.compute.domain.Image;
+import org.jclouds.docker.domain.Config;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -41,16 +44,24 @@ public class ImageToImageTest {
@BeforeMethod
public void setup() {
image = org.jclouds.docker.domain.Image.create(
- "id", // id
- "parent", // parent
- "created", // created
- null, // container
- null, // dockerVersion
- "x86_64", // architecture
- null, // os
- 0l, // size
- 0l, // virtualSize
- ImmutableList.of("repoTag1:version") // repoTags
+ "id", // id
+ "author",
+ "comment",
+ Config.builder()
+ .image("imageId")
+ .build(),
+ Config.builder()
+ .image("imageId")
+ .build(),
+ "parent", // parent
+ new Date(), // created
+ "containerId", // container
+ "1.3.1", // dockerVersion
+ "x86_64", // architecture
+ "os", // os
+ 0l, // size
+ 0l, // virtualSize
+ ImmutableList.of("repoTag1:version") // repoTags
);
function = new ImageToImage();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java b/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
index 44edc57..684f5de 100644
--- a/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
@@ -16,8 +16,11 @@
*/
package org.jclouds.docker.features;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.io.IOException;
@@ -29,8 +32,11 @@ import org.jclouds.docker.domain.Config;
import org.jclouds.docker.domain.Container;
import org.jclouds.docker.domain.ContainerSummary;
import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.Resource;
+import org.jclouds.docker.options.AttachOptions;
import org.jclouds.docker.options.CreateImageOptions;
import org.jclouds.docker.options.ListContainerOptions;
+import org.jclouds.docker.options.RemoveContainerOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -57,6 +63,11 @@ public class ContainerApiLiveTest extends BaseDockerApiLiveTest {
@AfterClass
protected void tearDown() {
+ if (container != null) {
+ if (api.getContainerApi().inspectContainer(container.id()) != null) {
+ api.getContainerApi().removeContainer(container.id(), RemoveContainerOptions.Builder.force(true));
+ }
+ }
if (image != null) {
api.getImageApi().deleteImage(BUSYBOX_IMAGE_TAG);
}
@@ -64,7 +75,7 @@ public class ContainerApiLiveTest extends BaseDockerApiLiveTest {
public void testCreateContainer() throws IOException, InterruptedException {
Config containerConfig = Config.builder().image(image.id())
- .cmd(ImmutableList.of("/bin/sh", "-c", "while true; do echo hello world; sleep 1; done"))
+ .cmd(ImmutableList.of("/bin/sh", "-c", "touch hello; while true; do echo hello world; sleep 1; done"))
.build();
container = api().createContainer("testCreateContainer", containerConfig);
assertNotNull(container);
@@ -78,11 +89,54 @@ public class ContainerApiLiveTest extends BaseDockerApiLiveTest {
}
@Test(dependsOnMethods = "testStartContainer")
+ public void testAttachContainer() {
+ InputStream attachStream = api().attach(container.id(), AttachOptions.Builder.logs(true).stream(false).stdout(true));
+ String stream = consumeStream(attachStream);
+ assertThat(stream.trim()).contains("hello world");
+ }
+
+ @Test(dependsOnMethods = "testAttachContainer")
+ public void testCopyFileFromContainer() {
+ InputStream tarredStream = api().copy(container.id(), Resource.create("hello"));
+ assertNotNull(consumeStream(tarredStream));
+ }
+
+ @Test(dependsOnMethods = "testCopyFileFromContainer")
+ public void testPauseContainer() {
+ api().pause(container.id());
+ assertTrue(api().inspectContainer(container.id()).state().paused());
+ }
+
+ @Test(dependsOnMethods = "testPauseContainer")
+ public void testUnpauseContainer() {
+ api().unpause(container.id());
+ assertFalse(api().inspectContainer(container.id()).state().paused());
+ }
+
+ @Test(dependsOnMethods = "testUnpauseContainer")
public void testStopContainer() {
api().stopContainer(container.id());
assertFalse(api().inspectContainer(container.id()).state().running());
}
+ @Test(dependsOnMethods = "testStopContainer")
+ public void testRestartContainer() {
+ api().restart(container.id());
+ assertTrue(api().inspectContainer(container.id()).state().running());
+ }
+
+ @Test(dependsOnMethods = "testRestartContainer")
+ public void testWaitContainer() {
+ api().stopContainer(container.id(), 1);
+ assertEquals(api().wait(container.id()).statusCode(), -1);
+ }
+
+ @Test(dependsOnMethods = "testWaitContainer")
+ public void testRemoveContainer() {
+ api().removeContainer(container.id());
+ assertNull(api().inspectContainer(container.id()));
+ }
+
@Test
public void testListContainers() {
List<ContainerSummary> containerSummaries = api().listContainers(ListContainerOptions.Builder.all(true));
@@ -93,12 +147,6 @@ public class ContainerApiLiveTest extends BaseDockerApiLiveTest {
}
}
- @Test(dependsOnMethods = "testStopContainer", expectedExceptions = NullPointerException.class)
- public void testRemoveContainer() {
- api().removeContainer(container.id());
- assertFalse(api().inspectContainer(container.id()).state().running());
- }
-
private ContainerApi api() {
return api.getContainerApi();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/features/ContainerApiMockTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/ContainerApiMockTest.java b/docker/src/test/java/org/jclouds/docker/features/ContainerApiMockTest.java
index 4bbff66..ab3657b 100644
--- a/docker/src/test/java/org/jclouds/docker/features/ContainerApiMockTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/ContainerApiMockTest.java
@@ -16,23 +16,22 @@
*/
package org.jclouds.docker.features;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-import java.util.List;
import org.jclouds.docker.DockerApi;
+import org.jclouds.docker.config.DockerParserModule;
import org.jclouds.docker.domain.Config;
import org.jclouds.docker.domain.Container;
-import org.jclouds.docker.domain.ContainerSummary;
+import org.jclouds.docker.domain.Resource;
import org.jclouds.docker.internal.BaseDockerMockTest;
import org.jclouds.docker.options.ListContainerOptions;
-import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.docker.parse.ContainerParseTest;
+import org.jclouds.docker.parse.ContainersParseTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMultimap;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@@ -43,96 +42,56 @@ import com.squareup.okhttp.mockwebserver.MockWebServer;
public class ContainerApiMockTest extends BaseDockerMockTest {
public void testListContainers() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/containers.json")));
-
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
-
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/containers.json")));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- List<ContainerSummary> containerSummaries = api.listContainers();
- assertRequestHasCommonFields(server.takeRequest(), "/containers/json");
- assertEquals(containerSummaries.size(), 1);
+ assertEquals(api.listContainers(), new ContainersParseTest().expected());
+ assertSent(server, "GET", "/containers/json");
} finally {
- dockerApi.close();
server.shutdown();
}
}
public void testListNonexistentContainers() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(404));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- List<ContainerSummary> containerSummaries = api.listContainers();
- assertRequestHasCommonFields(server.takeRequest(), "/containers/json");
- assertTrue(containerSummaries.isEmpty());
+ assertEquals(api.listContainers(), ImmutableList.of());
+ assertSent(server, "GET", "/containers/json");
} finally {
- dockerApi.close();
server.shutdown();
}
}
-
@Test(timeOut = 10000l)
public void testListAllContainers() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/containers.json")));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/containers.json")));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- List<ContainerSummary> containerSummaries = api.listContainers(ListContainerOptions.Builder.all(true));
- assertRequestHasParameters(server.takeRequest(), "/containers/json", ImmutableMultimap.of("all", "true"));
- assertEquals(containerSummaries.size(), 1);
+ assertEquals(api.listContainers(ListContainerOptions.Builder.all(true)), new ContainersParseTest().expected());
+ assertSent(server, "GET", "/containers/json?all=true");
} finally {
- dockerApi.close();
server.shutdown();
}
}
public void testGetContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/container.json")));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/container.json")));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString(), new DockerParserModule()).getContainerApi();
String containerId = "b03d4cd15b76f8876110615cdeed15eadf77c9beb408d62f1687dcc69192cd6d";
try {
- Container container = api.inspectContainer(containerId);
- assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json");
- assertNotNull(container);
- assertNotNull(container.id(), containerId);
- assertNotNull(container.config());
- assertNotNull(container.hostConfig());
- assertTrue(container.name().contains("/weave"));
- assertEquals(container.state().running(), true);
+ assertEquals(api.inspectContainer(containerId), new ContainerParseTest().expected());
+ assertSent(server, "GET", "/containers/" + containerId + "/json");
} finally {
- dockerApi.close();
- server.shutdown();
- }
- }
-
- public void testGetNonExistingContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
- String containerId = "notExisting";
- try {
- Container container = api.inspectContainer(containerId);
- assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json");
- } finally {
- dockerApi.close();
server.shutdown();
}
}
public void testCreateContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/container-creation.json")));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
- Config containerConfig = Config.builder().cmd(ImmutableList.of("date"))
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/container-creation.json")));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ Config containerConfig = Config.builder()
+ .cmd(ImmutableList.of("date"))
.attachStdin(false)
.attachStderr(true)
.attachStdout(true)
@@ -141,106 +100,135 @@ public class ContainerApiMockTest extends BaseDockerMockTest {
.build();
try {
Container container = api.createContainer("test", containerConfig);
- assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/create?name=test");
+ assertSent(server, "POST", "/containers/create?name=test");
assertNotNull(container);
- assertEquals(container.id(), "c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2");
+ assertThat(container.id()).isEqualTo("c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2");
} finally {
- dockerApi.close();
server.shutdown();
}
}
public void testRemoveContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(204));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
String containerId = "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9";
try {
api.removeContainer(containerId);
- assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/containers/" + containerId);
+ assertSent(server, "DELETE", "/containers/" + containerId);
+
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testRemoveNonExistingContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
- String containerId = "nonExisting";
+ public void testStartContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- api.removeContainer(containerId);
- fail("Remove container must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
+ api.startContainer("1");
+ assertSent(server, "POST", "/containers/1/start");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testStartContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(200));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ public void testStopContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- api.startContainer("1");
- assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/start");
+ api.stopContainer("1");
+ assertSent(server, "POST", "/containers/1/stop");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testStartNonExistingContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+
+ public void testCommitContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(201));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- try {
- api.startContainer("1");
- fail("Start container must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
- }
+ api.commit();
+ assertSent(server, "POST", "/commit");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testStopContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(200));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ public void testPauseContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- api.stopContainer("1");
- assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/stop");
+ api.pause("1");
+ assertSent(server, "POST", "/containers/1/pause");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testStopNonExistingContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ContainerApi api = dockerApi.getContainerApi();
+ public void testUnpauseContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
try {
- api.stopContainer("1");
- fail("Stop container must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
+ api.unpause("1");
+ assertSent(server, "POST", "/containers/1/unpause");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testAttachContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ try {
+ api.attach("1");
+ assertSent(server, "POST", "/containers/1/attach");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testWaitContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ try {
+ api.wait("1");
+ assertSent(server, "POST", "/containers/1/wait");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testRestartContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ try {
+ api.restart("1");
+ assertSent(server, "POST", "/containers/1/restart");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testKillContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ try {
+ api.kill("1");
+ assertSent(server, "POST", "/containers/1/kill");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testCopyFileFromContainer() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ContainerApi api = api(DockerApi.class, server.getUrl("/").toString()).getContainerApi();
+ try {
+ api.copy("1", Resource.create("test"));
+ assertSent(server, "POST", "/containers/1/copy");
} finally {
- dockerApi.close();
server.shutdown();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java b/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
index 7ad6414..5349c39 100644
--- a/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
@@ -16,15 +16,16 @@
*/
package org.jclouds.docker.features;
-import static org.testng.Assert.fail;
+import static org.testng.Assert.assertEquals;
import org.jclouds.docker.DockerApi;
+import org.jclouds.docker.config.DockerParserModule;
import org.jclouds.docker.internal.BaseDockerMockTest;
import org.jclouds.docker.options.CreateImageOptions;
-import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.docker.parse.ImageParseTest;
+import org.jclouds.docker.parse.ImagesParseTest;
import org.testng.annotations.Test;
-import com.google.common.collect.ImmutableMultimap;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@@ -35,61 +36,47 @@ import com.squareup.okhttp.mockwebserver.MockWebServer;
public class ImageApiMockTest extends BaseDockerMockTest {
public void testCreateImage() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(200));
- DockerApi dockerApi = api(server.getUrl("/"));
- ImageApi api = dockerApi.getImageApi();
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ ImageApi api = api(DockerApi.class, server.getUrl("/").toString()).getImageApi();
try {
api.createImage(CreateImageOptions.Builder.fromImage("base"));
- assertRequestHasParameters(server.takeRequest(), "POST", "/images/create", ImmutableMultimap.of("fromImage", "base"));
+ assertSent(server, "POST", "/images/create?fromImage=base");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testCreateImageFailure() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ImageApi api = dockerApi.getImageApi();
+ public void testGetImage() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/image.json")));
+ ImageApi api = api(DockerApi.class, server.getUrl("/").toString(), new DockerParserModule()).getImageApi();
try {
- api.createImage(CreateImageOptions.Builder.fromImage("base"));
- fail("Create image must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
+ String imageId = "cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456";
+ assertEquals(api.inspectImage(imageId), new ImageParseTest().expected());
+ assertSent(server, "GET", "/images/" + imageId + "/json");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testDeleteImage() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(204));
- DockerApi dockerApi = api(server.getUrl("/"));
- ImageApi api = dockerApi.getImageApi();
+ public void testListImages() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/images.json")));
+ ImageApi api = api(DockerApi.class, server.getUrl("/").toString()).getImageApi();
try {
- api.deleteImage("1");
- assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/images/1");
+ assertEquals(api.listImages(), new ImagesParseTest().expected());
+ assertSent(server, "GET", "/images/json");
} finally {
- dockerApi.close();
server.shutdown();
}
}
- public void testDeleteNotExistingImage() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- ImageApi api = dockerApi.getImageApi();
+ public void testDeleteImage() throws Exception {
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(204));
+ ImageApi api = api(DockerApi.class, server.getUrl("/").toString()).getImageApi();
try {
api.deleteImage("1");
- fail("Delete image must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
+ assertSent(server, "DELETE", "/images/1");
+
} finally {
- dockerApi.close();
server.shutdown();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/features/MiscApiLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/MiscApiLiveTest.java b/docker/src/test/java/org/jclouds/docker/features/MiscApiLiveTest.java
index b14a108..bfe1b40 100644
--- a/docker/src/test/java/org/jclouds/docker/features/MiscApiLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/MiscApiLiveTest.java
@@ -18,7 +18,6 @@ package org.jclouds.docker.features;
import org.jclouds.docker.compute.BaseDockerApiLiveTest;
import org.jclouds.docker.options.BuildOptions;
-import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
@@ -34,10 +33,10 @@ import com.google.common.collect.Iterables;
public class MiscApiLiveTest extends BaseDockerApiLiveTest {
private static final String API_VERSION = "1.15";
- private static final String VERSION = "1.3.0";
- private static final String GIT_COMMIT = "c78088f";
+ private static final String VERSION = "1.3.2";
+ private static final String GIT_COMMIT = "39fa2fa";
private static final String GO_VERSION = "go1.3.3";
- private static final String KERNEL_VERSION = "3.16.4-tinycore64";
+ private static final String KERNEL_VERSION = "3.16.7-tinycore64";
private static final String ARCH = "amd64";
private static final String OS = "linux";
@@ -71,13 +70,6 @@ public class MiscApiLiveTest extends BaseDockerApiLiveTest {
assertNotNull(imageId);
}
- @AfterClass
- protected void tearDown() {
- if (imageId != null) {
- consumeStream(api.getImageApi().deleteImage(imageId));
- }
- }
-
private MiscApi api() {
return api.getMiscApi();
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/features/MiscApiMockTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/MiscApiMockTest.java b/docker/src/test/java/org/jclouds/docker/features/MiscApiMockTest.java
index e7b1e5b..630d7af 100644
--- a/docker/src/test/java/org/jclouds/docker/features/MiscApiMockTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/MiscApiMockTest.java
@@ -19,19 +19,15 @@ package org.jclouds.docker.features;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import org.jclouds.docker.DockerApi;
-import org.jclouds.docker.domain.Info;
-import org.jclouds.docker.domain.Version;
import org.jclouds.docker.internal.BaseDockerMockTest;
-import org.jclouds.docker.options.BuildOptions;
+import org.jclouds.docker.parse.InfoParseTest;
+import org.jclouds.docker.parse.VersionParseTest;
import org.jclouds.io.Payload;
import org.jclouds.io.Payloads;
-import org.jclouds.rest.ResourceNotFoundException;
import org.testng.annotations.Test;
import static org.jclouds.docker.compute.BaseDockerApiLiveTest.tarredDockerfile;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
@@ -41,117 +37,50 @@ import java.io.FileInputStream;
@Test(groups = "unit", testName = "MiscApiMockTest")
public class MiscApiMockTest extends BaseDockerMockTest {
- private static final String API_VERSION = "1.15";
- private static final String VERSION = "1.3.0";
- private static final String GIT_COMMIT = "c78088f";
- private static final String GO_VERSION = "go1.3.3";
- private static final String KERNEL_VERSION = "3.16.4-tinycore64";
- private static final String ARCH = "amd64";
- private static final String OS = "linux";
-
public void testGetVersion() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/version.json")));
- DockerApi dockerApi = api(server.getUrl("/"));
- MiscApi api = dockerApi.getMiscApi();
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/version.json")));
+ MiscApi api = api(DockerApi.class, server.getUrl("/").toString()).getMiscApi();
try {
- Version version = api.getVersion();
- assertRequestHasCommonFields(server.takeRequest(), "/version");
- assertNotNull(version);
- assertEquals(version.version(), VERSION);
- assertEquals(version.gitCommit(), GIT_COMMIT);
- assertEquals(version.apiVersion(), API_VERSION);
- assertEquals(version.goVersion(), GO_VERSION);
- assertEquals(version.kernelVersion(), KERNEL_VERSION);
- assertEquals(version.arch(), ARCH);
- assertEquals(version.os(), OS);
+ assertEquals(api.getVersion(), new VersionParseTest().expected());
+ assertSent(server, "GET", "/version");
} finally {
- dockerApi.close();
server.shutdown();
}
}
public void testGetInfo() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setBody(payloadFromResource("/info.json")));
- DockerApi dockerApi = api(server.getUrl("/"));
- MiscApi api = dockerApi.getMiscApi();
-
+ MockWebServer server = mockWebServer(new MockResponse().setBody(payloadFromResource("/info.json")));
+ MiscApi api = api(DockerApi.class, server.getUrl("/").toString()).getMiscApi();
try {
- Info info = api.getInfo();
- assertRequestHasCommonFields(server.takeRequest(), "/info");
- assertNotNull(info);
- assertNotNull(info.containers());
- assertNotNull(info.debug());
- assertNotNull(info.driver());
- assertNotNull(info.executionDriver());
- assertNotNull(info.images());
- assertNotNull(info.indexServerAddress());
- assertNotNull(info.initPath());
- assertNotNull(info.iPv4Forwarding());
- assertNotNull(info.kernelVersion());
- assertNotNull(info.memoryLimit());
- assertNotNull(info.nEventsListener());
- assertNotNull(info.nFd());
- assertNotNull(info.nGoroutines());
- assertNotNull(info.swapLimit());
+ assertEquals(api.getInfo(), new InfoParseTest().expected());
+ assertSent(server, "GET", "/info");
} finally {
- dockerApi.close();
server.shutdown();
}
}
public void testBuildContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(200));
- DockerApi dockerApi = api(server.getUrl("/"));
- MiscApi api = dockerApi.getMiscApi();
- File dockerFile = File.createTempFile("docker", "tmp");
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ MiscApi api = api(DockerApi.class, server.getUrl("/").toString()).getMiscApi();
try {
- api.build(tarredDockerfile(), BuildOptions.NONE);
- assertRequestHasCommonFields(server.takeRequest(), "POST", "/build");
+ api.build(tarredDockerfile());
+ assertSent(server, "POST", "/build");
} finally {
- dockerFile.delete();
- dockerApi.close();
server.shutdown();
}
}
public void testBuildContainerUsingPayload() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(200));
- DockerApi dockerApi = api(server.getUrl("/"));
- MiscApi api = dockerApi.getMiscApi();
+ MockWebServer server = mockWebServer(new MockResponse().setResponseCode(200));
+ MiscApi api = api(DockerApi.class, server.getUrl("/").toString()).getMiscApi();
File file = File.createTempFile("docker", "tmp");
FileInputStream data = new FileInputStream(file);
Payload payload = Payloads.newInputStreamPayload(data);
payload.getContentMetadata().setContentLength(file.length());
-
- try {
- api.build(payload, BuildOptions.NONE);
- assertRequestHasCommonFields(server.takeRequest(), "POST", "/build");
- } finally {
- dockerApi.close();
- server.shutdown();
- }
- }
-
- public void testBuildNonexistentContainer() throws Exception {
- MockWebServer server = mockWebServer();
- server.enqueue(new MockResponse().setResponseCode(404));
- DockerApi dockerApi = api(server.getUrl("/"));
- MiscApi api = dockerApi.getMiscApi();
- File dockerFile = File.createTempFile("docker", "tmp");
try {
- try {
- api.build(tarredDockerfile(), BuildOptions.NONE);
- fail("Build container must fail on 404");
- } catch (ResourceNotFoundException ex) {
- // Expected exception
- }
+ api.build(payload);
+ assertSent(server, "POST", "/build");
} finally {
- dockerFile.delete();
- dockerApi.close();
server.shutdown();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java b/docker/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java
index efdc9b5..994519e 100644
--- a/docker/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java
+++ b/docker/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java
@@ -16,27 +16,19 @@
*/
package org.jclouds.docker.internal;
-import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
-import static org.jclouds.http.utils.Queries.encodeQueryLine;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.jclouds.util.Strings2.toStringAndClose;
-import static org.testng.Assert.assertEquals;
import java.io.IOException;
-import java.net.URL;
import java.util.Properties;
-import java.util.Set;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
-import org.jclouds.ContextBuilder;
-import org.jclouds.concurrent.config.ExecutorServiceModule;
-import org.jclouds.docker.DockerApi;
+import org.jclouds.http.BaseMockWebServerTest;
+import org.jclouds.http.okhttp.config.OkHttpCommandExecutorServiceModule;
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Multimap;
import com.google.inject.Module;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import com.squareup.okhttp.mockwebserver.RecordedRequest;
@@ -44,33 +36,18 @@ import com.squareup.okhttp.mockwebserver.RecordedRequest;
/**
* Base class for all Docker mock tests.
*/
-public class BaseDockerMockTest {
- private final Set<Module> modules = ImmutableSet.<Module> of(new ExecutorServiceModule(sameThreadExecutor(),
- sameThreadExecutor()));
+public class BaseDockerMockTest extends BaseMockWebServerTest {
- protected String provider;
+ protected static final String API_VERSION = "1.15";
- public BaseDockerMockTest() {
- provider = "docker";
+ @Override
+ protected void addOverrideProperties(Properties properties) {
+ properties.setProperty("jclouds.api-version", API_VERSION);
}
- public DockerApi api(URL url) {
- return ContextBuilder.newBuilder(provider)
- .credentials("clientid", "apikey")
- .endpoint(url.toString())
- .modules(modules)
- .overrides(setupProperties())
- .buildApi(DockerApi.class);
- }
-
- protected Properties setupProperties() {
- return new Properties();
- }
-
- public static MockWebServer mockWebServer() throws IOException {
- MockWebServer server = new MockWebServer();
- server.play();
- return server;
+ @Override
+ protected Module createConnectionModule() {
+ return new OkHttpCommandExecutorServiceModule();
}
public byte[] payloadFromResource(String resource) {
@@ -81,38 +58,12 @@ public class BaseDockerMockTest {
}
}
- protected static void assertRequestHasCommonFields(final RecordedRequest request, final String path)
- throws InterruptedException {
- assertRequestHasParameters(request, "GET", path, ImmutableMultimap.<String, String> of());
- }
-
- protected static void assertRequestHasCommonFields(final RecordedRequest request,
- final String verb, final String path)
- throws InterruptedException {
- assertRequestHasParameters(request, verb, path, ImmutableMultimap.<String, String> of());
- }
-
- protected static void assertRequestHasParameters(final RecordedRequest request, final String path,
- Multimap<String, String> parameters) throws InterruptedException {
- assertRequestHasParameters(request, "GET", path, parameters);
- }
-
- protected static void assertRequestHasParameters(final RecordedRequest request, String verb, final String path,
- Multimap<String, String> parameters) throws InterruptedException {
- String queryParameters = "";
- if (!parameters.isEmpty()) {
- Multimap<String, String> allparams = ImmutableMultimap.<String, String>builder()
- .putAll(parameters)
- .build();
-
- assertRequestHasAcceptHeader(request);
- queryParameters = "?" + encodeQueryLine(allparams);
- }
- assertEquals(request.getRequestLine(), verb + " " + path + queryParameters + " HTTP/1.1");
- }
-
- protected static void assertRequestHasAcceptHeader(final RecordedRequest request) throws InterruptedException {
- assertEquals(request.getHeader(HttpHeaders.ACCEPT), MediaType.APPLICATION_JSON);
+ protected RecordedRequest assertSent(MockWebServer server, String method, String path) throws InterruptedException {
+ RecordedRequest request = server.takeRequest();
+ assertThat(request.getMethod()).isEqualTo(method);
+ assertThat(request.getPath()).isEqualTo("/v" + API_VERSION + path);
+ assertThat(request.getHeader(HttpHeaders.ACCEPT)).isEqualTo(MediaType.APPLICATION_JSON);
+ return request;
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/internal/BaseDockerParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/internal/BaseDockerParseTest.java b/docker/src/test/java/org/jclouds/docker/internal/BaseDockerParseTest.java
new file mode 100644
index 0000000..5227ff8
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/internal/BaseDockerParseTest.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.internal;
+
+import org.jclouds.docker.config.DockerParserModule;
+import org.jclouds.json.BaseItemParserTest;
+import org.jclouds.json.config.GsonModule;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+public abstract class BaseDockerParseTest<T> extends BaseItemParserTest<T> {
+
+ @Override
+ protected Injector injector() {
+ return Guice.createInjector(new GsonModule(), new DockerParserModule());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
new file mode 100644
index 0000000..dc5c791
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.HostConfig;
+import org.jclouds.docker.domain.NetworkSettings;
+import org.jclouds.docker.domain.State;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+@Test(groups = "unit")
+public class ContainerParseTest extends BaseDockerParseTest<Container> {
+
+ @Override
+ public String resource() {
+ return "/container.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Container expected() {
+ return Container.builder()
+ .id("6c9932f478bd761f32ddb54ed28ab42ab6fac6f2a279f561ea31503ee9d39524")
+ .created(new SimpleDateFormatDateService().iso8601DateParse("2014-10-31T17:00:21.544197943Z"))
+ .path("/home/weave/weaver")
+ .name("/weave")
+ .args(ImmutableList.of("-iface", "ethwe", "-wait", "5", "-name", "7a:63:a2:39:7b:0f"))
+ .config(Config.builder()
+ .hostname("6c9932f478bd")
+ .env(ImmutableList.of("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"))
+ .image("57e570db16baba1e8c0d6f3c15868ddb400f64ff76ec948e65c3ca3f15fb3587")
+ .domainname("")
+ .user("")
+ .cmd(ImmutableList.of("-name", "7a:63:a2:39:7b:0f"))
+ .entrypoint(ImmutableList.of("/home/weave/weaver", "-iface", "ethwe", "-wait", "5"))
+ .image("zettio/weave")
+ .workingDir("/home/weave")
+ .exposedPorts(ImmutableMap.of("6783/tcp", ImmutableMap.of(), "6783/udp", ImmutableMap.of()))
+ .build())
+ .state(State.create(3939, true, 0, "2014-10-31T17:00:21.802008706Z", "0001-01-01T00:00:00Z", false, false))
+ .image("57e570db16baba1e8c0d6f3c15868ddb400f64ff76ec948e65c3ca3f15fb3587")
+ .networkSettings(NetworkSettings.builder()
+ .ipAddress("172.17.0.7")
+ .ipPrefixLen(16)
+ .gateway("172.17.42.1")
+ .bridge("docker0")
+ .ports(ImmutableMap.<String, List<Map<String, String>>>of(
+ "6783/tcp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "0.0.0.0", "HostPort", "6783")),
+ "6783/udp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "0.0.0.0", "HostPort", "6783")))
+ )
+ .build())
+ .resolvConfPath("/var/lib/docker/containers/6c9932f478bd761f32ddb54ed28ab42ab6fac6f2a279f561ea31503ee9d39524/resolv.conf")
+ .hostConfig(HostConfig.builder()
+ .containerIDFile("")
+ .portBindings(ImmutableMap.<String, List<Map<String, String>>>of(
+ "6783/tcp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "", "HostPort", "6783")),
+ "6783/udp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "", "HostPort", "6783")))
+ )
+ .privileged(true)
+ .build())
+ .driver("aufs")
+ .execDriver("native-0.2")
+ .hostnamePath("/var/lib/docker/containers/6c9932f478bd761f32ddb54ed28ab42ab6fac6f2a279f561ea31503ee9d39524/hostname")
+ .hostsPath("/var/lib/docker/containers/6c9932f478bd761f32ddb54ed28ab42ab6fac6f2a279f561ea31503ee9d39524/hosts")
+ .mountLabel("")
+ .processLabel("")
+ .build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/ContainersParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ContainersParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ContainersParseTest.java
new file mode 100644
index 0000000..bb3bd62
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/ContainersParseTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.docker.domain.ContainerSummary;
+import org.jclouds.docker.domain.Port;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit")
+public class ContainersParseTest extends BaseDockerParseTest<List<ContainerSummary>> {
+
+ @Override
+ public String resource() {
+ return "/containers.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public List<ContainerSummary> expected() {
+ return ImmutableList.of(
+ ContainerSummary.create("6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9",
+ ImmutableList.of("/hopeful_mclean"),
+ "1395472605",
+ "jclouds/ubuntu:latest",
+ "/usr/sbin/sshd -D",
+ ImmutableList.of(Port.create("0.0.0.0", 22, 49231, "tcp")),
+ "Up 55 seconds")
+ );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/ImageParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ImageParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ImageParseTest.java
new file mode 100644
index 0000000..038be86
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/ImageParseTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.beust.jcommander.internal.Maps;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+@Test(groups = "unit")
+public class ImageParseTest extends BaseDockerParseTest<Image> {
+
+ @Override
+ public String resource() {
+ return "/image.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Image expected() {
+ return Image.create("cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
+ "author",
+ "comment",
+ Config.builder().cmd(ImmutableList.of("/bin/sh", "-c", "echo hello world"))
+ .env(ImmutableList.of(
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+ "HOME=/root",
+ "JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64"
+ )
+ )
+ .exposedPorts(ImmutableMap.of("8081/tcp", Maps.newHashMap()))
+ .hostname("f22711318734")
+ .domainname("")
+ .user("user")
+ .image("05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba")
+ .workingDir("/home/user")
+ .build(),
+ Config.builder().cmd(ImmutableList.of("/bin/sh", "-c", "echo hello world"))
+ .env(ImmutableList.of(
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+ "HOME=/root",
+ "JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64")
+ )
+ .exposedPorts(ImmutableMap.of("8081/tcp", Maps.newHashMap()))
+ .hostname("f22711318734")
+ .domainname("")
+ .user("user")
+ .image("05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba")
+ .workingDir("/home/user")
+ .build(),
+ "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ new SimpleDateFormatDateService().iso8601DateParse("2014-11-24T11:09:20.310023104Z"),
+ "0d14967353dbbd2ee78abe209f026f71654da49692fa2b044296ec3c810027b3",
+ "1.3.1",
+ "amd64",
+ "linux",
+ 0,
+ 808709069,
+ null);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
new file mode 100644
index 0000000..d2ef5b6
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.docker.domain.ImageSummary;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit")
+public class ImagesParseTest extends BaseDockerParseTest<List<ImageSummary>> {
+
+ @Override
+ public String resource() {
+ return "/images.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public List<ImageSummary> expected() {
+ return ImmutableList.of(
+ ImageSummary.create("cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
+ 1416827360,
+ "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ 0,
+ 808709069,
+ ImmutableList.of("test:latest")),
+ ImageSummary.create("e1e548b03259ae30ba12232b6c16ef5205cf71b0363848e78b0394e1ecba4f57",
+ 1416826851,
+ "6f36bec79c7f184ceebf7000cfb7244c4bc9b397b6659ac7f420a53d114250d9",
+ 0,
+ 5609404,
+ ImmutableList.of("<none>:<none>")),
+ ImageSummary.create("8201388d2b288539aab6aabf5d3b15ec269eba95c6baa9d6771f16540abf3a3f",
+ 1414247273,
+ "4671e2c549c5b60063e349f520c801dc73b53d2226a5a8e5501845ebe94761ca",
+ 0,
+ 755313702,
+ ImmutableList.of("dockerfile/java:openjdk-7-jdk")),
+ ImageSummary.create("5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
+ 1414108439,
+ "22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
+ 0,
+ 199257566,
+ ImmutableList.of("ubuntu:14.04"))
+ );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/InfoParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/InfoParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/InfoParseTest.java
new file mode 100644
index 0000000..5527e28
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/InfoParseTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.docker.domain.Info;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit")
+public class InfoParseTest extends BaseDockerParseTest<Info> {
+
+ @Override
+ public String resource() {
+ return "/info.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Info expected() {
+ return Info.create(0,
+ 1,
+ "aufs",
+ ImmutableList.<List<String>>of(
+ ImmutableList.of("Root Dir", "/mnt/sda1/var/lib/docker/aufs"),
+ ImmutableList.of("Dirs", "15")
+ ),
+ "native-0.2",
+ 1,
+ 15,
+ "https://index.docker.io/v1/",
+ "/usr/local/bin/docker",
+ "",
+ "3.16.4-tinycore64",
+ 1,
+ 0,
+ 10,
+ 11,
+ "Boot2Docker 1.3.0 (TCL 5.4); master : a083df4 - Thu Oct 16 17:05:03 UTC 2014",
+ 1);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/java/org/jclouds/docker/parse/VersionParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/VersionParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/VersionParseTest.java
new file mode 100644
index 0000000..2d9781b
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/VersionParseTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.docker.domain.Version;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit")
+public class VersionParseTest extends BaseDockerParseTest<Version> {
+
+ @Override
+ public String resource() {
+ return "/version.json";
+ }
+
+ @Override
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Version expected() {
+ return Version.create(
+ "1.15",
+ "amd64",
+ "c78088f",
+ "go1.3.3",
+ "3.16.4-tinycore64",
+ "linux",
+ "1.3.0");
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/resources/cert.pem
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/cert.pem b/docker/src/test/resources/cert.pem
new file mode 100644
index 0000000..ab2c41a
--- /dev/null
+++ b/docker/src/test/resources/cert.pem
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIJAL/TuOknjSR5MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+aWRnaXRzIFB0eSBMdGQwHhcNMTQxMjEyMTYwMDEyWhcNMjQxMjA5MTYwMDEyWjBF
+MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
+ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAuUQcWlhrMXmzLSLiHUADdF98IHKRde7I1eDT91NndOtx4pKfvVc3WPei
+REIMksrU8F1r4A086h5++xxDf27LxR4EC9ry0Q6GgJ9Un9RB9clCWRhLw8awHAS7
+HgAEN8YOSCeF3qP+78muxyMkIKQbYn3TqqOzRZcK576hX+a6URNJDhbHHAzq2fxm
+rOSRVdPXzKLl48ABfmqJ6+KiXc6e7mQSgmwBLfh51zxmJNNwZ5e+6sfZ8oz4yM4y
+Kzek53GRSFj+VFNp5nS/x2072fUak2i6DGut5LibFfh1kqskIm+Iq5WwO15RbojZ
+CR6fkktCl5QOtea5p8SETZpwWfaddQIDAQABo4GnMIGkMB0GA1UdDgQWBBQtOc1g
+1gxisDQ7VTmRYI1U9WHVMDB1BgNVHSMEbjBsgBQtOc1g1gxisDQ7VTmRYI1U9WHV
+MKFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNV
+BAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAL/TuOknjSR5MAwGA1UdEwQF
+MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBABxYn5JdJYC8FUITqymJeNZ72/a2GVf8
++gGlWH+DuiyviEAGMGpv7O4GXfS/6UiUBO7zMe2z15fUvNgd5RQBh4T+l5bA9aS0
+5JhENIpEApiIcEII4ISIk6pTLmAZjWvqq2kStiiFPNvdKFclYqFuKHv847EA8kGz
+9u6MuUyFrJipWZ3g8zeYiwLWaAzvimbHomO7HU4pcvYaCSl7O5BQTToKwLfHcx5y
+UG6uRf+0auC5QbotiXpYNdXhIbSD/2xXbjxGwYy4yRWHINcbwfK8iVRhR4eSvtBC
+WvF3Vp8xLJxp6ujBd+a27AOWEiE1XM8oAoUpEzdIINY1GtUSbXzNboc=
+-----END CERTIFICATE-----
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/resources/image.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/image.json b/docker/src/test/resources/image.json
new file mode 100644
index 0000000..8d34de7
--- /dev/null
+++ b/docker/src/test/resources/image.json
@@ -0,0 +1,83 @@
+{
+ "Architecture": "amd64",
+ "Author": "author",
+ "Comment": "comment",
+ "Config": {
+ "AttachStderr": false,
+ "AttachStdin": false,
+ "AttachStdout": false,
+ "Cmd": [
+ "/bin/sh",
+ "-c",
+ "echo hello world"
+ ],
+ "CpuShares": 0,
+ "Cpuset": "",
+ "Domainname": "",
+ "Entrypoint": null,
+ "Env": [
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+ "HOME=/root",
+ "JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64"
+ ],
+ "ExposedPorts": {
+ "8081/tcp": {}
+ },
+ "Hostname": "f22711318734",
+ "Image": "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ "Memory": 0,
+ "MemorySwap": 0,
+ "NetworkDisabled": false,
+ "OnBuild": [],
+ "OpenStdin": false,
+ "PortSpecs": null,
+ "StdinOnce": false,
+ "Tty": false,
+ "User": "user",
+ "Volumes": null,
+ "WorkingDir": "/home/user"
+ },
+ "Container": "0d14967353dbbd2ee78abe209f026f71654da49692fa2b044296ec3c810027b3",
+ "ContainerConfig": {
+ "AttachStderr": false,
+ "AttachStdin": false,
+ "AttachStdout": false,
+ "Cmd": [
+ "/bin/sh",
+ "-c",
+ "echo hello world"
+ ],
+ "CpuShares": 0,
+ "Cpuset": "",
+ "Domainname": "",
+ "Entrypoint": null,
+ "Env": [
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+ "HOME=/root",
+ "JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64"
+ ],
+ "ExposedPorts": {
+ "8081/tcp": {}
+ },
+ "Hostname": "f22711318734",
+ "Image": "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ "Memory": 0,
+ "MemorySwap": 0,
+ "NetworkDisabled": false,
+ "OnBuild": [],
+ "OpenStdin": false,
+ "PortSpecs": null,
+ "StdinOnce": false,
+ "Tty": false,
+ "User": "user",
+ "Volumes": null,
+ "WorkingDir": "/home/user"
+ },
+ "Created": "2014-11-24T11:09:20.310023104Z",
+ "DockerVersion": "1.3.1",
+ "Id": "cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
+ "Os": "linux",
+ "Parent": "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ "Size": 0,
+ "VirtualSize": 808709069
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/74cefc97/docker/src/test/resources/images.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/images.json b/docker/src/test/resources/images.json
new file mode 100644
index 0000000..41d4f12
--- /dev/null
+++ b/docker/src/test/resources/images.json
@@ -0,0 +1,42 @@
+[
+ {
+ "Created": 1416827360,
+ "Id": "cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
+ "ParentId": "05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
+ "RepoTags": [
+ "test:latest"
+ ],
+ "Size": 0,
+ "VirtualSize": 808709069
+ },
+ {
+ "Created": 1416826851,
+ "Id": "e1e548b03259ae30ba12232b6c16ef5205cf71b0363848e78b0394e1ecba4f57",
+ "ParentId": "6f36bec79c7f184ceebf7000cfb7244c4bc9b397b6659ac7f420a53d114250d9",
+ "RepoTags": [
+ "<none>:<none>"
+ ],
+ "Size": 0,
+ "VirtualSize": 5609404
+ },
+ {
+ "Created": 1414247273,
+ "Id": "8201388d2b288539aab6aabf5d3b15ec269eba95c6baa9d6771f16540abf3a3f",
+ "ParentId": "4671e2c549c5b60063e349f520c801dc73b53d2226a5a8e5501845ebe94761ca",
+ "RepoTags": [
+ "dockerfile/java:openjdk-7-jdk"
+ ],
+ "Size": 0,
+ "VirtualSize": 755313702
+ },
+ {
+ "Created": 1414108439,
+ "Id": "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
+ "ParentId": "22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
+ "RepoTags": [
+ "ubuntu:14.04"
+ ],
+ "Size": 0,
+ "VirtualSize": 199257566
+ }
+]
\ No newline at end of file