#!/bin/bash
# Copyright (c) 2021 The Flatcar Maintainers.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -euo pipefail

# Test execution script for the azure vendor image.
# This script is supposed to run in the mantle container.

source ci-automation/vendor_test.sh

# $@ now contains tests / test patterns to run

board="${CIA_ARCH}-usr"
basename="ci-${CIA_VERNUM//+/-}-${CIA_ARCH}"
azure_instance_type_var="AZURE_${CIA_ARCH}_MACHINE_SIZE"
azure_instance_type="${!azure_instance_type_var}"
azure_vnet_subnet_name="jenkins-vnet-${AZURE_LOCATION}"

# Fetch the Azure image if not present
if [ -f "${AZURE_IMAGE_NAME}" ] ; then
    echo "++++ ${CIA_TESTSCRIPT}: Using existing ${AZURE_IMAGE_NAME} for testing ${CIA_VERNUM} (${CIA_ARCH}) ++++"
else
    echo "++++ ${CIA_TESTSCRIPT}: downloading ${AZURE_IMAGE_NAME} for ${CIA_VERNUM} (${CIA_ARCH}) ++++"
    copy_from_buildcache "images/${CIA_ARCH}/${CIA_VERNUM}/${AZURE_IMAGE_NAME}.bz2" .
    cp --sparse=always <(lbzcat "${AZURE_IMAGE_NAME}.bz2") "${AZURE_IMAGE_NAME}"
    rm "${AZURE_IMAGE_NAME}.bz2"
fi

run_kola_tests() {
    local instance_type="${1}"; shift
    local instance_tapfile="${1}"; shift
    local hyperv_gen sku

    if [ "${instance_type}" = "V1" ]; then
        hyperv_gen="V1"
        sku="alpha"
        # v5 is the last to support Gen 1. Only amd64 uses Gen 1.
        instance_type="Standard_D2s_v5"
    else
        hyperv_gen="V2"
        sku="alpha-gen2"
        set -- --azure-use-gallery "${@}"
    fi

    # Align timeout with ore azure gc --duration parameter
    timeout --signal=SIGQUIT 6h \
      kola run \
      --board="${board}" \
      --basename="${basename}" \
      --parallel="${AZURE_PARALLEL}" \
      --offering=basic \
      --platform=azure \
      --azure-image-file="${AZURE_IMAGE_NAME}" \
      --azure-location="${AZURE_LOCATION}" \
      --tapfile="${instance_tapfile}" \
      --azure-size="${instance_type}" \
      --azure-sku="${sku}" \
      --azure-hyper-v-generation="${hyperv_gen}" \
      ${AZURE_USE_GALLERY} \
      ${AZURE_KOLA_VNET:+--azure-kola-vnet=${AZURE_KOLA_VNET}} \
      ${azure_vnet_subnet_name:+--azure-vnet-subnet-name=${azure_vnet_subnet_name}} \
      ${AZURE_USE_PRIVATE_IPS:+--azure-use-private-ips=${AZURE_USE_PRIVATE_IPS}} \
      --image-version "${CIA_VERNUM}" \
      "${@}"
}

query_kola_tests() {
    shift; # ignore the instance type
    kola list --platform=azure --filter "${@}"
}

other_instance_types=()
if [[ "${CIA_ARCH}" = 'amd64' ]]; then
    other_instance_types+=('V1' 'Standard_NC6s_v3')
fi

run_kola_tests_on_instances \
    "${azure_instance_type}" \
    "${CIA_TAPFILE}" \
    "${CIA_FIRST_RUN}" \
    "${other_instance_types[@]}" \
    '--' \
    'cl.internet' 'cl.misc.nvidia'\
    '--' \
    "${@}"
