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

hxd pushed a commit to branch testcontainer
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 5ae6666c00979afca7f2882e13b0fc1b6ac09ff1
Author: xiangdong huang <[email protected]>
AuthorDate: Wed Apr 7 01:35:58 2021 +0800

    try test container
---
 docker/src/main/{Dockerfile => Dockerfile-cluster} |   4 +-
 docker/src/main/{Dockerfile => Dockerfile-single}  |   2 +-
 pom.xml                                            |  36 +++++++
 .../src/test/resources/testcontainers.properties   |  17 +++
 test/e2e/base/docker-compose.yaml                  |   4 +-
 testcontainer/pom.xml                              | 118 +++++++++++++++++++++
 .../test/java/org/apache/iotdb/db/sql/SqlE2E.java  |  85 +++++++++++++++
 .../test/resources/composes/docker-compose-3.yaml  |  28 ++---
 .../src/test/resources/iotdb-engine.properties     |  24 +++++
 9 files changed, 293 insertions(+), 25 deletions(-)

diff --git a/docker/src/main/Dockerfile b/docker/src/main/Dockerfile-cluster
similarity index 92%
copy from docker/src/main/Dockerfile
copy to docker/src/main/Dockerfile-cluster
index 402227c..277132b 100644
--- a/docker/src/main/Dockerfile
+++ b/docker/src/main/Dockerfile-cluster
@@ -21,7 +21,7 @@
 
 FROM openjdk:11-jre-slim
 
-ADD distribution/target/apache-iotdb-*-all-bin.zip /
+ADD distribution/target/apache-iotdb-*-cluster-bin.zip /
 
 RUN apt update \
   && apt install lsof procps unzip -y \
@@ -40,4 +40,4 @@ EXPOSE 8181
 VOLUME /iotdb/data
 VOLUME /iotdb/logs
 ENV PATH="/iotdb/sbin/:/iotdb/tools/:${PATH}"
-ENTRYPOINT ["/iotdb/sbin/start-server.sh"]
+ENTRYPOINT ["/iotdb/sbin/start-node.sh"]
diff --git a/docker/src/main/Dockerfile b/docker/src/main/Dockerfile-single
similarity index 95%
rename from docker/src/main/Dockerfile
rename to docker/src/main/Dockerfile-single
index 402227c..c0e00a9 100644
--- a/docker/src/main/Dockerfile
+++ b/docker/src/main/Dockerfile-single
@@ -21,7 +21,7 @@
 
 FROM openjdk:11-jre-slim
 
-ADD distribution/target/apache-iotdb-*-all-bin.zip /
+ADD distribution/target/apache-iotdb-*-server-bin.zip /
 
 RUN apt update \
   && apt install lsof procps unzip -y \
diff --git a/pom.xml b/pom.xml
index 1c2b0f3..eb27a42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -508,6 +508,12 @@
             <artifactId>mockito-all</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+            <version>1.15.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
         <pluginManagement>
@@ -898,6 +904,7 @@
                             <excludes>
                                 <!-- Exclude integration tests within (unit) 
test phase. -->
                                 <exclude>src/test/**/*IT.java</exclude>
+                                <exclude>src/test/**/*E2E.java</exclude>
                             </excludes>
                         </configuration>
                     </execution>
@@ -911,7 +918,12 @@
                             <includes>
                                 <!-- Include integration tests within 
integration-test phase. -->
                                 <include>src/test/**/*IT.java</include>
+                                <include>src/test/**/*E2E.java</include>
                             </includes>
+                            <excludes>
+                                <!-- Exclude unit tests within (unit) test 
phase. -->
+                                <exclude>src/test/**/*Test.java</exclude>
+                            </excludes>
                         </configuration>
                     </execution>
                 </executions>
@@ -991,6 +1003,30 @@
                 <thrift.exec-cmd.args>+x 
${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
             </properties>
         </profile>
+        <!-- for TestContainer. As it requires docker, we have to detect 
whether docker exists.-->
+        <profile>
+            <!-- Mac and Unix-->
+            <id>unixDockerCheck</id>
+            <activation>
+                <file>
+                    <exists>/var/run/docker.sock</exists>
+                </file>
+            </activation>
+            <modules>
+                <module>testcontainer</module>
+            </modules>
+        </profile>
+        <profile>
+            <id>WinDockerCheck</id>
+            <activation>
+                <file>
+                    <exists>C:\Program 
Files\Docker\Docker\resources\bin\docker.exe</exists>
+                </file>
+            </activation>
+            <modules>
+                <module>testcontainer</module>
+            </modules>
+        </profile>
         <!-- Some APIs were removed in Java 11, so we need to add replacements 
-->
         <profile>
             <id>java-11-and-above</id>
diff --git a/server/src/test/resources/testcontainers.properties 
b/server/src/test/resources/testcontainers.properties
new file mode 100644
index 0000000..af6effe
--- /dev/null
+++ b/server/src/test/resources/testcontainers.properties
@@ -0,0 +1,17 @@
+#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.
+
diff --git a/test/e2e/base/docker-compose.yaml 
b/test/e2e/base/docker-compose.yaml
index d4970d4..08ebc3b 100644
--- a/test/e2e/base/docker-compose.yaml
+++ b/test/e2e/base/docker-compose.yaml
@@ -23,7 +23,7 @@ services:
   server-prototype:
     build:
       context: ../../..
-      dockerfile: docker/src/main/Dockerfile
+      dockerfile: ../../../docker/src/main/Dockerfile-single
     ports:
       - 6667:6667
     networks:
@@ -37,7 +37,7 @@ services:
   initializer:
     build:
       context: ../../..
-      dockerfile: docker/src/main/Dockerfile
+      dockerfile: ../../../docker/src/main/Dockerfile-single
     networks:
       iotdb:
     entrypoint:
diff --git a/testcontainer/pom.xml b/testcontainer/pom.xml
new file mode 100644
index 0000000..f8bb9f6
--- /dev/null
+++ b/testcontainer/pom.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <groupId>org.apache.iotdb</groupId>
+        <artifactId>iotdb-parent</artifactId>
+        <version>0.12.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>testcontainer</artifactId>
+    <properties>
+        <docker.test.skip>false</docker.test.skip>
+        <docker.build.executable>docker</docker.build.executable>
+        <docker.build.single.argument>build -t apache/iotdb:maven-development 
-f ${basedir}/../docker/src/main/Dockerfile-single 
${basedir}/../.</docker.build.single.argument>
+        <docker.clean.single.argument>image rm 
apache/iotdb:maven-development</docker.clean.single.argument>
+        <docker.build.cluster.argument>build -t 
apache/iotdb:cluster-maven-development -f 
${basedir}/../docker/src/main/Dockerfile-cluster 
${basedir}/../.</docker.build.cluster.argument>
+        <docker.clean.cluster.argument>image rm 
apache/iotdb:cluster-maven-development</docker.clean.cluster.argument>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>iotdb-jdbc</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>iotdb-session</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>iotdb-cli</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <!-- before integration test, we build the docker image -->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>1.6.0</version>
+                <executions>
+                    <execution>
+                        <id>build-docker-image</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${docker.test.skip}</skip>
+                            <executable>${docker.build.executable}</executable>
+                            
<commandlineArgs>${docker.build.single.argument}</commandlineArgs>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>build-cluster-docker-image</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${docker.test.skip}</skip>
+                            <executable>${docker.build.executable}</executable>
+                            
<commandlineArgs>${docker.build.cluster.argument}</commandlineArgs>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>clean-docker-image</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${docker.test.skip}</skip>
+                            <executable>${docker.build.executable}</executable>
+                            
<commandlineArgs>${docker.clean.single.argument}</commandlineArgs>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>clean-cluster-docker-image</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <skip>${docker.test.skip}</skip>
+                            <executable>${docker.build.executable}</executable>
+                            
<commandlineArgs>${docker.clean.cluster.argument}</commandlineArgs>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>3.2.0</version>
+                <executions>
+                    <execution>
+                        <id>add-test-container-source</id>
+                        <phase>generate-test-sources</phase>
+                        <goals>
+                            <goal>add-test-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>${basedir}/src/test/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/SqlE2E.java 
b/testcontainer/src/test/java/org/apache/iotdb/db/sql/SqlE2E.java
new file mode 100644
index 0000000..4fec53e
--- /dev/null
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/SqlE2E.java
@@ -0,0 +1,85 @@
+/*
+ * 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.apache.iotdb.db.sql;
+
+import org.apache.iotdb.jdbc.Config;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.images.PullPolicy;
+import org.testcontainers.utility.DockerImageName;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class SqlE2E {
+  private Statement statement;
+  private Connection connection;
+
+  @Rule
+  public GenericContainer dslContainer =
+      new 
GenericContainer(DockerImageName.parse("apache/iotdb:maven-development"))
+          .withImagePullPolicy(PullPolicy.defaultPolicy())
+          // mount another properties for changing parameters, e.g., open 5555 
port (sync module)
+          .withFileSystemBind(
+              new 
File("src/test/resources/iotdb-engine.properties").getAbsolutePath(),
+              "/iotdb/conf/iotdb-engine.properties",
+              BindMode.READ_ONLY)
+          .withExposedPorts(6667)
+          .waitingFor(Wait.forListeningPort());
+
+  int rpcPort = 6667;
+  int syncPort = 5555;
+
+  @Before
+  public void setUp() throws Exception {
+    rpcPort = dslContainer.getMappedPort(6667);
+
+    syncPort = dslContainer.getMappedPort(5555);
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:" + 
rpcPort, "root", "root");
+    statement = connection.createStatement();
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    statement.close();
+    connection.close();
+  }
+
+  @Test
+  public void testSimplePutAndGet() throws SQLException {
+    String[] timeSeriesArray = {"root.sg1.aa.bb", "root.sg1.aa.bb.cc", 
"root.sg1.aa"};
+
+    for (String timeSeries : timeSeriesArray) {
+      statement.execute(
+          String.format(
+              "create timeseries %s with datatype=INT64, encoding=PLAIN, 
compression=SNAPPY",
+              timeSeries));
+    }
+  }
+}
diff --git a/test/e2e/base/docker-compose.yaml 
b/testcontainer/src/test/resources/composes/docker-compose-3.yaml
similarity index 68%
copy from test/e2e/base/docker-compose.yaml
copy to testcontainer/src/test/resources/composes/docker-compose-3.yaml
index d4970d4..e345335 100644
--- a/test/e2e/base/docker-compose.yaml
+++ b/testcontainer/src/test/resources/composes/docker-compose-3.yaml
@@ -20,32 +20,20 @@
 version: '3.8'
 
 services:
-  server-prototype:
-    build:
-      context: ../../..
-      dockerfile: docker/src/main/Dockerfile
-    ports:
-      - 6667:6667
+  iotdb-server:
+    image: apache/iotdb:cluster-maven-development
+    expose:
+      - 6667
+      - 9003
+      - 40010
     networks:
-      iotdb:
+      - iotdb
     healthcheck:
       test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/6667" 
]
       interval: 5s
       timeout: 60s
       retries: 120
 
-  initializer:
-    build:
-      context: ../../..
-      dockerfile: docker/src/main/Dockerfile
-    networks:
-      iotdb:
-    entrypoint:
-      - bash
-      - -c
-      - |
-        cat /res/init.sql | grep -v '^--' | xargs -I {} 
/iotdb/sbin/start-cli.sh -h server -e {}
-        echo "Ready to Run IoTDB E2E Tests"
-
 networks:
   iotdb:
+    driver: bridge
diff --git a/testcontainer/src/test/resources/iotdb-engine.properties 
b/testcontainer/src/test/resources/iotdb-engine.properties
new file mode 100644
index 0000000..960aa13
--- /dev/null
+++ b/testcontainer/src/test/resources/iotdb-engine.properties
@@ -0,0 +1,24 @@
+#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.
+
+
+base_dir=target/tmp
+data_dirs=target/data
+wal_dir=target/wal
+index_root_dir=target/index
+udf_root_dir=target/ext
+tracing_dir=target/data/tracing
\ No newline at end of file

Reply via email to