http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java deleted file mode 100644 index cfafe41..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java +++ /dev/null @@ -1,96 +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.compute; - -import com.google.common.base.Charsets; -import com.google.common.collect.ImmutableSet; -import com.google.common.io.CharStreams; -import com.google.common.io.Closeables; -import com.google.common.io.Files; -import com.google.common.io.Resources; -import com.google.inject.Module; -import org.jclouds.Constants; -import org.jclouds.apis.BaseApiLiveTest; -import org.jclouds.docker.DockerApi; -import org.jclouds.docker.compute.features.internal.Archives; -import org.jclouds.io.Payload; -import org.jclouds.io.Payloads; -import org.jclouds.sshj.config.SshjSshClientModule; -import org.testng.Assert; -import org.testng.annotations.Test; - -import javax.ws.rs.core.MediaType; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.Properties; - -/** - * @author Andrea Turli - */ -@Test(groups = "live", singleThreaded = true) -public class BaseDockerApiLiveTest extends BaseApiLiveTest<DockerApi> { - - public BaseDockerApiLiveTest() { - provider = "docker"; - } - - @Override - protected Iterable<Module> setupModules() { - return ImmutableSet.<Module>of(getLoggingModule(), new SshjSshClientModule()); - } - - @Override - protected Properties setupProperties() { - Properties overrides = new Properties(); - overrides.setProperty(Constants.PROPERTY_MAX_RETRIES, "15"); - overrides.setProperty("jclouds.ssh.retry-auth", "true"); - endpoint = setIfTestSystemPropertyPresent(overrides, provider + ".endpoint"); - return overrides; - } - - protected String consumeStream(InputStream stream, boolean swallowIOException) { - String result = null; - try { - result = CharStreams.toString(new InputStreamReader(stream, Charsets.UTF_8)); - Closeables.close(stream, swallowIOException); - } catch (IOException e) { - Assert.fail(); - } - return result; - } - - protected Payload createPayload() throws IOException { - String folderPath = System.getProperty("user.dir") + "/docker/src/test/resources"; - File parentDir = new File(folderPath + "/archive"); - parentDir.mkdirs(); - URL url = Resources.getResource("Dockerfile"); - String content = Resources.toString(url, Charsets.UTF_8); - final File dockerfile = new File(parentDir.getAbsolutePath() + File.separator + "Dockerfile"); - Files.write(content.getBytes(), dockerfile); - File archive = Archives.tar(parentDir, folderPath + "/archive/archive.tar"); - FileInputStream data = new FileInputStream(archive); - Payload payload = Payloads.newInputStreamPayload(data); - payload.getContentMetadata().setContentLength(data.getChannel().size()); - payload.getContentMetadata().setContentType(MediaType.TEXT_PLAIN); - return payload; - } - -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java deleted file mode 100644 index 9ae95aa..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java +++ /dev/null @@ -1,138 +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.compute; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.net.HostAndPort; -import com.google.inject.Injector; -import com.google.inject.Module; -import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials; -import org.jclouds.compute.domain.ExecResponse; -import org.jclouds.compute.domain.Hardware; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.compute.functions.DefaultCredentialsFromImageOrOverridingCredentials; -import org.jclouds.compute.strategy.PrioritizeCredentialsFromTemplate; -import org.jclouds.docker.DockerApi; -import org.jclouds.docker.compute.strategy.DockerComputeServiceAdapter; -import org.jclouds.docker.domain.Container; -import org.jclouds.domain.LoginCredentials; -import org.jclouds.ssh.SshClient; -import org.jclouds.ssh.SshClient.Factory; -import org.jclouds.sshj.config.SshjSshClientModule; -import org.testng.annotations.AfterGroups; -import org.testng.annotations.Test; - -import java.net.URI; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Random; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; - -@Test(groups = "live", singleThreaded = true, testName = "DockerComputeServiceAdapterLiveTest") -public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest { - - private DockerComputeServiceAdapter adapter; - private TemplateBuilder templateBuilder; - private Factory sshFactory; - private NodeAndInitialCredentials<Container> guest; - private URI endpoint; - - @Override - protected DockerApi create(Properties props, Iterable<Module> modules) { - Injector injector = newBuilder().modules(modules).overrides(props).buildInjector(); - adapter = injector.getInstance(DockerComputeServiceAdapter.class); - templateBuilder = injector.getInstance(TemplateBuilder.class); - sshFactory = injector.getInstance(SshClient.Factory.class); - endpoint = URI.create(props.getProperty("docker.endpoint")); - return injector.getInstance(DockerApi.class); - } - - @Test - public void testListImages() { - assertFalse(Iterables.isEmpty(adapter.listImages()), "images must not be empty"); - } - - private static final PrioritizeCredentialsFromTemplate prioritizeCredentialsFromTemplate = new PrioritizeCredentialsFromTemplate( - new DefaultCredentialsFromImageOrOverridingCredentials()); - - @Test - public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials() { - String group = "foo"; - String name = "container-" + new Random().nextInt(); - - Template template = templateBuilder.smallest().osFamily(OsFamily.UBUNTU).os64Bit(true) - .osDescriptionMatches("jclouds/ubuntu:latest").build(); - - guest = adapter.createNodeWithGroupEncodedIntoName(group, name, template); - assertEquals(guest.getNodeId(), guest.getNode().getId() + ""); - doConnectViaSsh(guest.getNode(), prioritizeCredentialsFromTemplate.apply(template, guest.getCredentials())); - } - - protected void doConnectViaSsh(Container guest, LoginCredentials creds) { - // todo this is an hack as I'm using host-only IF - Map<String, List<Map<String, String>>> portBindings = guest.getHostConfig().getPortBindings(); - int loginPort = Integer.parseInt(portBindings.get("22/tcp").get(0).get("HostPort")); - SshClient ssh = sshFactory.create(HostAndPort.fromParts(endpoint.getHost(), loginPort), creds); - try { - ssh.connect(); - ExecResponse hello = ssh.exec("echo hello"); - assertEquals(hello.getOutput().trim(), "hello"); - System.err.println(ssh.exec("mount").getOutput()); - System.err.println(ssh.exec("uname -a").getOutput()); - } finally { - if (ssh != null) - ssh.disconnect(); - } - } - - @Test - public void testListHardwareProfiles() { - Iterable<Hardware> profiles = adapter.listHardwareProfiles(); - assertFalse(Iterables.isEmpty(profiles)); - - for (Hardware profile : profiles) { - assertNotNull(profile); - } - } - - @AfterGroups(groups = "live") - protected void tearDown() { - if (guest != null) { - adapter.destroyNode(guest.getNode().getId() + ""); - } - super.tearDown(); - } - - @Override - protected Iterable<Module> setupModules() { - 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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerExperimentLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerExperimentLiveTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerExperimentLiveTest.java deleted file mode 100644 index 1476c9f..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/DockerExperimentLiveTest.java +++ /dev/null @@ -1,144 +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.compute; - -import com.beust.jcommander.internal.Maps; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableSet; -import com.google.inject.Module; -import org.jclouds.ContextBuilder; -import org.jclouds.compute.ComputeService; -import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.compute.RunNodesException; -import org.jclouds.compute.domain.ExecResponse; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.Template; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.docker.compute.options.DockerTemplateOptions; -import org.jclouds.logging.Logger; -import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; -import org.jclouds.scriptbuilder.domain.Statement; -import org.jclouds.scriptbuilder.statements.login.AdminAccess; -import org.jclouds.ssh.SshClient; -import org.jclouds.sshj.config.SshjSshClientModule; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import javax.annotation.Resource; -import javax.inject.Named; -import java.io.IOException; -import java.util.Map; -import java.util.Set; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; - -/** - * @author Andrea Turli - */ -@Test(groups = "live", singleThreaded = true, testName = "DockerExperimentLiveTest") -public class DockerExperimentLiveTest extends BaseDockerApiLiveTest { - - public static final String TEST_LAUNCH_CLUSTER = "jclouds"; - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - ComputeServiceContext context; - - @BeforeMethod - public void setUp() throws IOException { - context = ContextBuilder.newBuilder("docker") - .overrides(super.setupProperties()) - .modules(ImmutableSet.<Module>of(new SLF4JLoggingModule(), new SshjSshClientModule())) - .build(ComputeServiceContext.class); - } - - @AfterMethod - public void tearDown() { - context.close(); - } - - @Test - public void testLaunchUbuntuServerWithInboundPorts() throws RunNodesException { - int numNodes = 1; - ComputeService compute = context.getComputeService(); - - Template template = compute.templateBuilder().smallest() - .osFamily(OsFamily.UBUNTU).os64Bit(true) - .osDescriptionMatches("jclouds/ubuntu:latest") - .build(); - Statement bootInstructions = AdminAccess.standard(); - - DockerTemplateOptions templateOptions = template.getOptions().as(DockerTemplateOptions.class); - - Map<String,String> volumes = Maps.newHashMap(); - volumes.put("/var/lib/docker", "/root"); - templateOptions.volumes(volumes).runScript(bootInstructions) - .inboundPorts(22, 80, 8080); - - Set<? extends NodeMetadata> nodes = context.getComputeService().createNodesInGroup(TEST_LAUNCH_CLUSTER, numNodes, template); - assertEquals(numNodes, nodes.size(), "wrong number of nodes"); - for (NodeMetadata node : nodes) { - assertTrue(node.getGroup().equals(TEST_LAUNCH_CLUSTER)); - logger.debug("Created Node: %s", node); - SshClient client = context.utils().sshForNode().apply(node); - client.connect(); - ExecResponse hello = client.exec("echo hello"); - assertEquals(hello.getOutput().trim(), "hello"); - } - context.getComputeService().destroyNodesMatching(new Predicate<NodeMetadata>() { - @Override - public boolean apply(NodeMetadata input) { - return input.getGroup().contains(TEST_LAUNCH_CLUSTER); - } - }); - } - - public void testLaunchUbuntuCluster() throws RunNodesException { - int numNodes = 1; - ComputeService compute = context.getComputeService(); - Template template = compute.templateBuilder() - .smallest().osFamily(OsFamily.UBUNTU) - .os64Bit(true) - .osDescriptionMatches("jclouds/ubuntu:latest") - .build(); - Statement bootInstructions = AdminAccess.standard(); - template.getOptions().runScript(bootInstructions) - .inboundPorts(22); - - Set<? extends NodeMetadata> nodes = context.getComputeService().createNodesInGroup(TEST_LAUNCH_CLUSTER, numNodes, template); - assertEquals(numNodes, nodes.size(), "wrong number of nodes"); - for (NodeMetadata node : nodes) { - assertTrue(node.getGroup().equals(TEST_LAUNCH_CLUSTER)); - logger.debug("Created Node: %s", node); - SshClient client = context.utils().sshForNode().apply(node); - client.connect(); - ExecResponse hello = client.exec("echo hello"); - assertEquals(hello.getOutput().trim(), "hello"); - } - context.getComputeService().destroyNodesMatching(new Predicate<NodeMetadata>() { - @Override - public boolean apply(NodeMetadata input) { - return input.getGroup().contains(TEST_LAUNCH_CLUSTER); - } - }); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiLiveTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiLiveTest.java deleted file mode 100644 index 2b48f64..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiLiveTest.java +++ /dev/null @@ -1,136 +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.compute.features; - -import com.google.common.base.Splitter; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import com.google.common.io.Resources; -import org.jclouds.docker.compute.BaseDockerApiLiveTest; -import org.jclouds.docker.domain.Config; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.domain.Image; -import org.jclouds.docker.options.BuildOptions; -import org.jclouds.docker.options.CreateImageOptions; -import org.jclouds.docker.options.DeleteImageOptions; -import org.jclouds.rest.ResourceNotFoundException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URISyntaxException; - -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; - -/** - * @author Andrea Turli - */ -public class RemoteApiLiveTest extends BaseDockerApiLiveTest { - - private static final String BUSYBOX_IMAGE = "busybox"; - private Container container = null; - private Image image = null; - - @BeforeClass - private void init() { - setupProperties(); - CreateImageOptions options = CreateImageOptions.Builder.fromImage(BUSYBOX_IMAGE); - InputStream createImageStream = api().createImage(options); - consumeStream(createImageStream, false); - } - - @Test - public void testVersion() { - Assert.assertEquals(api().getVersion().getVersion(), "0.9.0"); - } - - @Test(dependsOnMethods = "testVersion") - public void testCreateImage() throws IOException, InterruptedException { - CreateImageOptions options = CreateImageOptions.Builder.fromImage(BUSYBOX_IMAGE); - InputStream createImageStream = api().createImage(options); - consumeStream(createImageStream, false); - image = api().inspectImage(BUSYBOX_IMAGE); - assertNotNull(image); - } - - @Test(dependsOnMethods = "testCreateImage") - public void testListImages() { - Assert.assertNotNull(api().listImages()); - } - - @Test(dependsOnMethods = "testListImages") - public void testCreateContainer() throws IOException, InterruptedException { - if(image == null) Assert.fail(); - Config config = Config.builder().imageId(image.getId()) - .cmd(ImmutableList.of("/bin/sh", "-c", "while true; do echo hello world; sleep 1; done")) - .build(); - container = api().createContainer("testCreateContainer", config); - assertNotNull(container); - assertNotNull(container.getId()); - } - - @Test(dependsOnMethods = "testCreateContainer") - public void testStartContainer() throws IOException, InterruptedException { - if(container == null) Assert.fail(); - api().startContainer(container.getId()); - Assert.assertTrue(api().inspectContainer(container.getId()).getState().isRunning()); - } - - @Test(dependsOnMethods = "testStartContainer") - public void testStopContainer() { - if(container == null) Assert.fail(); - api().stopContainer(container.getId()); - Assert.assertFalse(api().inspectContainer(container.getId()).getState().isRunning()); - } - - @Test(dependsOnMethods = "testStopContainer", expectedExceptions = NullPointerException.class) - public void testRemoveContainer() { - if(container == null) Assert.fail(); - api().removeContainer(container.getId()); - Assert.assertFalse(api().inspectContainer(container.getId()).getState().isRunning()); - } - - @Test(dependsOnMethods = "testRemoveContainer", expectedExceptions = ResourceNotFoundException.class) - public void testDeleteImage() { - InputStream deleteImageStream = api().deleteImage(image.getId()); - consumeStream(deleteImageStream, false); - assertNull(api().inspectImage(image.getId())); - } - - @Test(dependsOnMethods = "testDeleteImage") - public void testBuildImage() throws IOException, InterruptedException, URISyntaxException { - BuildOptions options = BuildOptions.Builder.tag("testBuildImage").verbose(false).nocache(false); - InputStream buildImageStream = api().build(new File(Resources.getResource("centos/Dockerfile").toURI()), options); - String buildStream = consumeStream(buildImageStream, false); - Iterable<String> splitted = Splitter.on("\n").split(buildStream.replace("\r", "").trim()); - String lastStreamedLine = Iterables.getLast(splitted).trim(); - String rawImageId = Iterables.getLast(Splitter.on("Successfully built ").split(lastStreamedLine)); - String imageId = rawImageId.substring(0, 11); - Image image = api().inspectImage(imageId); - api().removeContainer(image.getContainer()); - api().deleteImage(imageId, DeleteImageOptions.Builder.force(true)); - } - - private RemoteApi api() { - return api.getRemoteApi(); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiMockTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiMockTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiMockTest.java deleted file mode 100644 index 8fb0ffe..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/features/RemoteApiMockTest.java +++ /dev/null @@ -1,358 +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.compute.features; - -import com.google.common.base.Charsets; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.io.Files; -import com.squareup.okhttp.mockwebserver.MockResponse; -import com.squareup.okhttp.mockwebserver.MockWebServer; -import org.jclouds.docker.DockerApi; -import org.jclouds.docker.domain.Config; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.internal.BaseDockerMockTest; -import org.jclouds.docker.options.BuildOptions; -import org.jclouds.docker.options.CreateImageOptions; -import org.jclouds.docker.options.ListContainerOptions; -import org.jclouds.rest.ResourceNotFoundException; -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.util.Set; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; -import static org.testng.AssertJUnit.fail; - -/** - * Mock tests for the {@link org.jclouds.docker.DockerApi} class. - * - * @author Andrea Turli - */ -@Test(groups = "unit", testName = "RemoteApiMockTest") -public class RemoteApiMockTest extends BaseDockerMockTest { - - public void testListContainers() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setBody(payloadFromResource("/containers.json"))); - - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - - try { - Set<Container> containers = remoteApi.listContainers(); - assertRequestHasCommonFields(server.takeRequest(), "/containers/json"); - assertEquals(containers.size(), 1); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testListAllContainers() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setBody(payloadFromResource("/containers.json"))); - - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - - try { - Set<Container> containers = remoteApi.listContainers(ListContainerOptions.Builder.all(true)); - assertRequestHasParameters(server.takeRequest(), "/containers/json", ImmutableMultimap.of("all", - "true")); - assertEquals(containers.size(), 1); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testGetContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setBody(payloadFromResource("/container.json"))); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - String containerId = "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9"; - try { - Container container = remoteApi.inspectContainer(containerId); - assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json"); - assertNotNull(container); - assertNotNull(container.getConfig()); - assertNotNull(container.getHostConfig()); - assertEquals(container.getName(), "/hopeful_mclean"); - assertEquals(container.getState().isRunning(), true); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testGetNonExistingContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(404)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - String containerId = "notExisting"; - try { - Container container = remoteApi.inspectContainer(containerId); - assertRequestHasCommonFields(server.takeRequest(), "/containers/" + containerId + "/json"); - assertNull(container); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testCreateContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setBody(payloadFromResource("/container-creation.json"))); - - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - Config config = Config.builder().cmd(ImmutableList.of("date")) - .attachStdin(false) - .attachStderr(true) - .attachStdout(true) - .tty(false) - .imageId("base") - .build(); - try { - Container container = remoteApi.createContainer("test", config); - assertNotNull(container); - assertEquals(container.getId(), "c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testRemoveContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(204)); - - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - String containerId = "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9"; - - try { - remoteApi.removeContainer(containerId); - assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/containers/"+containerId); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testRemoveNonExistingContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(404)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - String containerId = "nonExisting"; - try { - remoteApi.removeContainer(containerId); - } catch (ResourceNotFoundException ex) { - // Expected exception - assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/containers/"+containerId); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testStartContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(200)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.startContainer("1"); - assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/start"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testStartNonExistingContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(204)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - try { - remoteApi.startContainer("1"); - } catch (ResourceNotFoundException ex) { - // Expected exception - } - assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/start"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testStopContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(200)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.stopContainer("1"); - assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/stop"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testStopNonExistingContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(204)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.stopContainer("1"); - } catch (ResourceNotFoundException ex) { - // Expected exception - assertRequestHasCommonFields(server.takeRequest(), "POST", "/containers/1/stop"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testCreateImage() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(200)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.createImage(CreateImageOptions.Builder.fromImage("base")); - assertRequestHasParameters(server.takeRequest(), "POST", "/images/create", ImmutableMultimap.of("fromImage", - "base")); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testCreateImageFailure() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(404)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.createImage(CreateImageOptions.Builder.fromImage("base")); - assertRequestHasParameters(server.takeRequest(), "POST", "/images/create", ImmutableMultimap.of("fromImage", - "base")); - } catch (ResourceNotFoundException ex) { - // Expected exception - assertRequestHasParameters(server.takeRequest(), "POST", "/images/create", ImmutableMultimap.of("fromImage", - "base")); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testDeleteImage() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(204)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.deleteImage("1"); - assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/images/1"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testDeleteNotExistingImage() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(404)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - try { - remoteApi.deleteImage("1"); - } catch (ResourceNotFoundException ex) { - // Expected exception - assertRequestHasCommonFields(server.takeRequest(), "DELETE", "/images/1"); - } finally { - api.close(); - server.shutdown(); - } - } - - public void testBuildContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(200)); - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - String content = new String(payloadFromResource("/Dockerfile")); - File dockerFile = createDockerFile(content); - try { - remoteApi.build(dockerFile, BuildOptions.NONE); - assertRequestHasCommonFields(server.takeRequest(), "POST", "/build"); - } finally { - dockerFile.deleteOnExit(); - api.close(); - server.shutdown(); - } - } - - public void testBuildNonexistentContainer() throws Exception { - MockWebServer server = mockWebServer(); - server.enqueue(new MockResponse().setResponseCode(404)); - - DockerApi api = api(server.getUrl("/")); - RemoteApi remoteApi = api.getRemoteApi(); - - String content = new String(payloadFromResource("/Dockerfile")); - File dockerFile = createDockerFile(content); - try { - try { - remoteApi.build(dockerFile, BuildOptions.NONE); - fail("Build container should fail on 404"); - } catch (ResourceNotFoundException ex) { - // Expected exception - } - assertRequestHasCommonFields(server.takeRequest(), "POST", "/build"); - } finally { - dockerFile.deleteOnExit(); - api.close(); - server.shutdown(); - } - } - - private File createDockerFile(String content) { - File newTempDir = Files.createTempDir(); - File dockerFile = new File(newTempDir + "/dockerFile"); - try { - Files.write(content, dockerFile, Charsets.UTF_8); - } catch(IOException e) { - Assert.fail(); - } - return dockerFile; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java deleted file mode 100644 index 3394cde..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * work for additional information regarding copyright ownership. - * The ASF licenses file to You under the Apache License, Version 2.0 - * (the "License"); you may not use 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.compute.functions; - -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.testng.Assert.assertEquals; -import java.util.List; -import java.util.Map; - -import org.easymock.EasyMock; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.functions.GroupNamingConvention; -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.Port; -import org.jclouds.docker.domain.State; -import org.jclouds.providers.ProviderMetadata; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.inject.Guice; - -/** - * Unit tests for the {@link org.jclouds.docker.compute.functions.ContainerToNodeMetadata} class. - * - * @author Andrea Turli - */ -@Test(groups = "unit", testName = "ContainerToNodeMetadataTest") -public class ContainerToNodeMetadataTest { - private ContainerToNodeMetadata function; - - private Container container; - - @BeforeMethod - public void setup() { - Config config = Config.builder() - .hostname("6d35806c1bd2") - .domainName("") - .user("") - .memory(0) - .memorySwap(0) - .cpuShares(0) - .attachStdin(false) - .attachStdout(false) - .attachStderr(false) - .exposedPorts(ImmutableMap.of("22/tcp", ImmutableMap.of())) - .tty(false) - .openStdin(false) - .stdinOnce(false) - .env(null) - .cmd(ImmutableList.of("/usr/sbin/sshd", "-D")) - .imageId("jclouds/ubuntu") - .volumesFrom("") - .workingDir("") - .entrypoint(null) - .networkDisabled(false) - .onBuild(null) - .build(); - State state = State.builder() - .pid(3626) - .running(true) - .exitCode(0) - .startedAt("2014-03-24T20:28:37.537659054Z") - .finishedAt("0001-01-01T00:00:00Z") - .ghost(false) - .build(); - container = Container.builder() - .id("6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9") - .name("/hopeful_mclean") - .created("2014-03-22T07:16:45.784120972Z") - .path("/usr/sbin/sshd") - .args(new String[] {"-D"}) - .config(config) - .state(state) - .image("af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6") - .networkSettings(NetworkSettings.builder() - .ipAddress("172.17.0.2") - .ipPrefixLen(16) - .gateway("172.17.42.1") - .bridge("docker0") - .ports(ImmutableMap.<String, List<Map<String, String>>>of("22/tcp", - ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "0.0.0.0", "HostPort", - "49199")))) - .build()) - .resolvConfPath("/etc/resolv.conf") - .driver("aufs") - .execDriver("native-0.1") - .volumes(ImmutableMap.<String, String>of()) - .volumesRw(ImmutableMap.<String, Boolean>of()) - .command("") - .status("") - .hostConfig(HostConfig.builder().publishAllPorts(true).build()) - .ports(ImmutableList.<Port>of()) - .build(); - ProviderMetadata providerMetadata = EasyMock.createMock(ProviderMetadata.class); - expect(providerMetadata.getEndpoint()).andReturn("http://127.0.0.1:4243"); - replay(providerMetadata); - - GroupNamingConvention.Factory namingConvention = Guice.createInjector().getInstance(GroupNamingConvention.Factory.class); - - function = new ContainerToNodeMetadata(providerMetadata, toPortableStatus(), namingConvention); - } - - private Function<State, NodeMetadata.Status> toPortableStatus() { - StateToStatus function = EasyMock.createMock(StateToStatus.class); - expect(function.apply(anyObject(State.class))).andReturn(NodeMetadata.Status.RUNNING); - replay(function); - return function; - } - - public void testVirtualMachineToNodeMetadata() { - Container mockContainer = mockContainer(); - - NodeMetadata node = function.apply(mockContainer); - - verify(mockContainer); - - assertEquals(node.getId(), "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9"); - assertEquals(node.getGroup(), "hopeful_mclean"); - assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6"); - assertEquals(node.getLoginPort(), 49199); - assertEquals(node.getPrivateAddresses().size(), 1); - assertEquals(node.getPublicAddresses().size(), 1); - } - - @SuppressWarnings("unchecked") - private Container mockContainer() { - Container mockContainer = EasyMock.createMock(Container.class); - - expect(mockContainer.getId()).andReturn(container.getId()); - expect(mockContainer.getName()).andReturn(container.getName()); - expect(mockContainer.getConfig()).andReturn(container.getConfig()).anyTimes(); - expect(mockContainer.getNetworkSettings()).andReturn(container.getNetworkSettings()).anyTimes(); - expect(mockContainer.getState()).andReturn(container.getState()); - expect(mockContainer.getImage()).andReturn(container.getImage()); - replay(mockContainer); - - return mockContainer; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java deleted file mode 100644 index c46bdb1..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * work for additional information regarding copyright ownership. - * The ASF licenses file to You under the Apache License, Version 2.0 - * (the "License"); you may not use 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.compute.functions; - -import com.google.common.collect.ImmutableList; -import org.easymock.EasyMock; -import org.jclouds.compute.domain.Image; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.testng.Assert.assertEquals; - -/** - * Unit tests for the {@link org.jclouds.docker.compute.functions.ImageToImage} class. - * - * @author Andrea Turli - */ -@Test(groups = "unit", testName = "ImageToImageTest") -public class ImageToImageTest { - private ImageToImage function; - - private org.jclouds.docker.domain.Image image; - - @BeforeMethod - public void setup() { - image = org.jclouds.docker.domain.Image.builder() - .id("id") - .parent("parent") - .created("created") - .architecture("x86_64") - .repoTags(ImmutableList.of("repoTag1:version")) - .size(0l) - .build(); - function = new ImageToImage(); - } - - public void testImageToImage() { - org.jclouds.docker.domain.Image mockImage = mockImage(); - - Image image = function.apply(mockImage); - - verify(mockImage); - - assertEquals(mockImage.getId(), image.getId().toString()); - } - - @SuppressWarnings("unchecked") - private org.jclouds.docker.domain.Image mockImage() { - org.jclouds.docker.domain.Image mockImage = EasyMock.createMock(org.jclouds.docker.domain.Image.class); - - expect(mockImage.getId()).andReturn(image.getId()).anyTimes(); - expect(mockImage.getRepoTags()).andReturn(image.getRepoTags()).anyTimes(); - expect(mockImage.getArchitecture()).andReturn(image.getArchitecture()).anyTimes(); - replay(mockImage); - - return mockImage; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java deleted file mode 100644 index c1a8002..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/compute/functions/StateToStatusTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * work for additional information regarding copyright ownership. - * The ASF licenses file to You under the Apache License, Version 2.0 - * (the "License"); you may not use 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.compute.functions; - -import org.easymock.EasyMock; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.docker.domain.State; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.testng.Assert.assertEquals; - -/** - * Unit tests for the {@link StateToStatus} class. - * - * @author Andrea Turli - */ -@Test(groups = "unit", testName = "StateToStatusTest") -public class StateToStatusTest { - private StateToStatus function; - - @BeforeMethod - public void setup() { - function = new StateToStatus(); - } - - public void testStateRunningToStatusRunning() { - State mockState = mockStateRunning(); - - NodeMetadata.Status status = function.apply(mockState); - - verify(mockState); - - assertEquals(mockState.isRunning(), true); - assertEquals(status, NodeMetadata.Status.RUNNING); - } - - public void testStateNotRunningToStatusSuspended() { - State mockState = mockStateNotRunning(); - - NodeMetadata.Status status = function.apply(mockState); - - verify(mockState); - - assertEquals(mockState.isRunning(), false); - assertEquals(status, NodeMetadata.Status.SUSPENDED); - } - - private State mockStateRunning() { - State mockState = EasyMock.createMock(State.class); - - expect(mockState.isRunning()).andReturn(true).anyTimes(); - replay(mockState); - - return mockState; - } - - private State mockStateNotRunning() { - State mockState = EasyMock.createMock(State.class); - - expect(mockState.isRunning()).andReturn(false).anyTimes(); - replay(mockState); - - return mockState; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java deleted file mode 100644 index 23d387d..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/config/DockerParserModuleTest.java +++ /dev/null @@ -1,102 +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.config; - -import static org.jclouds.docker.config.DockerParserModule.ContainerTypeAdapter; -import static org.jclouds.docker.config.DockerParserModule.ImageTypeAdapter; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; - -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.domain.Image; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -/** - * Unit tests for the {@link org.jclouds.docker.config.DockerParserModule} class. - * - * @author Andrea Turli - */ -@Test(groups = "unit", testName = "DockerParserModuleTest") -public class DockerParserModuleTest { - - private Gson gson; - - @BeforeMethod - public void setup() { - gson = new GsonBuilder() - .registerTypeAdapter(Container.class, new ContainerTypeAdapter()) - .registerTypeAdapter(Image.class, new ImageTypeAdapter()) - .create(); - } - - @Test - public void testContainerID() { - Container container = gson.fromJson( - "{ \"ID\": \"1111111111111111111111111111111111111111111111111111111111111111\" }", - Container.class); - assertNotNull(container); - assertEquals(container.getId(), "1111111111111111111111111111111111111111111111111111111111111111"); - } - - - @Test - public void testContainerId() { - Container container = gson.fromJson( - "{ \"Id\": \"2222222222222222222222222222222222222222222222222222222222222222\" }", - Container.class); - assertNotNull(container); - assertEquals(container.getId(), "2222222222222222222222222222222222222222222222222222222222222222"); - } - - @Test - public void testContainerName() { - Container container = gson.fromJson( - "{ \"Name\": \"example\" }", - Container.class); - assertNotNull(container); - assertEquals(container.getName(), "example"); - } - - - @Test - public void testContainerNames() { - Container container = gson.fromJson("{ \"Names\": [\"/jclouds-b45\"] }", Container.class); - assertNotNull(container); - assertEquals(container.getName(), "/jclouds-b45"); - } - - @Test - public void testImageid() { - Image image = gson.fromJson( - "{ \"id\": \"3333333333333333333333333333333333333333333333333333333333333333\" }", Image.class); - assertNotNull(image); - assertEquals(image.getId(), "3333333333333333333333333333333333333333333333333333333333333333"); - } - - - @Test - public void testImageId() { - Image image = gson.fromJson( - "{ \"Id\": \"4444444444444444444444444444444444444444444444444444444444444444\" }", Image.class); - assertNotNull(image); - assertEquals(image.getId(), "4444444444444444444444444444444444444444444444444444444444444444"); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java deleted file mode 100644 index c0fe074..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/java/org/jclouds/docker/internal/BaseDockerMockTest.java +++ /dev/null @@ -1,119 +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.internal; - -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; -import org.jclouds.ContextBuilder; -import org.jclouds.concurrent.config.ExecutorServiceModule; -import org.jclouds.docker.DockerApi; - -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import java.io.IOException; -import java.net.URL; -import java.util.Properties; -import java.util.Set; - -import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor; -import static org.jclouds.http.utils.Queries.encodeQueryLine; -import static org.jclouds.util.Strings2.toStringAndClose; -import static org.testng.Assert.assertEquals; - -/** - * Base class for all Docker mock tests. - * - * @author Andrea Turli - */ -public class BaseDockerMockTest { - private final Set<Module> modules = ImmutableSet.<Module> of(new ExecutorServiceModule(sameThreadExecutor(), - sameThreadExecutor())); - - protected String provider; - - public BaseDockerMockTest() { - provider = "docker"; - } - - 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; - } - - public byte[] payloadFromResource(String resource) { - try { - return toStringAndClose(getClass().getResourceAsStream(resource)).getBytes(Charsets.UTF_8); - } catch (IOException e) { - throw Throwables.propagate(e); - } - } - - 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); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/Dockerfile ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/Dockerfile b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/Dockerfile deleted file mode 100644 index 1318715..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/Dockerfile +++ /dev/null @@ -1,29 +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. -# - -FROM centos:6.4 -MAINTAINER Andrea Turli <[email protected]> - -# RUN yum -y groupinstall 'Development Tools' -RUN yum -y install openssh-server openssh-clients - -RUN chkconfig sshd on -RUN service sshd start -RUN echo 'root:password' | chpasswd - -EXPOSE 22 -CMD ["/usr/sbin/sshd", "-D"] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container-creation.json ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container-creation.json b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container-creation.json deleted file mode 100644 index 3e34e0b..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container-creation.json +++ /dev/null @@ -1 +0,0 @@ -{"Id":"c6c74153ae4b1d1633d68890a68d89c40aa5e284a1ea016cbc6ef0e634ee37b2","Warnings":null} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container.json ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container.json b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container.json deleted file mode 100644 index acb4a21..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/container.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "ID": "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9", - "Created": "2014-03-22T07:16:45.784120972Z", - "Path": "/usr/sbin/sshd", - "Args": [ - "-D" - ], - "Config": { - "Hostname": "6d35806c1bd2", - "Domainname": "", - "User": "", - "Memory": 0, - "MemorySwap": 0, - "CpuShares": 0, - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "PortSpecs": null, - "ExposedPorts": { - "22/tcp": {} - }, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": null, - "Cmd": [ - "/usr/sbin/sshd", - "-D" - ], - "Dns": null, - "Image": "jclouds/ubuntu", - "Volumes": null, - "VolumesFrom": "", - "WorkingDir": "", - "Entrypoint": null, - "NetworkDisabled": false, - "OnBuild": null - }, - "State": { - "Running": true, - "Pid": 7051, - "ExitCode": 0, - "StartedAt": "2014-03-22T07:16:45.845347434Z", - "FinishedAt": "0001-01-01T00:00:00Z", - "Ghost": false - }, - "Image": "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6", - "NetworkSettings": { - "IPAddress": "172.17.0.2", - "IPPrefixLen": 16, - "Gateway": "172.17.42.1", - "Bridge": "docker0", - "PortMapping": null, - "Ports": { - "22/tcp": [ - { - "HostIp": "0.0.0.0", - "HostPort": "49231" - } - ] - } - }, - "ResolvConfPath": "/etc/resolv.conf", - "HostnamePath": "/mnt/sda1/var/lib/docker/containers/6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9/hostname", - "HostsPath": "/mnt/sda1/var/lib/docker/containers/6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9/hosts", - "Name": "/hopeful_mclean", - "Driver": "aufs", - "ExecDriver": "native-0.1", - "Volumes": {}, - "VolumesRW": {}, - "HostConfig": { - "Binds": null, - "ContainerIDFile": "", - "LxcConf": [], - "Privileged": false, - "PortBindings": { - "22/tcp": [ - { - "HostIp": "0.0.0.0", - "HostPort": "49231" - } - ] - }, - "Links": null, - "PublishAllPorts": false - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/containers.json ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/containers.json b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/containers.json deleted file mode 100644 index 8f789b7..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/containers.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "Command": "/usr/sbin/sshd -D", - "Created": 1395472605, - "Id": "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9", - "Image": "jclouds/ubuntu:latest", - "Names": [ - "/hopeful_mclean" - ], - "Ports": [ - { - "IP": "0.0.0.0", - "PrivatePort": 22, - "PublicPort": 49231, - "Type": "tcp" - } - ], - "Status": "Up 55 seconds" - } -] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/logback.xml ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/logback.xml b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/logback.xml deleted file mode 100644 index 94f5938..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/test/resources/logback.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.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. - ---> -<configuration> - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>- %msg%n</pattern> - </encoder> - </appender> - <root level="info"> - <appender-ref ref="STDOUT"/> - </root> - <logger name="jclouds.compute" level="debug"/> - <logger name="net.schmizz" level="warn"/> - <logger name="jclouds.wire" level="debug"/> - <logger name="jclouds.headers" level="debug"/> - <logger name="jclouds.ssh" level="debug"/> -</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/README.md ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/README.md b/dependencies/jclouds/apis/docker/1.8.0-stratos/README.md new file mode 100644 index 0000000..3ce8cf0 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/README.md @@ -0,0 +1,52 @@ +# Docker as a local cloud provider +jclouds-docker is a local cloud provider modelled on [docker](http://www.docker.io). Similar to other jclouds supported +providers, it supports the same portable abstractions offered by jclouds. + +##Setup + +Please follow these steps to configure your workstation for jclouds-docker: + +- install the latest Docker release (please visit http://www.docker.io/gettingstarted/) + +If you are on OS X, please consider [boot2docker](http://docs.docker.io/en/latest/installation/mac/) as simplified +way to install docker locally. + +#How it works + + + --------------- ------------- + | Image(s) | | Node(s) | + --------------- ------------- + --------- docker remote api ---------------------------------------- + | jclouds | ---------------------------> | DOCKER_HOST | + --------- ---------------------------------------- + +##Components + +- jclouds \- acts as a java client to access to docker features +- DOCKER_HOST \- hosts Docker API, NB: jclouds-docker assumes that the latest Docker is installed +- Image \- it is a docker image that can be started. +- Node \- is a docker container + +## Assumptions + +- jclouds-docker assumes that the images specified using the template are ssh'able. +- jclouds-docker will mount ${user.home} to /root of the container + +-------------- + +#Notes: +- jclouds-docker is still at alpha stage please report any issues you find at [jclouds issues](https://github.com/jclouds/jclouds/issues?state=open) +- jclouds-docker has been tested on Mac OSX, it might work on Linux iff vbox is running and set up correctly. However, it will not currently run on Windows. + +-------------- + +#Troubleshooting +As jclouds docker support is quite new, issues may occasionally arise. Please follow these steps to get things going again: + +1. Remove all containers + + `$ docker ps -a -q | xargs docker stop | xargs docker rm` +2. remove all the images + + `$ docker images -q | xargs docker rmi` http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/pom.xml ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/pom.xml b/dependencies/jclouds/apis/docker/1.8.0-stratos/pom.xml new file mode 100644 index 0000000..d2a3cca --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/pom.xml @@ -0,0 +1,145 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>jclouds-labs</artifactId> + <version>1.8.0</version> + </parent> + + <!-- TODO: when out of labs, switch to org.jclouds.provider --> + <groupId>org.apache.stratos</groupId> + <artifactId>docker</artifactId> + <name>jclouds docker API</name> + <version>1.8.0-stratos</version> + <description>ComputeService binding to the Docker API</description> + <packaging>bundle</packaging> + + <properties> + <jclouds.version>1.8.0</jclouds.version> + <test.docker.endpoint>https://localhost:4243</test.docker.endpoint> + <test.docker.api-version>1.10</test.docker.api-version> + <test.docker.identity>FIXME</test.docker.identity> + <test.docker.credential>FIXME</test.docker.credential> + <jclouds.osgi.export>org.jclouds.docker*;version="${project.version}"</jclouds.osgi.export> + <jclouds.osgi.import> + org.jclouds.compute.internal;version="${jclouds.version}", + org.jclouds.rest.internal;version="${jclouds.version}", + org.jclouds*;version="${jclouds.version}", + * + </jclouds.osgi.import> + </properties> + + <dependencies> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-core</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-compute</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-compress</artifactId> + <version>1.5</version> + </dependency> + + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-sshj</artifactId> + <version>${jclouds.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-core</artifactId> + <version>${jclouds.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-compute</artifactId> + <version>${jclouds.version}</version> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-slf4j</artifactId> + <version>${jclouds.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.squareup.okhttp</groupId> + <artifactId>mockwebserver</artifactId> + <scope>test</scope> + <exclusions> + <!-- Already provided by jclouds-sshj --> + <exclusion> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk15on</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> + + <profiles> + <profile> + <id>live</id> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <executions> + <execution> + <id>integration</id> + <phase>integration-test</phase> + <goals> + <goal>test</goal> + </goals> + <configuration> + <systemPropertyVariables> + <test.docker.endpoint>${test.docker.endpoint}</test.docker.endpoint> + <test.docker.api-version>${test.docker.api-version}</test.docker.api-version> + <test.docker.credential>${test.docker.identity}</test.docker.credential> + <test.docker.credential>${test.docker.credential}</test.docker.credential> + </systemPropertyVariables> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> + +</project> http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApi.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApi.java new file mode 100644 index 0000000..54bf5c9 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApi.java @@ -0,0 +1,37 @@ +/* + * 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; + +import org.jclouds.docker.features.RemoteApi; +import org.jclouds.rest.annotations.Delegate; + +import java.io.Closeable; + +/** + * Provides synchronous access to Docker Remote API. + * + * @see <a href="https://docs.docker.com/reference/api/docker_remote_api/"></a> + */ +public interface DockerApi extends Closeable { + + /** + * Provides synchronous access to Docker Remote API features. + */ + @Delegate + RemoteApi getRemoteApi(); + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java new file mode 100644 index 0000000..b281eb7 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java @@ -0,0 +1,98 @@ +/* + * 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; + +import com.google.common.collect.ImmutableSet; +import com.google.inject.Module; +import org.jclouds.Constants; +import org.jclouds.apis.ApiMetadata; +import org.jclouds.compute.ComputeServiceContext; +import org.jclouds.compute.config.ComputeServiceProperties; +import org.jclouds.docker.compute.config.DockerComputeServiceContextModule; +import org.jclouds.docker.config.DockerHttpApiModule; +import org.jclouds.docker.config.DockerParserModule; +import org.jclouds.rest.internal.BaseHttpApiMetadata; + +import java.net.URI; +import java.util.Properties; + +import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE; +import static org.jclouds.reflect.Reflection2.typeToken; + +/** + * Implementation of {@link BaseHttpApiMetadata} for the Docker API + */ +public class DockerApiMetadata extends BaseHttpApiMetadata<DockerApi> { + + @Override + public Builder toBuilder() { + return new Builder().fromApiMetadata(this); + } + + public DockerApiMetadata() { + this(new Builder()); + } + + protected DockerApiMetadata(Builder builder) { + super(builder); + } + + public static Properties defaultProperties() { + Properties properties = BaseHttpApiMetadata.defaultProperties(); + properties.setProperty(Constants.PROPERTY_MAX_RETRIES, "15"); + properties.setProperty("jclouds.ssh.retry-auth", "true"); + properties.setProperty(Constants.PROPERTY_CONNECTION_TIMEOUT, "1200000"); // 15 minutes + properties.setProperty(ComputeServiceProperties.IMAGE_LOGIN_USER, "root:password"); + properties.setProperty(TEMPLATE, "osFamily=UBUNTU,os64Bit=true,osVersionMatches=1[012].[01][04]"); + return properties; + } + + public static class Builder extends BaseHttpApiMetadata.Builder<DockerApi, Builder> { + + protected Builder() { + super(DockerApi.class); + id("docker") + .name("Docker API") + .identityName("user") + .credentialName("password") + .documentation(URI.create("https://docs.docker.com/reference/api/docker_remote_api/")) + .version("1.12") + .defaultEndpoint("http://127.0.0.1:2375") + .defaultProperties(DockerApiMetadata.defaultProperties()) + .view(typeToken(ComputeServiceContext.class)) + .defaultModules(ImmutableSet.<Class<? extends Module>>of( + DockerHttpApiModule.class, + DockerParserModule.class, + DockerComputeServiceContextModule.class)); + } + + @Override + public DockerApiMetadata build() { + return new DockerApiMetadata(this); + } + + @Override + protected Builder self() { + return this; + } + + @Override + public Builder fromApiMetadata(ApiMetadata in) { + return this; + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java new file mode 100644 index 0000000..855a2e5 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java @@ -0,0 +1,68 @@ +/* + * 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.binders; + +import com.google.common.base.Throwables; +import com.google.common.io.Files; +import org.jclouds.compute.reference.ComputeServiceConstants; +import org.jclouds.docker.features.internal.Archives; +import org.jclouds.http.HttpRequest; +import org.jclouds.io.Payload; +import org.jclouds.io.Payloads; +import org.jclouds.logging.Logger; +import org.jclouds.rest.Binder; + +import javax.annotation.Resource; +import javax.inject.Named; +import javax.inject.Singleton; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +@Singleton +public class BindInputStreamToRequest implements Binder { + + @Resource + @Named(ComputeServiceConstants.COMPUTE_LOGGER) + protected Logger logger = Logger.NULL; + + @Override + public <R extends HttpRequest> R bindToRequest(R request, Object input) { + checkArgument(checkNotNull(input, "input") instanceof File, "this binder is only valid for File!"); + checkNotNull(request, "request"); + + File dockerFile = (File) input; + File tmpDir = Files.createTempDir(); + final File targetFile = new File(tmpDir + File.separator + "Dockerfile"); + try { + Files.copy(dockerFile, targetFile); + File archive = Archives.tar(tmpDir, File.createTempFile("archive", ".tar")); + FileInputStream data = new FileInputStream(archive); + Payload payload = Payloads.newInputStreamPayload(data); + payload.getContentMetadata().setContentLength(data.getChannel().size()); + payload.getContentMetadata().setContentType("application/tar"); + request.setPayload(payload); + } catch (IOException e) { + logger.error(e, "Couldn't create a tarball for %s", targetFile); + throw Throwables.propagate(e); + } + return request; + } +}
