<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->
<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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>iotdb-parent</artifactId>
        <groupId>org.apache.iotdb</groupId>
        <version>0.14.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>integration-test</artifactId>
    <properties>
        <integrationTest.forkCount>1</integrationTest.forkCount>
        <integrationTest.randomSelectWriteNode>true</integrationTest.randomSelectWriteNode>
        <integrationTest.readAndVerifyWithMultiNode>true</integrationTest.readAndVerifyWithMultiNode>
        <integrationTest.launchNodeInSameJVM>true</integrationTest.launchNodeInSameJVM>
        <integrationTest.parallelMode>none</integrationTest.parallelMode>
        <integrationTest.nodeMaxHeapSize>200m</integrationTest.nodeMaxHeapSize>
        <integrationTest.nodeNewHeapSize>200m</integrationTest.nodeNewHeapSize>
        <integrationTest.testEnv/>
        <integrationTest.excludedGroups/>
        <integrationTest.includedGroups/>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>iotdb-server</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>iotdb-server</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>iotdb-session</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>iotdb-jdbc</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>iotdb-confignode</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.iotdb</groupId>
            <artifactId>rewrite-tsfile-tool</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.0.0-M5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <!-- skip default-test -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-test</id>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- If the test starts separate processes, we should package first -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven.assembly.version}</version>
                <configuration>
                    <skipAssembly>${integrationTest.launchNodeInSameJVM}</skipAssembly>
                </configuration>
                <executions>
                    <!-- Package binaries-->
                    <execution>
                        <id>cluster-test-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/assembly/mpp-test.xml</descriptor>
                            </descriptors>
                            <finalName>template-node</finalName>
                            <appendAssemblyId>false</appendAssemblyId>
                        </configuration>
                    </execution>
                    <execution>
                        <id>cluster-test-assembly-share</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/assembly/mpp-share.xml</descriptor>
                            </descriptors>
                            <finalName>template-node-share</finalName>
                            <appendAssemblyId>false</appendAssemblyId>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Run integration tests -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                        <configuration>
                            <skipTests>false</skipTests>
                            <groups>${integrationTest.includedGroups}</groups>
                            <excludedGroups>${integrationTest.excludedGroups}</excludedGroups>
                            <useSystemClassLoader>false</useSystemClassLoader>
                            <parallel>${integrationTest.parallelMode}</parallel>
                            <threadCount>1</threadCount>
                            <forkCount>${integrationTest.forkCount}</forkCount>
                            <reuseForks>false</reuseForks>
                            <systemPropertyVariables>
                                <TestEnv>${integrationTest.testEnv}</TestEnv>
                                <RandomSelectWriteNode>${integrationTest.randomSelectWriteNode}</RandomSelectWriteNode>
                                <ReadAndVerifyWithMultiNode>${integrationTest.readAndVerifyWithMultiNode}</ReadAndVerifyWithMultiNode>
                            </systemPropertyVariables>
                            <summaryFile>target/failsafe-reports/failsafe-summary-IT.xml</summaryFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                            <skipTests>false</skipTests>
                            <summaryFiles>
                                <summaryFile>target/failsafe-reports/failsafe-summary-IT.xml</summaryFile>
                            </summaryFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <mainClass>org.apache.iotdb.it.framework.IoTDBTestReporter</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>report</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>LocalStandaloneIT</id>
            <properties>
                <integrationTest.includedGroups>org.apache.iotdb.itbase.category.LocalStandaloneIT</integrationTest.includedGroups>
                <integrationTest.excludedGroups/>
                <integrationTest.testEnv>Standalone</integrationTest.testEnv>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!-- Currently RemoteIT is not working as it lacks of the remote endpoint parameters -->
        <profile>
            <id>RemoteIT</id>
            <properties>
                <integrationTest.includedGroups>org.apache.iotdb.itbase.category.RemoteIT</integrationTest.includedGroups>
                <integrationTest.excludedGroups/>
                <integrationTest.testEnv>Remote</integrationTest.testEnv>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>ClusterIT</id>
            <properties>
                <integrationTest.includedGroups>org.apache.iotdb.itbase.category.ClusterIT</integrationTest.includedGroups>
                <integrationTest.excludedGroups/>
                <integrationTest.testEnv>Cluster1</integrationTest.testEnv>
                <integrationTest.launchNodeInSameJVM>false</integrationTest.launchNodeInSameJVM>
                <integrationTest.randomSelectWriteNode>true</integrationTest.randomSelectWriteNode>
                <integrationTest.readAndVerifyWithMultiNode>true</integrationTest.readAndVerifyWithMultiNode>
                <integrationTest.parallelMode>classes</integrationTest.parallelMode>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>LocalStandaloneOnMppIT</id>
            <properties>
                <integrationTest.includedGroups>org.apache.iotdb.itbase.category.LocalStandaloneIT</integrationTest.includedGroups>
                <integrationTest.excludedGroups/>
                <integrationTest.testEnv>LocalStandaloneOnMpp</integrationTest.testEnv>
                <integrationTest.launchNodeInSameJVM>false</integrationTest.launchNodeInSameJVM>
                <integrationTest.randomSelectWriteNode>false</integrationTest.randomSelectWriteNode>
                <integrationTest.readAndVerifyWithMultiNode>false</integrationTest.readAndVerifyWithMultiNode>
                <integrationTest.parallelMode>classes</integrationTest.parallelMode>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
    </profiles>
</project>
