#! /usr/bin/env bash

#   COPYRIGHT NOTICE STARTS HERE

#   Copyright 2019 © Samsung Electronics Co., Ltd.
#
#   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.

#   COPYRIGHT NOTICE ENDS HERE

#
# This is a main wrapper script to run Molecule tests
# Main usage is for the CI usage to keep interface stable and the way to call
# Molecule can be adjusted in this script independently.
#

SCRIPT_DIR=$(dirname "${0}")
LOCAL_PATH=$(readlink -f "$SCRIPT_DIR")

ROLE_PATH=$1
MOLECULE_CONTAINER=${MOLECULE_CONTAINER:-true}

echo "Build all pre-build images"
${LOCAL_PATH}/../images/docker/build-all.sh

# Use Molecule container
if [ "${MOLECULE_CONTAINER}" == "true" ]; then
    echo "Build Molecule-dev docker container"
    ${LOCAL_PATH}/../molecule-docker/build.sh
    MOLECULE_BINARY=${LOCAL_PATH}/../bin/molecule.sh

else # Install Molecule natively in the target platform
    echo "Install Molecule with virtualenv"
    source ${LOCAL_PATH}/../bin/install-molecule.sh
    MOLECULE_BINARY=molecule
fi

${MOLECULE_BINARY} --version

cd ${ROLE_PATH}
${MOLECULE_BINARY} test --all
cd -
