You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/10/04 17:03:42 UTC
[36/38] incubator-geode git commit: Able to execute gfsh commands
Able to execute gfsh commands
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/4910c626
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/4910c626
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/4910c626
Branch: refs/heads/feature/e2e-testing
Commit: 4910c62604cf12b48556e532b7436aeb914fdd5b
Parents: a2ce01d
Author: Jens Deppe <jd...@pivotal.io>
Authored: Fri Sep 30 14:42:40 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Fri Sep 30 14:42:40 2016 -0700
----------------------------------------------------------------------
.../test/java/org/apache/geode/DockerTest.java | 45 -----
.../apache/geode/container/DockerCluster.java | 132 --------------
.../java/org/apache/geode/e2e/DockerTest.java | 43 +++++
.../geode/e2e/container/DockerCluster.java | 182 +++++++++++++++++++
4 files changed, 225 insertions(+), 177 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4910c626/geode-core/src/test/java/org/apache/geode/DockerTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/DockerTest.java b/geode-core/src/test/java/org/apache/geode/DockerTest.java
deleted file mode 100644
index b5bc050..0000000
--- a/geode-core/src/test/java/org/apache/geode/DockerTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.geode;
-
-import static org.junit.Assert.*;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import org.apache.geode.container.DockerCluster;
-
-public class DockerTest {
-
- private DockerCluster cluster;
-
- @Before
- public void setup() throws Exception {
- cluster = new DockerCluster("testy", 2);
- }
-
- @After
- public void teardown() throws Exception {
- cluster.stop();
- }
-
-// @Test
- public void sanity() throws Exception {
- cluster.start();
- assertNotNull("Locator address is null", cluster.getLocatorAddress());
- }
-
-// @Test
- public void testInvalidGfshCommand() throws Exception {
- String id = cluster.startContainer(0);
- int r = cluster.execCommand(id, new String[] { "/tmp/work/bin/gfsh", "startx" });
- assertEquals(1, r);
- }
-
- @Test
- public void testCreateRegion() throws Exception {
- cluster.start();
- cluster.gfshCommand("create region --name=FOO --type=REPLICATE");
- cluster.gfshCommand("list regions");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4910c626/geode-core/src/test/java/org/apache/geode/container/DockerCluster.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/container/DockerCluster.java b/geode-core/src/test/java/org/apache/geode/container/DockerCluster.java
deleted file mode 100644
index fea2e1a..0000000
--- a/geode-core/src/test/java/org/apache/geode/container/DockerCluster.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.apache.geode.container;
-
-import static com.google.common.base.Charsets.*;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import com.spotify.docker.client.DefaultDockerClient;
-import com.spotify.docker.client.DockerClient;
-import com.spotify.docker.client.LogStream;
-import com.spotify.docker.client.exceptions.DockerException;
-import com.spotify.docker.client.messages.ContainerConfig;
-import com.spotify.docker.client.messages.ContainerCreation;
-import com.spotify.docker.client.messages.HostConfig;
-
-public class DockerCluster {
-
- private DockerClient docker;
- private int locatorCount;
- private int serverCount;
- private String name;
- private List<String> nodeIds;
- private String locatorAddress;
-
- public DockerCluster(String name, int serverCount) {
- this(name, 1, serverCount);
- }
-
- public DockerCluster(String name, int locatorCount, int serverCount) {
- docker = DefaultDockerClient.builder().
- uri("unix:///var/run/docker.sock").build();
-
- this.name = name;
- this.locatorCount = locatorCount;
- this.serverCount = serverCount;
- this.nodeIds = new ArrayList<>();
- }
-
- public void start() throws Exception {
- startLocators();
- startServers();
- }
-
- public String startContainer(int index) throws DockerException, InterruptedException {
- String geodeHome = System.getenv("GEODE_HOME");
- String vol = String.format("%s:/tmp/work", geodeHome);
-
- HostConfig hostConfig = HostConfig.
- builder().
- appendBinds(vol).
- build();
-
- ContainerConfig config = ContainerConfig.builder().
- image("gemfire/ubuntu-gradle").
- openStdin(true).
- hostname(String.format("%s-%d", name, index)).
- hostConfig(hostConfig).
- workingDir("/tmp").
- build();
-
- ContainerCreation creation = docker.createContainer(config);
- String id = creation.id();
- docker.startContainer(id);
- docker.inspectContainer(id);
-
- nodeIds.add(id);
-
- return id;
- }
-
- public void startLocators() throws DockerException, InterruptedException {
- for (int i = 0; i < locatorCount; i++) {
- String[] command = {
- "/tmp/work/bin/gfsh",
- "start locator",
- String.format("--name=%s-locator-%d", name, i)
- };
-
- String id = startContainer(i);
- execCommand(id, command);
- }
-
- locatorAddress = String.format("%s[10334]", docker.inspectContainer(nodeIds.get(0)).networkSettings().ipAddress());
- }
-
- public void startServers() throws DockerException, InterruptedException {
- for (int i = 0; i < serverCount+1; i++) {
- String[] command = {
- "/tmp/work/bin/gfsh",
- "start server",
- String.format("--name=%s-server-%d", name, i),
- String.format("--locators=%s", locatorAddress)
- };
-
- String id = startContainer(i);
- execCommand(id, command);
- }
- }
-
- public int gfshCommand(String command) throws DockerException, InterruptedException {
- String locatorId = nodeIds.get(0);
- List<String> gfshCmd = Arrays.asList(command);
- gfshCmd.add(0, "/tmp/work/bin/gfsh");
- return execCommand(locatorId, gfshCmd.toArray(new String[]{}));
- }
-
- public int execCommand(String id, String... command) throws DockerException, InterruptedException {
- String execId = docker.execCreate(id, command, DockerClient.ExecCreateParam.attachStdout(), DockerClient.ExecCreateParam
- .attachStderr());
- LogStream output = docker.execStart(execId);
-
- while (output.hasNext()) {
- System.out.print(UTF_8.decode(output.next().content()));
- System.out.flush();
- }
-
- return docker.execInspect(execId).exitCode();
- }
-
- public void stop() throws DockerException, InterruptedException {
- for (String id : nodeIds) {
- docker.killContainer(id);
- docker.removeContainer(id);
- }
- docker.close();
- }
-
- public String getLocatorAddress() {
- return locatorAddress;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4910c626/geode-core/src/test/java/org/apache/geode/e2e/DockerTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/e2e/DockerTest.java b/geode-core/src/test/java/org/apache/geode/e2e/DockerTest.java
new file mode 100644
index 0000000..e8e04f0
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/e2e/DockerTest.java
@@ -0,0 +1,43 @@
+package org.apache.geode.e2e;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.geode.e2e.container.DockerCluster;
+
+public class DockerTest {
+
+ private DockerCluster cluster;
+
+ @Before
+ public void setup() throws Exception {
+ cluster = new DockerCluster("testy", 1);
+ }
+
+ @After
+ public void teardown() throws Exception {
+ cluster.stop();
+ }
+
+ @Test
+ public void sanity() throws Exception {
+ cluster.start();
+ assertNotNull("Locator address is null", cluster.getLocatorAddress());
+ }
+
+ @Test
+ public void testInvalidGfshCommand() throws Exception {
+ String id = cluster.startContainer(0);
+ int r = cluster.execCommand(id, false, null, new String[] { "/tmp/work/bin/gfsh", "startx" });
+ assertEquals(1, r);
+ }
+
+ @Test
+ public void testCreateRegion() throws Exception {
+ cluster.start();
+ cluster.gfshCommand("create region --name=FOO --type=REPLICATE", null);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4910c626/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java b/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
new file mode 100644
index 0000000..3be2feb
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
@@ -0,0 +1,182 @@
+package org.apache.geode.e2e.container;
+
+import static com.google.common.base.Charsets.*;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.spotify.docker.client.DefaultDockerClient;
+import com.spotify.docker.client.DockerClient;
+import com.spotify.docker.client.LogStream;
+import com.spotify.docker.client.exceptions.DockerException;
+import com.spotify.docker.client.messages.ContainerConfig;
+import com.spotify.docker.client.messages.ContainerCreation;
+import com.spotify.docker.client.messages.HostConfig;
+
+public class DockerCluster {
+
+ private DockerClient docker;
+ private int locatorCount;
+ private int serverCount;
+ private String name;
+ private List<String> nodeIds;
+ private String locatorAddress;
+
+ public DockerCluster(String name, int serverCount) {
+ this(name, 1, serverCount);
+ }
+
+ public DockerCluster(String name, int locatorCount, int serverCount) {
+ docker = DefaultDockerClient.builder().
+ uri("unix:///var/run/docker.sock").build();
+
+ this.name = name;
+ this.locatorCount = locatorCount;
+ this.serverCount = serverCount;
+ this.nodeIds = new ArrayList<>();
+ }
+
+ public void start() throws Exception {
+ startLocators();
+ startServers();
+ }
+
+ public String startContainer(int index) throws DockerException, InterruptedException {
+ String geodeHome = System.getenv("GEODE_HOME");
+ String vol = String.format("%s:/tmp/work", geodeHome);
+
+ HostConfig hostConfig = HostConfig.
+ builder().
+ appendBinds(vol).
+ build();
+
+ ContainerConfig config = ContainerConfig.builder().
+ image("gemfire/ubuntu-gradle").
+ openStdin(true).
+ hostname(String.format("%s-%d", name, index)).
+ hostConfig(hostConfig).
+ workingDir("/tmp").
+ build();
+
+ ContainerCreation creation = docker.createContainer(config);
+ String id = creation.id();
+ docker.startContainer(id);
+ docker.inspectContainer(id);
+
+ nodeIds.add(id);
+
+ return id;
+ }
+
+ public void startLocators() throws DockerException, InterruptedException {
+ for (int i = 0; i < locatorCount; i++) {
+ String[] command = {
+ "/tmp/work/bin/gfsh",
+ "start locator",
+ String.format("--name=%s-locator-%d", name, i)
+ };
+
+ String id = startContainer(i);
+ execCommand(id, true, null, command);
+
+ while (gfshCommand(null, null) != 0) {
+ Thread.sleep(250);
+ }
+ }
+
+ locatorAddress = String.format("%s[10334]", docker.inspectContainer(nodeIds.get(0)).networkSettings().ipAddress());
+ }
+
+ public void startServers() throws DockerException, InterruptedException {
+ for (int i = 0; i < serverCount+1; i++) {
+ String[] command = {
+ "/tmp/work/bin/gfsh",
+ "start server",
+ String.format("--name=%s-server-%d", name, i),
+ String.format("--locators=%s", locatorAddress)
+ };
+
+ String id = startContainer(i);
+ execCommand(id, true, null, command);
+ }
+
+ int runningServers = 0;
+ while (runningServers != serverCount) {
+ Thread.sleep(200);
+
+ List<String> cmdOutput = new ArrayList<>();
+
+ ResultCallback cb = line -> cmdOutput.add(line);
+ gfshCommand("list members", cb);
+
+ runningServers = 0;
+ for (int i = 0; i < serverCount; i++) {
+ String server = String.format("%s-server-%d", name, i);
+ for (String s : cmdOutput) {
+ if (s.startsWith(server)) {
+ runningServers++;
+ }
+ }
+ }
+ }
+ }
+
+ public int gfshCommand(String command, ResultCallback callback) throws DockerException, InterruptedException {
+ String locatorId = nodeIds.get(0);
+ List<String> gfshCmd = new ArrayList<>();
+ Collections.addAll(gfshCmd, "/tmp/work/bin/gfsh", "-e", "connect --jmx-locator=localhost[1099]");
+
+ if (command != null) {
+ Collections.addAll(gfshCmd, "-e", command);
+ }
+
+ return execCommand(locatorId, false, callback, gfshCmd.toArray(new String[]{}));
+ }
+
+ public int execCommand(String id, boolean startDetached,
+ ResultCallback callback, String... command) throws DockerException, InterruptedException {
+ List<DockerClient.ExecCreateParam> execParams = new ArrayList<>();
+ execParams.add(DockerClient.ExecCreateParam.attachStdout());
+ execParams.add(DockerClient.ExecCreateParam.attachStderr());
+ execParams.add(DockerClient.ExecCreateParam.detach(startDetached));
+
+ String execId = docker.execCreate(id, command, execParams.toArray(new DockerClient.ExecCreateParam[]{}));
+ LogStream output = docker.execStart(execId);
+
+ if (startDetached) {
+ return 0;
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ while (output.hasNext()) {
+ String multiLine = UTF_8.decode(output.next().content()).toString();
+ buffer.append(multiLine);
+
+ if (buffer.indexOf("\n") >= 0) {
+ int n;
+ while ((n = buffer.indexOf("\n")) >=0 ) {
+ System.out.println("[gfsh]: " + buffer.substring(0, n));
+ if (callback != null) {
+ callback.call(buffer.substring(0, n));
+ }
+ buffer = new StringBuilder(buffer.substring(n + 1));
+ }
+ }
+ }
+
+ return docker.execInspect(execId).exitCode();
+ }
+
+ public void stop() throws DockerException, InterruptedException {
+ for (String id : nodeIds) {
+ docker.killContainer(id);
+ docker.removeContainer(id);
+ }
+ docker.close();
+ }
+
+ public String getLocatorAddress() {
+ return locatorAddress;
+ }
+}