# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file is a source of truth for what platforms are available for testing
# and what dimensions they possess to match against.
#
# Please do not update this file; contact fuchsia-infra-team@google.com with any
# questions.
#
# Swarming is the task distribution system used by Fuchsia to run automated
# builds. A dimension is a formal Swarming concept effectively given by a
# key-value pair; it describes a bot property that can be targeted. Below are
# the published dimensions for the platforms we have available to test on.
# For more general Swarming documentation see
# https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/appengine/swarming/doc/

# All Swarming dimension keys that Fuchsia test authors may use to target test
# platforms.
all_dimension_keys = [
  "device_type",
  "cpu",
  "os",
  "pool",
  "testbed",
]

# Scopes of dimensions for every available platform.
test_platforms = [
  {
    device_type = "Atlas"
    cpu = "x64"
  },
  {
    device_type = "AEMU"
    cpu = "x64"
  },
  {
    device_type = "QEMU"
    cpu = "x64"
  },
  {
    device_type = "QEMU"
    cpu = "arm64"
  },
  {
    device_type = "QEMU"
    cpu = "riscv64"
  },
  {
    device_type = "Intel NUC Kit NUC7i5DNHE"
    cpu = "x64"
  },
  {
    device_type = "Intel NUC Kit NUC11TNHv5"
    cpu = "x64"
  },
  {
    device_type = "Astro"
    cpu = "arm64"
  },
  {
    os = "Linux"
    cpu = "x64"
  },
  {
    os = "Linux"
    cpu = "arm64"
  },
  {
    device_type = "Luis"
    cpu = "arm64"
  },

  # TODO(https://fxbug.dev/42061983): While mac-arm64 hosts are not actually targetable
  # at this time, it is easy evaluate code for this environment today as a
  # matter of course (e.g., in bringing up the mac-arm64 host as a development
  # environment or in evaluating an arm64 boot test on a mac host of a different
  # architecture) and so this definition serves to suppress any spurious GN
  # 'unknown mac-arm64 test envimonent' assertions.
  {
    os = "Mac"
    cpu = "arm64"
  },
  {
    os = "Mac"
    cpu = "x64"
  },
  {
    device_type = "Sherlock"
    cpu = "arm64"
  },
  {
    testbed = "pwr_sherlock"
    cpu = "arm64"
    pool = "fuchsia.tests.power-failure"
    device_type = "Sherlock"
  },
  {
    testbed = "bt_astro_astro"
    cpu = "arm64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Astro"
  },
  {
    testbed = "bt_rf_chamber_nuc_phone"
    cpu = "x64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Intel NUC Kit NUC7i5DNHE"
  },
  {
    testbed = "bt_rf_chamber_nuc_nuc"
    cpu = "x64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Intel NUC Kit NUC7i5DNHE"
  },
  {
    testbed = "wifi_rf_chamber_astro"
    cpu = "arm64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Astro"
  },
  {
    testbed = "wifi_rf_chamber_fiber_astro"
    cpu = "arm64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Astro"
  },
  {
    testbed = "wifi_rf_chamber_nuc"
    cpu = "x64"
    pool = "fuchsia.tests.connectivity"
    device_type = "Intel NUC Kit NUC7i5DNHE"
  },
  {
    testbed = "astro_thermal"
    cpu = "arm64"
    pool = "fuchsia.tests.thermal"
    device_type = "Astro"
  },
  {
    testbed = "nelson_thermal"
    cpu = "arm64"
    pool = "fuchsia.tests.thermal"
    device_type = "Nelson"
  },
  {
    testbed = "sherlock_thermal"
    cpu = "arm64"
    pool = "fuchsia.tests.thermal"
    device_type = "Sherlock"
  },
  {
    cpu = "x64"
    pool = "fuchsia.tests.anvl"
    os = "Linux"
  },

  # Experimental/FYI.
  # https://fxbug.dev/42120306
  {
    device_type = "Nelson"
    cpu = "arm64"
  },

  # https://fxbug.dev/42141273
  {
    device_type = "Vim3"
    cpu = "arm64"
  },

  # https://fxbug.dev/42172814
  {
    device_type = "GCE"
    cpu = "arm64"
  },
  {
    device_type = "GCE"
    cpu = "x64"
  },

  # Testbeds with auxiliary devices for E2E tests
  {
    access_points = "1"
    device_type = "Astro"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Astro"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    attenuators = "1"
    device_type = "Astro"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Sherlock"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Sherlock"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    attenuators = "1"
    device_type = "Sherlock"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Nelson"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Nelson"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    attenuators = "1"
    device_type = "Nelson"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Intel NUC Kit NUC11TNHv5"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Intel NUC Kit NUC11TNHv5"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    attenuators = "1"
    device_type = "Intel NUC Kit NUC11TNHv5"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Vim3"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    device_type = "Vim3"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    access_points = "1"
    attenuators = "1"
    device_type = "Vim3"
    iperf_servers = "1"
    pool = "fuchsia.tests.connectivity"
  },
  {
    device_type = "Sherlock"
    pool = "fuchsia.tests.bluetooth"
    sherlocks = "2"
    testbed = "lacewing_bt_Sherlock"
  },
  {
    device_type = "Vim3"
    pool = "fuchsia.tests.bluetooth"
    testbed = "lacewing_bt_vim3"
    vim3s = "2"
  },
]
