<?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.jclouds</groupId>
    <artifactId>jclouds-project</artifactId>
    <version>1.6.2-incubating</version>
  </parent>

  <!-- TODO: when out of labs, switch to org.jclouds.api -->
  <groupId>org.apache.jclouds.labs</groupId>
  <artifactId>openstack-trove</artifactId>
  <version>1.6.2-incubating</version>
  <name>jclouds openstack-trove api</name>
  <description>jclouds components to access an implementation of OpenStack Trove</description>
  <packaging>bundle</packaging>

  <properties>
    <!-- keystone endpoint -->
    <test.openstack-trove.endpoint>http://localhost:5000/v2.0/</test.openstack-trove.endpoint>
    <!-- keystone version -->
    <test.openstack-trove.api-version>1.0</test.openstack-trove.api-version>
    <test.openstack-trove.build-version />
    <test.openstack-trove.identity>FIXME_IDENTITY</test.openstack-trove.identity>
    <test.openstack-trove.credential>FIXME_CREDENTIALS</test.openstack-trove.credential>
    <test.jclouds.keystone.credential-type>passwordCredentials</test.jclouds.keystone.credential-type>

    <jclouds.osgi.export>org.jclouds.openstack.trove.v1_0*;version="${project.version}"</jclouds.osgi.export>
    <jclouds.osgi.import>
      org.jclouds.rest.internal;version="${jclouds.version}",
      org.jclouds.labs*;version="${project.version}",
      org.jclouds*;version="${jclouds.version}",
      *
    </jclouds.osgi.import>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.jclouds.api</groupId>
      <artifactId>openstack-keystone</artifactId>
      <version>1.6.2-incubating</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jclouds</groupId>
      <artifactId>jclouds-core</artifactId>
      <version>1.6.2-incubating</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jclouds</groupId>
      <artifactId>jclouds-core</artifactId>
      <version>1.6.2-incubating</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jclouds.api</groupId>
      <artifactId>openstack-keystone</artifactId>
      <version>1.6.2-incubating</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jclouds.driver</groupId>
      <artifactId>jclouds-slf4j</artifactId>
      <version>1.6.2-incubating</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>live</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>integration</id>
                <phase>integration-test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <forkCount>5</forkCount>
                  <reuseForks>true</reuseForks>
                  <parallel>classes</parallel>
                  <systemPropertyVariables>
                    <test.openstack-trove.endpoint>${test.openstack-trove.endpoint}</test.openstack-trove.endpoint>
                    <test.openstack-trove.api-version>${test.openstack-trove.api-version}</test.openstack-trove.api-version>
                    <test.openstack-trove.build-version>${test.openstack-trove.build-version}</test.openstack-trove.build-version>
                    <test.openstack-trove.identity>${test.openstack-trove.identity}</test.openstack-trove.identity>
                    <test.openstack-trove.credential>${test.openstack-trove.credential}</test.openstack-trove.credential>
                    <test.jclouds.keystone.credential-type>${test.jclouds.keystone.credential-type}</test.jclouds.keystone.credential-type>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>


  <scm>
    <tag>jclouds-labs-openstack-1.6.2-incubating-rc0</tag>
  </scm>
</project>
