#!/bin/bash
# ============LICENSE_START=======================================================
#  Copyright (C) 2020 The Nordix Foundation. All rights reserved.
# ================================================================================
# Licensed 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

set -o errexit
set -o nounset
set -o pipefail

#-------------------------------------------------------------------------------
# Find and set where we are
#-------------------------------------------------------------------------------
STACK_ROOT_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
export STACK_ROOT_DIR

#-------------------------------------------------------------------------------
# Prepare artifacts for offline test
#-------------------------------------------------------------------------------
echo "Info: Prepare artifacts for offline test "
echo "-------------------------------------------------------------------------"
cd "${TEST_PATH}"
ansible-playbook "${ENGINE_ANSIBLE_PARAMS[@]}" \
-i "${TEST_PATH}/test/inventory/inventory.ini" \
 "${STACK_ROOT_DIR}/playbooks/prepare-artifacts.yaml"
echo "-------------------------------------------------------------------------"

#-------------------------------------------------------------------------------
# Bootstrap custom definition 
#-------------------------------------------------------------------------------
if [[ -n ${CUSTOM_DEFINITION+x} ]]; then 
  echo "var is set to '$CUSTOM_DEFINITION'";
  export CUSTOM_DEFINITION="${CUSTOM_DEFINITION}"
  cp "$CUSTOM_DEFINITION" "${ENGINE_PATH}/engine/inventory/group_vars/all/custom_definition.yaml"
fi

#-------------------------------------------------------------------------------
# Prepare test framework
#-------------------------------------------------------------------------------
echo "Info  : Preparing test framework"
echo "-------------------------------------------------------------------------"
cd "${STACK_ROOT_DIR}"
ansible-playbook "${TEST_ANSIBLE_PARAMS[@]}" \
  -i "${TEST_PATH}/test/inventory/inventory.ini" \
  "${STACK_ROOT_DIR}/playbooks/prepare-testframework.yaml"
echo "-------------------------------------------------------------------------"

#-------------------------------------------------------------------------------
# Run tests
#-------------------------------------------------------------------------------
echo "Info  : Running tests"
echo "-------------------------------------------------------------------------"
cd "${STACK_ROOT_DIR}"
ansible-playbook "${TEST_ANSIBLE_PARAMS[@]}" \
  -i "${TEST_PATH}/test/inventory/inventory.ini" \
  "${STACK_ROOT_DIR}//playbooks/run-tests.yaml"
echo "-------------------------------------------------------------------------"

# vim: set ts=2 sw=2 expandtab:
