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

<settings>
  <profiles>
    <profile>
      <id>maven-core-it-repo</id>
      <repositories>
        <repository>
          <!-- This one will be matched by exact id -->
          <id>maven-core-it-a</id>
          <url>http://maven.apache.org/null</url>
          <releases>
            <checksumPolicy>ignore</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
        <repository>
          <!-- This one will be matched by pattern -->
          <id>maven-core-it-b</id>
          <url>http://maven.apache.org/null</url>
          <releases>
            <checksumPolicy>ignore</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>maven-core-it-repo</activeProfile>
  </activeProfiles>

  <mirrors>
    <!--
    NOTE: The next block of mirrors matches the first test repo by exact id.
    -->

    <!-- The first match should win, so we have all later matching mirrors point to nowhere -->
    <mirror>
      <id>mirror-a1</id>
      <url>@baseurl@/repo-1</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>
    <!-- NOTE: Use multiple mirrors to reduce likelihood of random test success -->
    <mirror>
      <id>mirror-a2</id>
      <url>@baseurl@/null0</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-a3</id>
      <url>@baseurl@/null1</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-a4</id>
      <url>@baseurl@/null2</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-a5</id>
      <url>@baseurl@/null3</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-a6</id>
      <url>@baseurl@/null4</url>
      <mirrorOf>maven-core-it-a</mirrorOf>
    </mirror>

    <!--
    NOTE: The next block of mirrors matches the second test repo by a pattern which is distinct for each mirror.
    -->

    <!-- The first match should win, so we have all later matching mirrors point to nowhere -->
    <mirror>
      <id>mirror-b1</id>
      <url>@baseurl@/repo-2</url>
      <mirrorOf>maven-core-it-b,foo-a</mirrorOf>
    </mirror>
    <!-- NOTE: Use multiple mirrors to reduce likelihood of random test success -->
    <mirror>
      <id>mirror-b2</id>
      <url>@baseurl@/null0</url>
      <mirrorOf>maven-core-it-b,foo-b</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-b3</id>
      <url>@baseurl@/null1</url>
      <mirrorOf>maven-core-it-b,foo-c</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-b4</id>
      <url>@baseurl@/null2</url>
      <mirrorOf>maven-core-it-b,foo-d</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-b5</id>
      <url>@baseurl@/null3</url>
      <mirrorOf>maven-core-it-b,foo-e</mirrorOf>
    </mirror>
    <mirror>
      <id>mirror-b6</id>
      <url>@baseurl@/null4</url>
      <mirrorOf>maven-core-it-b,foo-f</mirrorOf>
    </mirror>
  </mirrors>
</settings>
