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