<?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/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.flink</groupId>
		<artifactId>flink-parent</artifactId>
		<version>1.12.5</version>
		<relativePath>..</relativePath>
	</parent>

	<packaging>pom</packaging>

	<artifactId>flink-end-to-end-tests</artifactId>
	<name>Flink : E2E Tests : </name>

	<properties>
		<!-- functions as a global exclude; required since an empty set of included groups implicitly includes all -->
		<includeE2E.default>org.apache.flink.tests.util.categories.Dummy</includeE2E.default>
		<!-- default inclusions / exclusions -->
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup1>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup1>
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup2>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup2>
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup3>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup3>
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup4>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup4>
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup5>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup5>
		<e2e.include.org.apache.flink.tests.util.categories.TravisGroup6>false</e2e.include.org.apache.flink.tests.util.categories.TravisGroup6>
		<e2e.include.org.apache.flink.tests.util.categories.PreCommit>false</e2e.include.org.apache.flink.tests.util.categories.PreCommit>
		<e2e.exclude.org.apache.flink.testutils.junit.FailsOnJava11>false</e2e.exclude.org.apache.flink.testutils.junit.FailsOnJava11>
	</properties>

	<modules>
		<module>flink-cli-test</module>
		<module>flink-parent-child-classloading-test-program</module>
		<module>flink-parent-child-classloading-test-lib-package</module>
		<module>flink-dataset-allround-test</module>
		<module>flink-dataset-fine-grained-recovery-test</module>
		<module>flink-datastream-allround-test</module>
		<module>flink-batch-sql-test</module>
		<module>flink-stream-sql-test</module>
		<module>flink-distributed-cache-via-blob-test</module>
		<module>flink-high-parallelism-iterations-test</module>
		<module>flink-stream-stateful-job-upgrade-test</module>
		<module>flink-queryable-state-test</module>
		<module>flink-local-recovery-and-allocation-test</module>
		<module>flink-elasticsearch5-test</module>
		<module>flink-elasticsearch6-test</module>
		<module>flink-quickstart-test</module>
		<module>flink-confluent-schema-registry</module>
		<module>flink-stream-state-ttl-test</module>
		<module>flink-sql-client-test</module>
		<module>flink-file-sink-test</module>
		<module>flink-state-evolution-test</module>
		<module>flink-rocksdb-state-memory-control-test</module>
		<module>flink-end-to-end-tests-common</module>
		<module>flink-metrics-availability-test</module>
		<module>flink-metrics-reporter-prometheus-test</module>
		<module>flink-heavy-deployment-stress-test</module>
		<module>flink-connector-gcp-pubsub-emulator-tests</module>
		<module>flink-streaming-kafka-test-base</module>
		<module>flink-streaming-kafka-test</module>
		<module>flink-plugins-test</module>
		<module>flink-tpch-test</module>
		<module>flink-streaming-kinesis-test</module>
		<module>flink-elasticsearch7-test</module>
		<module>flink-end-to-end-tests-common-kafka</module>
		<module>flink-tpcds-test</module>
		<module>flink-netty-shuffle-memory-control-test</module>
		<module>flink-python-test</module>
		<module>flink-end-to-end-tests-hbase</module>
	</modules>

	<dependencyManagement>
		<dependencies>
			<!-- We pick an arbitrary version of net.java.dev.jna:jna to satisfy dependency
				 convergence for org.testcontainers:testcontainers which transitively depends on
				 two different versions.-->
			<dependency>
				<groupId>net.java.dev.jna</groupId>
				<artifactId>jna</artifactId>
				<version>5.5.0</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<!-- this module depends on the flink-yarn-tests's "target/yarn.classpath" file -->
			<groupId>org.apache.flink</groupId>
			<artifactId>flink-yarn-tests</artifactId>
			<version>${project.version}</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<groupId>*</groupId>
					<artifactId>*</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<profiles>
		<profile>
			<id>e2e-travis1</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup1>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup1>
			</properties>
		</profile>
		<profile>
			<id>e2e-travis2</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup2>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup2>
			</properties>
		</profile>
		<profile>
			<id>e2e-travis3</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup3>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup3>
			</properties>
		</profile>
		<profile>
			<id>e2e-travis4</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup4>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup4>
			</properties>
		</profile>
		<profile>
			<id>e2e-travis5</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup5>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup5>
			</properties>
		</profile>
		<profile>
			<id>e2e-travis6</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.TravisGroup6>true</e2e.include.org.apache.flink.tests.util.categories.TravisGroup6>
			</properties>
		</profile>
		<profile>
			<id>e2e-pre-commit</id>
			<properties>
				<e2e.include.org.apache.flink.tests.util.categories.PreCommit>true</e2e.include.org.apache.flink.tests.util.categories.PreCommit>
			</properties>
		</profile>
		<profile>
			<id>java11</id>
			<activation>
				<jdk>11</jdk>
			</activation>
			<properties>
				<e2e.exclude.org.apache.flink.testutils.junit.FailsOnJava11>true</e2e.exclude.org.apache.flink.testutils.junit.FailsOnJava11>
			</properties>
		</profile>
	</profiles>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.gmavenplus</groupId>
				<artifactId>gmavenplus-plugin</artifactId>
				<version>1.8.1</version>
				<dependencies>
					<dependency>
						<groupId>org.codehaus.groovy</groupId>
						<artifactId>groovy-all</artifactId>
						<version>2.5.12</version>
						<scope>runtime</scope>
						<type>pom</type>
					</dependency>
				</dependencies>
				<executions>
					<execution>
						<id>merge-categories</id>
						<phase>initialize</phase>
						<goals>
							<goal>execute</goal>
						</goals>
						<configuration>
							<scripts>
								<script>
									<![CDATA[
									def categorySearcher = { String propertyPrefix ->
										project.properties.entrySet().stream()
											.filter { p -> p.getKey().startsWith(propertyPrefix) }
											.filter { p -> p.getValue().toBoolean() }
											.map { p -> p.getKey() }
											.map { p -> p.substring(propertyPrefix.size(), p.size()) }
											.toList()
									}

									def includes = categorySearcher('e2e.include.')
									// allow overrides from the command-line
									if (project.properties.includeE2E != null && !project.properties.includeE2E.isEmpty()) {
										includes.add(project.properties.includeE2E)
									}
									if (includes.size() > 0) {
										project.properties.includeE2E = includes.join(',')
									} else {
										project.properties.includeE2E = project.properties.'includeE2E.default'
									}

									def excludes = categorySearcher('e2e.exclude.')
									// allow overrides from the command-line
									if (project.properties.excludeE2E != null && !project.properties.excludeE2E.isEmpty()) {
										excludes.add(project.properties.excludeE2E)
									}
									project.properties.excludeE2E = excludes.join(',')

									println "includes: " + project.properties.includeE2E
									println "excludes: " + project.properties.excludeE2E
									]]>
								</script>
							</scripts>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<executions>
					<execution>
						<id>default-test</id>
						<phase>none</phase>
					</execution>
					<execution>
						<id>integration-tests</id>
						<phase>none</phase>
					</execution>
					<execution>
						<id>end-to-end-tests</id>
						<phase>integration-test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<includes>
								<include>**/*ITCase.*</include>
							</includes>
							<!-- Disable all tests by default.
                                Uses a separate property to make it configurable from the command-line. -->
							<groups>${includeE2E}</groups>
							<excludedGroups>${excludeE2E}</excludedGroups>
							<!-- E2E tests must not access flink-dist concurrently. -->
							<forkCount>1</forkCount>
							<systemPropertyVariables>
								<moduleDir>${project.basedir}</moduleDir>
							</systemPropertyVariables>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>

		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-shade-plugin</artifactId>
					<configuration>
						<artifactSet>
							<excludes>
								<exclude>com.google.code.findbugs:jsr305</exclude>
								<exclude>org.slf4j:slf4j-api</exclude>
							</excludes>
						</artifactSet>
						<filters>
							<filter>
								<artifact>*:*</artifact>
								<excludes>
									<exclude>META-INF/*.SF</exclude>
									<exclude>META-INF/*.DSA</exclude>
									<exclude>META-INF/*.RSA</exclude>
								</excludes>
							</filter>
						</filters>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
	
</project>
