<?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">

  <parent>
    <groupId>org.apache.bigtop.itest</groupId>
    <artifactId>smoke-tests</artifactId>
    <version>1.2.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.bigtop.itest</groupId>
  <artifactId>pig-smoke-execution</artifactId>
  <packaging>jar</packaging>
  <version>1.2.0</version>
  <name>Pig smoke test execution</name>

  <properties>
    <org.codehaus.groovy.maven.jar>${project.build.directory}/pigsmoke-${pig-smoke.version}.jar</org.codehaus.groovy.maven.jar>
    <!-- Override this with path to your pig install path -->
    <pigjar>/usr/lib/pig/pig.jar</pigjar>
    <org.apache.maven-dependency-plugin.groupId>org.apache.pig</org.apache.maven-dependency-plugin.groupId>
    <org.apache.maven-dependency-plugin.artifactId>pigsmoke</org.apache.maven-dependency-plugin.artifactId>
    <org.apache.maven-dependency-plugin.version>${pig-smoke.version}</org.apache.maven-dependency-plugin.version>
    <org.apache.maven-dependency-plugin.output>${project.build.directory}</org.apache.maven-dependency-plugin.output>
    <org.apache.maven-dependency-plugin.pattern>test/data/**/*</org.apache.maven-dependency-plugin.pattern>
    <org.apache.maven-dependency-plugin.type>jar</org.apache.maven-dependency-plugin.type>
  </properties>

  <dependencies>
    <!--  This smoke is implemented by the externally curated org.apache.pig pigsmoke project -->
    <dependency>
      <groupId>org.apache.pig</groupId>
      <artifactId>pigsmoke</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
        <execution>
          <phase>initialize</phase>
          <goals>
            <goal>install-file</goal>
          </goals>
        </execution>
        </executions>
        <configuration>
          <file>${pigjar}</file>
          <groupId>org.apache.pig</groupId>
          <artifactId>pig</artifactId>
          <version>${pig.version}</version>
          <packaging>jar</packaging>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.11</version>
        <configuration>
          <forkMode>always</forkMode>
          <argLine>-Dpigunit.exectype.cluster=true</argLine>
          <additionalClasspathElements>
            <additionalClasspathElement>
              ${HADOOP_CONF_DIR}
            </additionalClasspathElement>
          </additionalClasspathElements>
        </configuration>
      </plugin>

      

    </plugins>
  </build>
</project>
