This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 60a07e9  Migrate CLI integration test mode to use testcontainers 
(#2060)
60a07e9 is described below

commit 60a07e981c001cb42e732c76553fd42ea4feee64
Author: Sijie Guo <guosi...@gmail.com>
AuthorDate: Mon Jul 2 00:16:19 2018 -0700

    Migrate CLI integration test mode to use testcontainers (#2060)
---
 .../pulsar/tests/topologies/PulsarCluster.java     |   8 +-
 tests/integration/cli/pom.xml                      |  10 +-
 .../apache/pulsar/tests/integration/TestCLI.java   | 191 ++++++++++-----------
 .../cli/src/test/resources/arquillian.xml          |  32 ----
 4 files changed, 101 insertions(+), 140 deletions(-)

diff --git 
a/tests/integration-tests-topologies/src/main/java/org/apache/pulsar/tests/topologies/PulsarCluster.java
 
b/tests/integration-tests-topologies/src/main/java/org/apache/pulsar/tests/topologies/PulsarCluster.java
index 9e2860f..167908e 100644
--- 
a/tests/integration-tests-topologies/src/main/java/org/apache/pulsar/tests/topologies/PulsarCluster.java
+++ 
b/tests/integration-tests-topologies/src/main/java/org/apache/pulsar/tests/topologies/PulsarCluster.java
@@ -23,6 +23,7 @@ import static 
org.apache.pulsar.tests.containers.PulsarContainer.CS_PORT;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -45,7 +46,8 @@ import org.testcontainers.containers.Network;
 @Slf4j
 public class PulsarCluster {
 
-    protected static final String ADMIN_SCRIPT = "/pulsar/bin/pulsar-admin";
+    public static final String ADMIN_SCRIPT = "/pulsar/bin/pulsar-admin";
+    public static final String CLIENT_SCRIPT = "/pulsar/bin/pulsar-client";
 
     /**
      * Pulsar Cluster Spec.
@@ -183,6 +185,10 @@ public class PulsarCluster {
         return brokerList.get(0);
     }
 
+    public Collection<BrokerContainer> getBrokers() {
+        return brokerContainers.values();
+    }
+
     public ExecResult runAdminCommandOnAnyBroker(String...commands) throws 
Exception {
         BrokerContainer container = getAnyBroker();
         String[] cmds = new String[commands.length + 1];
diff --git a/tests/integration/cli/pom.xml b/tests/integration/cli/pom.xml
index 9d960ac..5a05b4e 100644
--- a/tests/integration/cli/pom.xml
+++ b/tests/integration/cli/pom.xml
@@ -27,9 +27,8 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.pulsar.tests</groupId>
-    <artifactId>integration-tests-base</artifactId>
+    <artifactId>integration</artifactId>
     <version>2.2.0-incubating-SNAPSHOT</version>
-    <relativePath>../../integration-tests-base</relativePath>
   </parent>
 
   <groupId>org.apache.pulsar.tests.integration</groupId>
@@ -42,6 +41,13 @@
       <groupId>org.apache.pulsar</groupId>
       <artifactId>pulsar-client</artifactId>
       <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.pulsar.tests</groupId>
+      <artifactId>integration-tests-topologies</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 </project>
diff --git 
a/tests/integration/cli/src/test/java/org/apache/pulsar/tests/integration/TestCLI.java
 
b/tests/integration/cli/src/test/java/org/apache/pulsar/tests/integration/TestCLI.java
index e4a67c1..fdb19cd 100644
--- 
a/tests/integration/cli/src/test/java/org/apache/pulsar/tests/integration/TestCLI.java
+++ 
b/tests/integration/cli/src/test/java/org/apache/pulsar/tests/integration/TestCLI.java
@@ -18,47 +18,41 @@
  */
 package org.apache.pulsar.tests.integration;
 
-import static org.testng.Assert.fail;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
-import com.github.dockerjava.api.DockerClient;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.pulsar.tests.DockerUtils;
-import org.apache.pulsar.tests.PulsarClusterUtils;
-import org.jboss.arquillian.test.api.ArquillianResource;
-import org.jboss.arquillian.testng.Arquillian;
+import org.apache.pulsar.tests.containers.BrokerContainer;
+import org.apache.pulsar.tests.topologies.PulsarCluster;
+import org.apache.pulsar.tests.topologies.PulsarClusterTestBase;
+import org.testcontainers.containers.Container.ExecResult;
 import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-public class TestCLI extends Arquillian {
-    private static String clusterName = "test";
-
-    @ArquillianResource
-    DockerClient docker;
-
-    @BeforeMethod
-    public void waitServicesUp() throws Exception {
-        Assert.assertTrue(PulsarClusterUtils.waitZooKeeperUp(docker, 
clusterName, 30, TimeUnit.SECONDS));
-        Assert.assertTrue(PulsarClusterUtils.waitAllBrokersUp(docker, 
clusterName));
-    }
+/**
+ * Test Pulsar CLI.
+ */
+public class TestCLI extends PulsarClusterTestBase {
 
     @Test
     public void testDeprecatedCommands() throws Exception {
-        String broker = PulsarClusterUtils.brokerSet(docker, 
clusterName).stream().findAny().get();
-
-        Assert.assertFalse(DockerUtils.runCommand(docker, broker, 
"/pulsar/bin/pulsar-admin", "--help")
-                           .contains("Usage: properties "));
-        Assert.assertTrue(DockerUtils.runCommand(docker, broker,
-                                                 "/pulsar/bin/pulsar-admin", 
"properties",
-                                                 "create", 
"compaction-test-cli", "--allowed-clusters", clusterName,
-                                                 "--admin-roles", 
"admin").contains("deprecated"));
-        Assert.assertTrue(DockerUtils.runCommand(docker, broker, 
"/pulsar/bin/pulsar-admin", "properties", "list")
-                          .contains("compaction-test-cli"));
-        Assert.assertTrue(DockerUtils.runCommand(docker, broker, 
"/pulsar/bin/pulsar-admin", "tenants", "list")
-                          .contains("compaction-test-cli"));
-
+        String tenantName = "test-deprecated-commands";
+
+        ExecResult result = pulsarCluster.runAdminCommandOnAnyBroker("--help");
+        assertFalse(result.getStdout().isEmpty());
+        assertFalse(result.getStdout().contains("Usage: properties "));
+        result = pulsarCluster.runAdminCommandOnAnyBroker(
+            "properties", "create", tenantName,
+            "--allowed-clusters", pulsarCluster.getClusterName(),
+            "--admin-roles", "admin"
+        );
+        assertTrue(result.getStderr().contains("deprecated"));
+
+        result = pulsarCluster.runAdminCommandOnAnyBroker(
+            "properties", "list");
+        assertTrue(result.getStdout().contains(tenantName));
+        result = pulsarCluster.runAdminCommandOnAnyBroker(
+            "tenants", "list");
+        assertTrue(result.getStdout().contains(tenantName));
     }
 
     @Test
@@ -68,119 +62,106 @@ public class TestCLI extends Arquillian {
         String subscriptionPrefix = "subscription-";
 
         int i = 0;
-        for (String b : PulsarClusterUtils.brokerSet(docker, clusterName)) {
-            Assert.assertTrue(
-                DockerUtils.runCommand(docker, b,
-                    "/pulsar/bin/pulsar-admin",
-                    "persistent",
-                    "create-subscription",
-                    "persistent://public/default/" + topic,
-                    "--subscription",
-                    subscriptionPrefix + i
-                ).isEmpty()
+        for (BrokerContainer container : pulsarCluster.getBrokers()) {
+            ExecResult result = container.execCmd(
+                PulsarCluster.ADMIN_SCRIPT,
+                "persistent",
+                "create-subscription",
+                "persistent://public/default/" + topic,
+                "--subscription",
+                "" + subscriptionPrefix + i
             );
+            assertTrue(result.getStdout().isEmpty());
+            assertTrue(result.getStderr().isEmpty());
             i++;
         }
     }
 
     @Test
     public void testTopicTerminationOnTopicsWithoutConnectedConsumers() throws 
Exception {
-        String broker = PulsarClusterUtils.brokerSet(docker, 
clusterName).stream().findAny().get();
-
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-client",
+        String topicName = 
"persistent://public/default/test-topic-termination";
+        BrokerContainer container = pulsarCluster.getAnyBroker();
+        ExecResult result = container.execCmd(
+            PulsarCluster.CLIENT_SCRIPT,
             "produce",
             "-m",
             "\"test topic termination\"",
             "-n",
             "1",
-            "persistent://public/default/test-topic-termination"
-        ).contains("1 messages successfully produced"));
+            topicName);
+
+        Assert.assertTrue(result.getStdout().contains("1 messages successfully 
produced"));
 
         // terminate the topic
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-admin",
+        result = container.execCmd(
+            PulsarCluster.ADMIN_SCRIPT,
             "persistent",
             "terminate",
-            "persistent://public/default/test-topic-termination"
-        ).contains("Topic succesfully terminated at"));
+            topicName);
+        Assert.assertTrue(result.getStdout().contains("Topic succesfully 
terminated at"));
 
         // try to produce should fail
-
-        try {
-            DockerUtils.runCommand(
-                docker, broker,
-                "/pulsar/bin/pulsar-client",
-                "produce",
-                "-m",
-                "\"test topic termination\"",
-                "-n",
-                "1",
-                "persistent://public/default/test-topic-termination"
-            );
-            fail("Should fail to produce messages to a terminated topic");
-        } catch (RuntimeException re) {
-            // expected
-        }
+        result = pulsarCluster.getAnyBroker().execCmd(
+            PulsarCluster.CLIENT_SCRIPT,
+            "produce",
+            "-m",
+            "\"test topic termination\"",
+            "-n",
+            "1",
+            topicName);
+        assertTrue(result.getStdout().contains("Topic was already 
terminated"));
     }
 
     @Test
     public void testSchemaCLI() throws Exception {
-        String broker = PulsarClusterUtils.brokerSet(docker, 
clusterName).stream().findAny().get();
+        BrokerContainer container = pulsarCluster.getAnyBroker();
+        String topicName = "persistent://public/default/test-schema-cli";
 
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-client",
+        ExecResult result = container.execCmd(
+            PulsarCluster.CLIENT_SCRIPT,
             "produce",
             "-m",
             "\"test topic schema\"",
             "-n",
             "1",
-            "persistent://public/default/test-schema-cli"
-        ).contains("1 messages successfully produced"));
+            topicName);
+        Assert.assertTrue(result.getStdout().contains("1 messages successfully 
produced"));
 
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-admin",
+        result = container.execCmd(
+            PulsarCluster.ADMIN_SCRIPT,
             "schemas",
             "upload",
-            "persistent://public/default/test-schema-cli",
+            topicName,
             "-f",
             "/pulsar/conf/schema_example.conf"
-        ).isEmpty());
+        );
+        Assert.assertTrue(result.getStdout().isEmpty());
+        Assert.assertTrue(result.getStderr().isEmpty());
 
         // get schema
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-admin",
+        result = container.execCmd(
+            PulsarCluster.ADMIN_SCRIPT,
             "schemas",
             "get",
-            "persistent://public/default/test-schema-cli"
-        ).contains("\"type\" : \"STRING\""));
+            topicName);
+        Assert.assertTrue(result.getStdout().contains("\"type\" : 
\"STRING\""));
 
         // delete the schema
-        Assert.assertTrue(DockerUtils.runCommand(
-            docker, broker,
-            "/pulsar/bin/pulsar-admin",
+        result = container.execCmd(
+            PulsarCluster.ADMIN_SCRIPT,
             "schemas",
             "delete",
-            "persistent://public/default/test-schema-cli"
-        ).isEmpty());
+            topicName);
+        Assert.assertTrue(result.getStdout().isEmpty());
+        Assert.assertTrue(result.getStderr().isEmpty());
 
         // get schema again
-        try {
-            DockerUtils.runCommand(
-                docker, broker,
-                "/pulsar/bin/pulsar-admin",
-                "schemas",
-                "get",
-                "persistent://public/default/test-schema-cli"
-            );
-            fail("Should fail to get schema if the schema is deleted");
-        } catch (RuntimeException re) {
-            // expected
-        }
+        result = container.execCmd(
+            PulsarCluster.ADMIN_SCRIPT,
+            "schemas",
+            "get",
+            "persistent://public/default/test-schema-cli"
+        );
+        assertTrue(result.getStderr().contains("Reason: HTTP 404 Not Found"));
     }
 }
diff --git a/tests/integration/cli/src/test/resources/arquillian.xml 
b/tests/integration/cli/src/test/resources/arquillian.xml
deleted file mode 100644
index 821d6e6..0000000
--- a/tests/integration/cli/src/test/resources/arquillian.xml
+++ /dev/null
@@ -1,32 +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.
-
--->
-<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-            xmlns="http://jboss.org/schema/arquillian";
-            xsi:schemaLocation="http://jboss.org/schema/arquillian
-                                
http://jboss.org/schema/arquillian/arquillian_1_0.xsd";>
-
-  <extension qualifier="docker">
-    <property name="definitionFormat">CUBE</property>
-    <property 
name="dockerContainersResource">cube-definitions/single-cluster-3-bookie-2-broker.yaml</property>
-  </extension>
-
-</arquillian>

Reply via email to