You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by ma...@apache.org on 2021/08/31 06:26:41 UTC
[druid] branch master updated: Add functionality for integration
test to run command inside the Docker container (#11640)
This is an automated email from the ASF dual-hosted git repository.
maytasm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 6997fd7 Add functionality for integration test to run command inside the Docker container (#11640)
6997fd7 is described below
commit 6997fd787de50dbb2dd69bfd9994626583d4cdaa
Author: Maytas Monsereenusorn <ma...@apache.org>
AuthorDate: Tue Aug 31 13:26:26 2021 +0700
Add functionality for integration test to run command inside the Docker container (#11640)
* add run cmd for IT
* fix checksyle
* fix checksyle
---
integration-tests/pom.xml | 5 ++
.../testing/utils/DruidClusterAdminClient.java | 73 +++++++++++++++++++++-
2 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 339e01f..ab9a638 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -316,6 +316,11 @@
<version>3.2.0</version>
</dependency>
<dependency>
+ <groupId>com.github.docker-java</groupId>
+ <artifactId>docker-java-core</artifactId>
+ <version>3.2.0</version>
+ </dependency>
+ <dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-kqueue</artifactId>
<classifier>osx-x86_64</classifier>
diff --git a/integration-tests/src/main/java/org/apache/druid/testing/utils/DruidClusterAdminClient.java b/integration-tests/src/main/java/org/apache/druid/testing/utils/DruidClusterAdminClient.java
index d867b20..c8908ab 100644
--- a/integration-tests/src/main/java/org/apache/druid/testing/utils/DruidClusterAdminClient.java
+++ b/integration-tests/src/main/java/org/apache/druid/testing/utils/DruidClusterAdminClient.java
@@ -21,11 +21,14 @@ package org.apache.druid.testing.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.command.ExecCreateCmdResponse;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.core.DockerClientBuilder;
+import com.github.dockerjava.core.command.ExecStartResultCallback;
import com.github.dockerjava.netty.NettyDockerCmdExecFactory;
import com.google.inject.Inject;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.Pair;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.java.util.http.client.HttpClient;
@@ -39,8 +42,10 @@ import org.jboss.netty.channel.ChannelException;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
+import java.io.ByteArrayOutputStream;
import java.net.URL;
import java.nio.channels.ClosedChannelException;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@@ -154,12 +159,78 @@ public class DruidClusterAdminClient
waitUntilInstanceReady(config.getRouterUrl());
}
+ public Pair<String, String> runCommandInCoordinatorContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(COORDINATOR_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInCoordinatorTwoContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(COORDINATOR_TWO_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInHistoricalContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(HISTORICAL_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInOverlordContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(OVERLORD_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInOverlordTwoContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(OVERLORD_TWO_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInBrokerContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(BROKER_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInRouterContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(ROUTER_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ public Pair<String, String> runCommandInMiddleManagerContainer(String... cmd) throws Exception
+ {
+ return runCommandInDockerContainer(MIDDLEMANAGER_DOCKER_CONTAINER_NAME, cmd);
+ }
+
+ private Pair<String, String> runCommandInDockerContainer(String serviceName, String... cmd) throws Exception
+ {
+ DockerClient dockerClient = DockerClientBuilder.getInstance()
+ .withDockerCmdExecFactory((new NettyDockerCmdExecFactory())
+ .withConnectTimeout(10 * 1000))
+ .build();
+ ByteArrayOutputStream stdout = new ByteArrayOutputStream();
+ ByteArrayOutputStream stderr = new ByteArrayOutputStream();
+ ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(findDockerContainer(dockerClient, serviceName))
+ .withAttachStderr(true)
+ .withAttachStdout(true)
+ .withCmd(cmd)
+ .exec();
+ dockerClient.execStartCmd(execCreateCmdResponse.getId())
+ .exec(new ExecStartResultCallback(stdout, stderr))
+ .awaitCompletion();
+
+ return new Pair<>(stdout.toString(StandardCharsets.UTF_8.name()), stderr.toString(StandardCharsets.UTF_8.name()));
+ }
+
private void restartDockerContainer(String serviceName)
{
DockerClient dockerClient = DockerClientBuilder.getInstance()
.withDockerCmdExecFactory((new NettyDockerCmdExecFactory())
.withConnectTimeout(10 * 1000))
.build();
+ dockerClient.restartContainerCmd(findDockerContainer(dockerClient, serviceName)).exec();
+ }
+
+ private String findDockerContainer(DockerClient dockerClient, String serviceName)
+ {
+
List<Container> containers = dockerClient.listContainersCmd().exec();
Optional<String> containerName = containers.stream()
.filter(container -> Arrays.asList(container.getNames()).contains(serviceName))
@@ -170,7 +241,7 @@ public class DruidClusterAdminClient
LOG.error("Cannot find docker container for " + serviceName);
throw new ISE("Cannot find docker container for " + serviceName);
}
- dockerClient.restartContainerCmd(containerName.get()).exec();
+ return containerName.get();
}
private void waitUntilInstanceReady(final String host)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org