<?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.0.0</version>
  </parent>

  <artifactId>atlassian-bamboo-tests-parent</artifactId>
  <packaging>pom</packaging>

  <name>Atlassian Bamboo Tests Parent</name>

  <properties>
    <db.host>localhost</db.host>
    <db.username>bamboo_functest</db.username>
    <db.password>bamboo_functest</db.password>
    <db.instance>bamboo_functest</db.instance>

    <!-- properties used by sql-maven-plugin to setup/drop test DB -->
    <db.admin.username />
    <db.admin.password />
    <db.admin.url />
    <jdbc.driver />
  </properties>

  <modules>
    <module>bamboo-upgrade-tests</module>
    <module>bamboo-plugin-points-test</module>
    <module>bamboo-docker-images-tests</module>
  </modules>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>sql-maven-plugin</artifactId>
          <configuration>
            <username>${db.admin.username}</username>
            <password>${db.admin.password}</password>
            <url>${db.admin.url}</url>
            <driver>${jdbc.driver}</driver>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <!-- DB profiles -->
    <!-- Profile for running Bamboo with MySQL -->
    <profile>
      <id>mysql</id>
      <properties>
        <db.host>mysql</db.host>
        <db.port>3306</db.port>
        <db.admin.username>root</db.admin.username>
        <db.admin.password>root</db.admin.password>
        <db.admin.url>jdbc:mysql://${db.host}:${db.port}</db.admin.url>
        <db.username>bamboo</db.username>
        <db.password>bamboo</db.password>
        <jdbc.driver>com.mysql.cj.jdbc.Driver</jdbc.driver>

        <db.url>jdbc:mysql://${db.host}:${db.port}/${db.instance}?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</db.url>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bamboo-maven-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>mysql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>${db.url}</acceptance.test.db.jdbc.databaseUrl>
              </systemPropertyVariables>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <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 UTF8 COLLATE utf8_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 for running Bamboo with MSSQL -->
    <profile>
      <id>mssql</id>
      <properties>
        <db.port>1433</db.port>
        <db.admin.username>sa</db.admin.username>
        <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
        <db.admin.url>jdbc:sqlserver://${db.host}:${db.port}</db.admin.url>
        <db.password>Ighu0jie</db.password> <!-- Windows policy requirements  -->
      </properties>
    </profile>
    <profile>
      <id>mssql-remote</id>
      <properties>
        <db.instance>${mssql.db.instance}</db.instance>
        <db.host>${mssql.db.host}</db.host>
        <db.admin.password>sa</db.admin.password>

        <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>

        <db.url>jdbc:sqlserver://${db.host}:${db.port};databaseName=${db.instance}</db.url>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bamboo-maven-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>mssql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>${db.url}</acceptance.test.db.jdbc.databaseUrl>
              </systemPropertyVariables>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE "${db.instance}";
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>
              <execution>
                <id>create-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE DATABASE "${db.instance}" CONTAINMENT = PARTIAL COLLATE Latin1_General_CS_AS;
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
              <execution>
                <id>add-user-to-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    ALTER DATABASE "${db.instance}" SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
                    USE "${db.instance}";
                    CREATE USER ${db.username} WITH PASSWORD = '${db.password}';
                    EXEC sp_addrolemember 'db_owner', '${db.username}';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>mssql-docker</id>
      <properties>
        <db.instance>bamboo</db.instance>
        <db.host>localhost</db.host>

        <db.admin.password>Passw0rd</db.admin.password>
        <db.url>${db.admin.url};databaseName=${db.instance}</db.url>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bamboo-maven-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>mssql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>${db.url}</acceptance.test.db.jdbc.databaseUrl>
              </systemPropertyVariables>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>create-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE DATABASE "${db.instance}" COLLATE Latin1_General_CS_AS;
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
              <execution>
                <id>add-user-to-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    ALTER DATABASE "${db.instance}" SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
                    CREATE LOGIN ${db.username} WITH PASSWORD = '${db.password}', DEFAULT_DATABASE=master, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
                    USE "${db.instance}";
                    ALTER AUTHORIZATION ON DATABASE::${db.instance} TO ${db.username};
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Profile for running Bamboo with Oracle -->
    <profile>
      <!-- docker run -p 1521:1521 docker.atl-paas.net/atlassian/jira/server/oracle-database:12.2.0.1-se2-1.2.0-warm-1.1.0-->
      <id>oracle</id>
      <properties>
        <db.port>1521</db.port>
        <db.host>oracle</db.host>
        <db.admin.username>sys</db.admin.username>
        <db.admin.password>oracle</db.admin.password>
        <db.instance>JIRADB</db.instance>
        <db.admin.url>jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}</db.admin.url>
        <db.username>jira</db.username>
        <db.password>jira</db.password>
        <jdbc.driver>oracle.jdbc.OracleDriver</jdbc.driver>

        <db.url>jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}</db.url>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bamboo-maven-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>oracle12c</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>${db.url}</acceptance.test.db.jdbc.databaseUrl>
              </systemPropertyVariables>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Profile for running Bamboo with PostgreSQL -->
    <profile>
      <id>pgsql</id>
      <properties>
        <db.port>5432</db.port>
        <db.host>postgres</db.host>
        <db.admin.username>postgres</db.admin.username>
        <db.admin.password>postgres</db.admin.password>
        <db.admin.url>jdbc:postgresql://${db.host}:${db.port}/postgres</db.admin.url>
        <jdbc.driver>org.postgresql.Driver</jdbc.driver>

        <db.url>jdbc:postgresql://${db.host}:${db.port}/${db.instance}</db.url>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>bamboo-maven-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>postgresql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>${db.url}</acceptance.test.db.jdbc.databaseUrl>
              </systemPropertyVariables>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <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>
                    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>
  </profiles>

</project>
