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

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.atlassian.bamboo</groupId>
    <artifactId>atlassian-bamboo</artifactId>
    <version>8.2.0-m079</version>
  </parent>

  <artifactId>atlassian-bamboo-wired-test</artifactId>
  <packaging>atlassian-plugin</packaging>

  <name>Atlassian Bamboo Wired Tests</name>
  <description>This is the module for wired tests for Atlassian Bamboo.</description>

  <properties>
    <atlassian.plugin.key>${project.groupId}.${project.artifactId}</atlassian.plugin.key>
    <license.scope>test</license.scope>
    <acceptanceTestSettings />

    <test.host>localhost</test.host>
    <db.host>${test.host}</db.host>
    <db.username>bamboo</db.username>
    <db.password>bamboo</db.password>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-deployments-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-deployments</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-rest-model</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-test-utils</artifactId>
      <scope>provided</scope>
      <exclusions>
        <exclusion>
          <groupId>com.atlassian.selenium</groupId>
          <artifactId>atlassian-pageobjects-elements</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.atlassian.bamboo.plugins</groupId>
      <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Atlassian dependencies -->
    <dependency>
      <groupId>com.atlassian.functest</groupId>
      <artifactId>functest-plugin</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.plugin</groupId>
      <artifactId>atlassian-spring-scanner-annotation</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.atlassian.plugins.rest</groupId>
      <artifactId>atlassian-rest-common</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- 3rd party dependencies -->
    <dependency>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>jaxb-runtime</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.opentest4j</groupId>
      <artifactId>opentest4j</artifactId>
      <version>1.2.0</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>com.atlassian.plugin</groupId>
        <artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>com.atlassian.maven.plugins</groupId>
        <artifactId>bamboo-maven-plugin</artifactId>
        <configuration>
          <containerId>${amps.containerId}</containerId>
          <productDataPath>${basedir}/src/test/resources/generated-test-resources.zip</productDataPath>

          <instructions>
            <Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
            <Spring-Context>*</Spring-Context>
            <Import-Package>
              !com.sun.security.auth*,
              junit.framework;version="${junit.version}";resolution:=optional,
              net.bytebuddy.jar.asm.tree;resolution:=optional,
              !oracle*,
              !org.jboss.resource.adapter.jdbc*,
              org.junit*;version="${junit.version}";resolution:=optional,
              org.hamcrest*;version="${hamcrest.version}",
              !org.objectweb.asm*,
              !org.osgi.service.jdbc,
              !org.newsclub.net.unix,
              sun.misc;resolution:="optional",
              !sun.security*,
              !waffle.windows.auth*,
              org.hibernate,
              *
            </Import-Package>
            <Export-Package />
          </instructions>
          <pluginArtifacts>
            <pluginArtifact>
              <groupId>com.atlassian.bamboo.plugins</groupId>
              <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
            </pluginArtifact>
            <pluginArtifact>
              <groupId>com.atlassian.functest</groupId>
              <artifactId>functest-plugin</artifactId>
            </pluginArtifact>
          </pluginArtifacts>

          <systemPropertyVariables>
            <bamboo.allowMutativeGetInStrictXsrfMode>true</bamboo.allowMutativeGetInStrictXsrfMode>
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>

  </build>

  <profiles>
    <profile>
      <id>resolveDeps</id>
      <!-- added for consistency in DB Plan Templates -->
    </profile>

    <!-- Database profiles -->
    <profile>
      <id>mysql</id>

      <properties>
        <db.name>MySQL</db.name>
        <db.provider>${db.name}</db.provider>
        <db.port>3306</db.port>
        <db.host>localhost</db.host>
        <db.admin.username>root</db.admin.username>
        <db.admin.password>root</db.admin.password>
        <db.instance>bamboo-functest</db.instance>
        <mysql.encoding>utf8</mysql.encoding>

        <jdbc.driver>com.mysql.cj.jdbc.Driver</jdbc.driver>
        <dbms.url>jdbc:mysql://${db.host}:${db.port}</dbms.url>
        <jdbc.databaseUrl>${dbms.url}/${db.instance}?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</jdbc.databaseUrl>
        <!-- double XML encoding... so awesome...-->
        <jdbc.url.xmlEscaped>${dbms.url}/${db.instance}?useUnicode=true&amp;amp;characterEncoding=utf8&amp;amp;useSSL=false&amp;amp;allowPublicKeyRetrieval=true</jdbc.url.xmlEscaped>

        <db.dialect>org.hibernate.dialect.MySQL57InnoDBDialect</db.dialect>

        <jdbc.artifactGroup>mysql</jdbc.artifactGroup>
        <jdbc.artifactId>mysql-connector-java</jdbc.artifactId>
        <jdbc.artifactVersion>${mysql.driver.version}</jdbc.artifactVersion>

        <acceptanceTestSettings>db-mysql.properties</acceptanceTestSettings>
      </properties>

      <build>
        <plugins>
          <!-- Drop and recreate database -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>

            <configuration>
              <username>${db.admin.username}</username>
              <password>${db.admin.password}</password>
              <url>${dbms.url}</url>
              <driver>${jdbc.driver}</driver>
            </configuration>

            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE `${db.instance}`;
                    DROP USER '${db.username}'@'${db.host}';
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>

              <execution>
                <id>create-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE DATABASE `${db.instance}` CHARACTER SET ${mysql.encoding} COLLATE ${mysql.encoding}_bin;
                    CREATE USER '${db.username}'@'${db.host}' IDENTIFIED BY '${db.password}';
                    GRANT ALL ON `${db.instance}`.* TO '${db.username}'@'${db.host}';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>mysql-ec2</id>
      <properties>
        <db.admin.username>root</db.admin.username>
        <db.admin.password />
      </properties>
    </profile>

    <profile>
      <id>pgsql</id>

      <properties>
        <db.name>PostgreSQL</db.name>
        <db.port>5432</db.port>
        <db.instance>bamboo-functest</db.instance>
        <db.admin.username>postgres</db.admin.username>
        <db.admin.password />

        <!-- used by maven-sql-plugin -->
        <dbms.url>jdbc:postgresql://${db.host}:${db.port}/postgres</dbms.url>
        <!-- used by Bamboo -->
        <jdbc.databaseUrl>jdbc:postgresql://${db.host}:${db.port}/${db.instance}</jdbc.databaseUrl>

        <db.dialect>com.atlassian.bamboo.hibernate.postgresql.PostgreSQL10TextClobDialect</db.dialect>

        <jdbc.artifactGroup>org.postgresql</jdbc.artifactGroup>
        <jdbc.artifactId>postgresql</jdbc.artifactId>
        <jdbc.artifactVersion>${postgresql.driver.version}</jdbc.artifactVersion>
        <jdbc.driver>org.postgresql.Driver</jdbc.driver>

        <acceptanceTestSettings>db-postgresql.properties</acceptanceTestSettings>
      </properties>

      <build>
        <plugins>
          <!-- Drop and recreate database -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>

            <configuration>
              <username>${db.admin.username}</username>
              <password>${db.admin.password}</password>
              <url>${dbms.url}</url>
              <driver>${jdbc.driver}</driver>
            </configuration>

            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE IF EXISTS "${db.instance}";
                    DROP ROLE IF EXISTS "${db.username}";
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>

              <execution>
                <id>create-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
                    DROP DATABASE template1;
                    CREATE DATABASE template1 WITH template = template0 encoding = 'UTF8';
                    CREATE ROLE "${db.username}" NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN ENCRYPTED PASSWORD '${db.password}';
                    CREATE DATABASE "${db.instance}" WITH OWNER "${db.username}" ENCODING 'UTF8';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>pgsql-ec2</id>
      <properties>
        <db.admin.username>postgres</db.admin.username>
        <db.admin.password />
      </properties>
    </profile>

    <profile>
      <id>oracle</id>

      <properties>
        <db.name>Oracle</db.name>
        <db.port>1521</db.port>
        <db.instance>XE</db.instance>
        <db.admin.username>oracle</db.admin.username>
        <db.admin.password>oracle</db.admin.password>

        <jdbc.databaseUrl>jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}</jdbc.databaseUrl>
        <dbms.url>${jdbc.databaseUrl}</dbms.url>

        <db.dialect>org.hibernate.dialect.Oracle12cDialect</db.dialect>

        <jdbc.artifactGroup>com.oracle</jdbc.artifactGroup>
        <jdbc.artifactId>ojdbc8-atlassian-hosted</jdbc.artifactId>
        <jdbc.artifactVersion>${oracle.driver.version}</jdbc.artifactVersion>
        <jdbc.driver>oracle.jdbc.OracleDriver</jdbc.driver>

        <acceptanceTestSettings>db-oracle12c.properties</acceptanceTestSettings>
      </properties>

      <build>
        <plugins>
          <!-- Drop and recreate database -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>

            <configuration>
              <username>${db.admin.username}</username>
              <password>${db.admin.password}</password>
              <url>${dbms.url}</url>
              <driver>${jdbc.driver}</driver>
            </configuration>

            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP USER ${db.username} CASCADE;
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>

              <execution>
                <id>create-database</id>
                <phase>clean</phase>

                <goals>
                  <goal>execute</goal>
                </goals>

                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE USER ${db.username} identified by ${db.password};
                    GRANT ALL PRIVILEGES TO ${db.username} WITH ADMIN OPTION;
                    GRANT SELECT ANY DICTIONARY TO ${db.username};
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <!--Generic Microsoft SQL Server-->
      <id>mssql</id>

      <properties>
        <db.port>1433</db.port>
        <db.instance>${mssql.db.instance}</db.instance>
        <db.admin.username>sa</db.admin.username>
        <db.admin.password>sa</db.admin.password>

        <db.password>Ighu0jie</db.password> <!-- Windows policy requirements  -->

        <db.host>${mssql.db.host}</db.host>

        <dbms.url>jdbc:sqlserver://${db.host}:${db.port}</dbms.url>
        <jdbc.databaseUrl>jdbc:sqlserver://${db.host}:${db.port};databaseName=${db.instance}</jdbc.databaseUrl>

        <jdbc.artifactGroup>com.microsoft.sqlserver</jdbc.artifactGroup>
        <jdbc.artifactId>mssql-jdbc</jdbc.artifactId>
        <jdbc.artifactVersion>${sqlServer.driver.version}</jdbc.artifactVersion>
        <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>

        <acceptanceTestSettings>db-mssql.properties</acceptanceTestSettings>

        <sqlCreateDb>SELECT @@version; CREATE DATABASE "${db.instance}" CONTAINMENT = PARTIAL COLLATE Latin1_General_CS_AS;</sqlCreateDb>
        <sqlCreateUser>CREATE USER ${db.username} WITH PASSWORD = '${db.password}';</sqlCreateUser>
        <sqlDropUser />
      </properties>

      <build>
        <plugins>
          <!-- Drop and recreate database -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>

            <configuration>
              <username>${db.admin.username}</username>
              <password>${db.admin.password}</password>
              <url>${dbms.url}</url>
              <driver>${jdbc.driver}</driver>
              <printResultSet>true</printResultSet>
            </configuration>

            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <sqlCommand>DROP DATABASE "${db.instance}"; ${sqlDropUser}</sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>

              <execution>
                <id>create-database</id>
                <!--<phase>process-test-resources</phase>-->
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <sqlCommand>${sqlCreateDb}</sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
              <execution>
                <id>post-create-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <sqlCommand>
                    ALTER DATABASE "${db.instance}" SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
                    USE "${db.instance}";
                    ${sqlCreateUser}
                    EXEC sp_addrolemember 'db_owner', '${db.username}';'
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
