From c2ad1c8d0802b09fc9d77a14e7e58d2c34b0f134 Mon Sep 17 00:00:00 2001
From: OpenStack Proposal Bot <openstack-infra@lists.openstack.org>
Date: Tue, 27 Mar 2018 15:49:33 +0000
Subject: [PATCH] Updated from OpenStack Ansible Tests

Change-Id: I492feadde213c017af10da9b46e67d857e2a20eb
---
 .gitignore   |  1 +
 run_tests.sh | 73 ++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 54 insertions(+), 20 deletions(-)

diff --git a/.gitignore b/.gitignore
index 5421f904..968d8b98 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,3 +69,4 @@ tests/*.retry
 
 # Git clones
 openstack-ansible-ops
+previous
diff --git a/run_tests.sh b/run_tests.sh
index 4b72d3fa..a31f9464 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -12,8 +12,14 @@
 # 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.
-#
-# Note:
+
+# PURPOSE:
+# This script clones the openstack-ansible-tests repository to the
+# tests/common folder in order to be able to re-use test components
+# for role testing. This is intended to be the thinnest possible
+# shim for test execution outside of OpenStack CI.
+
+# WARNING:
 # This file is maintained in the openstack-ansible-tests repository.
 # https://git.openstack.org/cgit/openstack/openstack-ansible-tests/tree/run_tests.sh
 # If you need to modify this file, update the one in the openstack-ansible-tests
@@ -26,33 +32,60 @@ set -xeu
 
 ## Vars ----------------------------------------------------------------------
 
-export WORKING_DIR=${WORKING_DIR:-$(pwd)}
+WORKING_DIR="$(readlink -f $(dirname $0))"
+
+COMMON_TESTS_PATH="${WORKING_DIR}/tests/common"
+TESTING_HOME=${TESTING_HOME:-$HOME}
+ZUUL_TESTS_CLONE_LOCATION="/home/zuul/src/git.openstack.org/openstack/openstack-ansible-tests"
+
+# Use .gitreview as the key to determine the appropriate
+# branch to clone for tests.
+TESTING_BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' "${WORKING_DIR}/.gitreview")
+if [[ "${TESTING_BRANCH}" == "" ]]; then
+  TESTING_BRANCH="master"
+fi
 
 ## Main ----------------------------------------------------------------------
 
+# Source distribution information
 source /etc/os-release || source /usr/lib/os-release
 
-install_pkg_deps() {
-    pkg_deps="git"
+# Prefer dnf over yum for CentOS.
+which dnf &>/dev/null && RHT_PKG_MGR='dnf' || RHT_PKG_MGR='yum'
 
-    # Prefer dnf over yum for CentOS.
-    which dnf &>/dev/null && RHT_PKG_MGR='dnf' || RHT_PKG_MGR='yum'
+# Figure out the appropriate package install command
+case ${ID,,} in
+    *suse*) pkg_mgr_cmd="zypper -n in" ;;
+    centos|rhel|fedora) pkg_mgr_cmd="${RHT_PKG_MGR} install -y" ;;
+    ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;;
+    *) echo "unsupported distribution: ${ID,,}"; exit 1 ;;
+esac
 
-    case ${ID,,} in
-        *suse*) pkg_mgr_cmd="zypper -n in" ;;
-        centos|rhel|fedora) pkg_mgr_cmd="${RHT_PKG_MGR} install -y" ;;
-        ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;;
-        *) echo "unsupported distribution: ${ID,,}"; exit 1 ;;
-    esac
-
-    eval sudo $pkg_mgr_cmd $pkg_deps
-}
-
-# Install the host distro package dependencies
-install_pkg_deps
+# Install git so that we can clone the tests repo
+eval sudo $pkg_mgr_cmd git
 
 # Clone the tests repo for access to the common test script
-source tests/tests-repo-clone.sh
+if [[ ! -d ${COMMON_TESTS_PATH} ]]; then
+    # The tests repo doesn't need a clone, we can just
+    # symlink it.
+    if [[ "$(basename ${WORKING_DIR})" == "openstack-ansible-tests" ]]; then
+        ln -s ${WORKING_DIR} ${COMMON_TESTS_PATH}
+
+    # In zuul v3 any dependent repository is placed into
+    # /home/zuul/src/git.openstack.org, so we check to see
+    # if there is a tests checkout there already. If so, we
+    # symlink that and use it.
+    elif [[ -d "${ZUUL_TESTS_CLONE_LOCATION}" ]]; then
+        ln -s "${ZUUL_TESTS_CLONE_LOCATION}" ${COMMON_TESTS_PATH}
+
+    # Otherwise we're clearly not in zuul or using a previously setup
+    # repo in some way, so just clone it from upstream.
+    else
+        git clone -b ${TESTING_BRANCH} \
+            https://git.openstack.org/openstack/openstack-ansible-tests \
+            ${COMMON_TESTS_PATH}
+    fi
+fi
 
 # Execute the common test script
 source tests/common/run_tests_common.sh