#!/bin/bash

. /etc/bash_completion.d/virtualenvwrapper

set -ex
set -o pipefail

SCENARIO=

fail() {
  echo "=== FAILED (" $SCENARIO ")" ${0:-''}
}

test_imports() {
  set +e
  (python -c "import oslo; print(oslo.__path__)" && \
    python -c "import oslo.db;print(oslo.db.__file__)" && \
    python -c "import oslo.config;print(oslo.config.__file__)" && echo "=== OK") || fail
  set -e
}

test_import_workdir() {
  echo === from workdir
  test_imports
  python -c "import oslo.db;print(oslo.db.__file__)" | grep -v packages || fail "imported installed copy/not installed"
}

test_from_workdir() {
  pip freeze | grep oslo.db && pip uninstall -y oslo.db
  cd ~/work/openstack/oslo.db
  pip install -r requirements.txt
  test_import_workdir
}

test_installed() {
  pip freeze | grep oslo.db && pip uninstall -y oslo.db
  cd ~/work/openstack/oslo.db
  pip install .
  test_import_workdir
  cd ..
  echo "=== from installed"
  test_imports
}

test_editable() {
  pip freeze | grep oslo.db && pip uninstall -y oslo.db
  cd ~/work/openstack/oslo.db
  pip install -e .
  test_import_workdir
  cd ..
  echo === from -e link
  test_imports
}

mk_venv() {
  set +ex
  deactivate
  rmvirtualenv test-system-site
  mkvirtualenv --system-site-packages test-system-site
  set -ex
  pip install ~/work/pbr
}

install_config_packaged() {
  CONFIGMODE=globalpackaged
  sudo apt-get install -y python-oslo.config
  sudo apt-get install -y python-oslo.sphinx
}

install_config_editable() {
  CONFIGMODE=globaleditable
  sudo pip install -e ~/work/openstack/oslo.config
  sudo apt-get install -y python-oslo.sphinx
}

clean_slate() {
  # No oslo.config installed at all.
  set +e
  sudo apt-get remove -y python-oslo.config
  sudo pip uninstall oslo.config
  sudo rm /usr/local/lib/python2.7/dist-packages/easy-install.pth
  sudo rm /usr/local/lib/python2.7/dist-packages/oslo.config.egg-link
  set -e
}

test_venv() {
  mk_venv
  OSLOMODE=installed
  pip install ~/work/oslo
  SCENARIO="config($CONFIGMODE),oslo($OSLOMODE)"
  test_from_workdir
  test_editable
  test_installed
}

test_venv_oslo_editable() {
  mk_venv
  OSLOMODE=editable
  pip install -e ~/work/oslo
  SCENARIO="config($CONFIGMODE),oslo($OSLOMODE)"
  test_from_workdir
  test_editable
  test_installed
}

test_venv

clean_slate
install_config_packaged
test_venv
test_venv_oslo_editable

clean_slate
install_config_editable
test_venv
test_venv_oslo_editable
