#!/usr/bin/env bash
# Copyright 2019 Red Hat, Inc.
# 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.


## Functions -----------------------------------------------------------------
function usage {
    echo "Usage: ROLE_NAME=ROLE_NAME ${0##*/} or ${0##*/} ROLE_NAME"
}

## Vars ----------------------------------------------------------------------

export PROJECT_DIR="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/../"
if [ "${ROLE_NAME}x" = "x" -a "${1}x" = "x" ]; then
    usage;
    exit 2
fi
export ROLE_NAME="${ROLE_NAME:-$1}"
export TRIPLEO_JOB_ANSIBLE_ARGS=${TRIPLEO_JOB_ANSIBLE_ARGS:-""}

## Shell Opts ----------------------------------------------------------------

set -o pipefail
set -xeuo

## Main ----------------------------------------------------------------------

# Source distribution information
source /etc/os-release || source /usr/lib/os-release
RHT_PKG_MGR=$(command -v dnf || command -v yum)
PYTHON_EXEC=$(command -v python3 || command -v python)

# Install the one requirement we need to run any local test
case "${ID,,}" in
    amzn|rhel|centos|fedora)
        sudo "${RHT_PKG_MGR}" install -y python*-virtualenv
        ;;
esac

# Ensure the required ci file is present
sudo mkdir -p /etc/ci
sudo touch /etc/ci/mirror_info.sh

# Create a virtual env
"${PYTHON_EXEC}" -m virtualenv --system-site-packages "${HOME}/test-python"

# Activate a virtual env
PS1="[\u@\h \W]\$" source "${HOME}/test-python/bin/activate"

# Run bindep
"${HOME}/test-python/bin/pip" install "pip>=19.1.1" setuptools bindep --upgrade
"${PROJECT_DIR}/scripts/bindep-install"

# Install local requirements
if [[ -d "${HOME}/.cache/pip/wheels" ]]; then
    rm -rf "${HOME}/.cache/pip/wheels"
fi
"${HOME}/test-python/bin/pip" install \
                              -r "${PROJECT_DIR}/requirements.txt" \
                              -r "${PROJECT_DIR}/test-requirements.txt" \
                              -r "${PROJECT_DIR}/molecule-requirements.txt"

# Run local test
source "${PROJECT_DIR}/ansible-test-env.rc"
export ANSIBLE_ROLES_PATH="${ANSIBLE_ROLES_PATH}:${HOME}/zuul-jobs/roles"
ansible-playbook -i "${PROJECT_DIR}/tests/hosts.ini" \
                 -e "tripleo_src=$(realpath --relative-to="${HOME}" "${PROJECT_DIR}")" \
                 -e "validations_common_role_name=${ROLE_NAME}" \
                 -e "tripleo_job_ansible_args='${TRIPLEO_JOB_ANSIBLE_ARGS}'" \
                 -e "ansible_user=${USER}" \
                 -e "ansible_user_dir=${HOME}" \
                 "${PROJECT_DIR}/tests/prepare-test-host.yml" \
                 "${PROJECT_DIR}/playbooks/molecule/run-local.yml" \
                 -v
