From da1c7729ae9b74bff5aa25e7e2b1949187024069 Mon Sep 17 00:00:00 2001 From: Frank Scholten Date: Wed, 9 Sep 2015 17:16:52 +0200 Subject: [PATCH 1/2] Added MesosCluster builder --- .../java/org/apache/mesos/mini/MesosCluster.java | 12 ++++++++---- .../apache/mesos/mini/mesos/MesosClusterConfig.java | 9 ++++++--- .../org/apache/mesos/mini/ImageInjectionTest.java | 9 ++++----- .../java/org/apache/mesos/mini/InnerDockerTest.java | 7 +++---- .../java/org/apache/mesos/mini/MesosClusterTest.java | 10 ++++------ 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/apache/mesos/mini/MesosCluster.java b/src/main/java/org/apache/mesos/mini/MesosCluster.java index 7033955a..8a1d2070 100644 --- a/src/main/java/org/apache/mesos/mini/MesosCluster.java +++ b/src/main/java/org/apache/mesos/mini/MesosCluster.java @@ -19,10 +19,6 @@ import org.json.JSONObject; import org.junit.rules.ExternalResource; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -49,6 +45,10 @@ public MesosCluster(MesosClusterConfig config) { this.config = config; } + public static MesosClusterConfig.Builder builder() { + return MesosClusterConfig.builder(); + } + /** * Starts the Mesos cluster and its containers */ @@ -171,4 +171,8 @@ public List getContainers() { public DockerClient getInnerDockerClient() { return this.mesosContainer.getInnerDockerClient(); } + + public MesosClusterConfig getConfig() { + return config; + } } diff --git a/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java b/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java index 0e01981d..6f415d9e 100644 --- a/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java +++ b/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java @@ -4,6 +4,7 @@ import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; import org.apache.commons.lang.StringUtils; +import org.apache.mesos.mini.MesosCluster; public class MesosClusterConfig { @@ -76,7 +77,7 @@ public Builder defaultDockerClient() { return this; } - public MesosClusterConfig build() { + public MesosCluster build() { if (numberOfSlaves <= 0) { throw new IllegalStateException("At least one slave is required to run a mesos cluster"); @@ -93,9 +94,11 @@ public MesosClusterConfig build() { } } - return new MesosClusterConfig(dockerClient, numberOfSlaves, slaveResources, mesosMasterPort, privateRegistryPort); + return new MesosCluster(new MesosClusterConfig(dockerClient, numberOfSlaves, slaveResources, mesosMasterPort, privateRegistryPort)); } - } + public int getNumberOfSlaves() { + return numberOfSlaves; + } } diff --git a/src/test/java/org/apache/mesos/mini/ImageInjectionTest.java b/src/test/java/org/apache/mesos/mini/ImageInjectionTest.java index 33603509..36525a84 100644 --- a/src/test/java/org/apache/mesos/mini/ImageInjectionTest.java +++ b/src/test/java/org/apache/mesos/mini/ImageInjectionTest.java @@ -5,18 +5,17 @@ import org.junit.Test; public class ImageInjectionTest { - private static final MesosClusterConfig config = MesosClusterConfig.builder() + + @ClassRule + public static final MesosCluster cluster = MesosCluster.builder() .numberOfSlaves(3) .privateRegistryPort(16000) // Currently you have to choose an available port by yourself .slaveResources(new String[]{"ports(*):[9200-9200,9300-9300]", "ports(*):[9201-9201,9301-9301]", "ports(*):[9202-9202,9302-9302]"}) .build(); - @ClassRule - public static MesosCluster cluster = new MesosCluster(config); - @Test public void testInjectImage() { - HelloWorldContainer container = new HelloWorldContainer(config.dockerClient); + HelloWorldContainer container = new HelloWorldContainer(cluster.getConfig().dockerClient); container.pullImage(); cluster.injectImage("tutum/hello-world"); diff --git a/src/test/java/org/apache/mesos/mini/InnerDockerTest.java b/src/test/java/org/apache/mesos/mini/InnerDockerTest.java index 9e4d13da..a1f9a2e4 100644 --- a/src/test/java/org/apache/mesos/mini/InnerDockerTest.java +++ b/src/test/java/org/apache/mesos/mini/InnerDockerTest.java @@ -5,7 +5,6 @@ import com.github.dockerjava.api.model.Container; import org.apache.mesos.mini.container.AbstractContainer; import org.apache.mesos.mini.docker.PrivateDockerRegistry; -import org.apache.mesos.mini.mesos.MesosClusterConfig; import org.apache.mesos.mini.mesos.MesosContainer; import org.junit.Test; @@ -21,12 +20,12 @@ public class InnerDockerTest { @Test public void shouldStart() throws InterruptedException { - MesosClusterConfig config = MesosClusterConfig.builder().defaultDockerClient() + MesosCluster cluster = MesosCluster.builder().defaultDockerClient() .slaveResources(new String[]{"ports(*):[9200-9200,9300-9300]", "ports(*):[9201-9201,9301-9301]", "ports(*):[9202-9202,9302-9302]"}) .build(); - PrivateDockerRegistry registry = new PrivateDockerRegistry(config.dockerClient, config); + PrivateDockerRegistry registry = new PrivateDockerRegistry(cluster.getConfig().dockerClient, cluster.getConfig()); registry.start(); - MesosContainer mesosContainer = new MesosContainer(config.dockerClient, config, registry.getContainerId()); + MesosContainer mesosContainer = new MesosContainer(cluster.getConfig().dockerClient, cluster.getConfig(), registry.getContainerId()); mesosContainer.start(); HelloWorldNoRemoveContainer helloWorldContainer = new HelloWorldNoRemoveContainer(mesosContainer.getInnerDockerClient()); diff --git a/src/test/java/org/apache/mesos/mini/MesosClusterTest.java b/src/test/java/org/apache/mesos/mini/MesosClusterTest.java index 74a74875..ea809528 100644 --- a/src/test/java/org/apache/mesos/mini/MesosClusterTest.java +++ b/src/test/java/org/apache/mesos/mini/MesosClusterTest.java @@ -12,15 +12,13 @@ public class MesosClusterTest { - private static final MesosClusterConfig config = MesosClusterConfig.builder() + @ClassRule + public static final MesosCluster cluster = MesosClusterConfig.builder() .numberOfSlaves(3) .privateRegistryPort(16000) // Currently you have to choose an available port by yourself .slaveResources(new String[]{"ports(*):[9200-9200,9300-9300]", "ports(*):[9201-9201,9301-9301]", "ports(*):[9202-9202,9302-9302]"}) .build(); - @ClassRule - public static MesosCluster cluster = new MesosCluster(config); - @Test public void mesosClusterStateInfoJSONMatchesSchema() throws UnirestException, JsonParseException, JsonMappingException { cluster.getStateInfo(); @@ -45,9 +43,9 @@ public void mesosClusterCanBeStarted2() throws Exception { @Test public void testPullAndStartContainer() throws UnirestException { - HelloWorldContainer container = new HelloWorldContainer(config.dockerClient); + HelloWorldContainer container = new HelloWorldContainer(cluster.getConfig().dockerClient); String containerId = cluster.addAndStartContainer(container); - String ipAddress = config.dockerClient.inspectContainerCmd(containerId).exec().getNetworkSettings().getIpAddress(); + String ipAddress = cluster.getConfig().dockerClient.inspectContainerCmd(containerId).exec().getNetworkSettings().getIpAddress(); String url = "http://" + ipAddress + ":80"; Assert.assertEquals(200, Unirest.get(url).asString().getStatus()); } From 051f7b64500eda41372464c6f760a937993de7fd Mon Sep 17 00:00:00 2001 From: Frank Scholten Date: Wed, 9 Sep 2015 17:20:44 +0200 Subject: [PATCH 2/2] Updated CHANGELOG --- CHANGELOG.md | 8 ++++---- .../org/apache/mesos/mini/mesos/MesosClusterConfig.java | 2 +- .../java/org/apache/mesos/mini/mesos/MesosContainer.java | 3 --- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5aa77d5..e96c8569 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [0.2.6] - [6 September 2015] +## [0.2.8] - [9 September 2015] ### Added -- [Print container logs when it fails to start](https://github.com/ContainerSolutions/mini-mesos/pull/54) +- [Allow passing extra environment variables to supervised programs](https://github.com/ContainerSolutions/mini-mesos/pull/61) -## [0.2.8] - [9 September 2015] +## [0.2.6] - [6 September 2015] ### Added -- [Allow passing extra environment variables to supervised programs](https://github.com/ContainerSolutions/mini-mesos/pull/61) +- [Print container logs when it fails to start](https://github.com/ContainerSolutions/mini-mesos/pull/54) diff --git a/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java b/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java index 23f0186b..7da0085c 100644 --- a/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java +++ b/src/main/java/org/apache/mesos/mini/mesos/MesosClusterConfig.java @@ -112,7 +112,7 @@ public MesosCluster build() { } } - return new MesosCluster(new MesosClusterConfig(dockerClient, numberOfSlaves, slaveResources, mesosMasterPort, privateRegistryPort)); + return new MesosCluster(new MesosClusterConfig(dockerClient, numberOfSlaves, slaveResources, mesosMasterPort, privateRegistryPort, extraEnvironmentVariables)); } } diff --git a/src/main/java/org/apache/mesos/mini/mesos/MesosContainer.java b/src/main/java/org/apache/mesos/mini/mesos/MesosContainer.java index 18fa31e1..2aef8238 100644 --- a/src/main/java/org/apache/mesos/mini/mesos/MesosContainer.java +++ b/src/main/java/org/apache/mesos/mini/mesos/MesosContainer.java @@ -11,13 +11,10 @@ import java.io.IOException; import java.net.Socket; import java.security.SecureRandom; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.TreeMap; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import static com.jayway.awaitility.Awaitility.await;