#!/usr/bin/env bash testAirflow() { export SLUGIFY_USES_TEXT_UNIDECODE="yes" compile "airflow" assertCaptured "apache-airflow==1.10.2" assertCapturedSuccess } testPipenv() { compile "pipenv" assertCapturedSuccess } testPipenvLock() { compile "pipenv-lock" assertCapturedSuccess } testPipenvVersion() { compile "pipenv-version" assertCaptured "3.6.8" assertCapturedSuccess } testPipenvVersion2() { compile "pipenv-version2" assertCaptured "2.7.15" assertCapturedSuccess } testPipenvFullVersion() { compile "pipenv-full-version" assertCaptured "3.6.3" assertCapturedSuccess } testNoRequirements() { compile "no-requirements" assertCapturedError } testCollectstatic() { compile "collectstatic" assertCaptured "collectstatic" } testGEOS() { export BUILD_WITH_GEO_LIBRARIES=1 compile "geos" assertCaptured "geos" assertCapturedSuccess } testNLTK() { # NOTE: This is a RuntimeWarning emitted by Python 3's runpy.py script # which is what is used when you call `python -m `. This is due to # how nltk imports things. It's not actually an error, but it would probably # be bad to silence in Production. export PYTHONWARNINGS="ignore::RuntimeWarning" compile "nltk" assertCaptured "[nltk_data] Downloading package city_database" "STD_ERR" assertCapturedSuccess } testSetupPy() { compile "setup-py" assertCaptured "maya" assertCapturedSuccess } testStandardRequirements() { compile "requirements-standard" assertCaptured "requests" assertCapturedSuccess } testPsycopg2() { compile "psycopg2" assertCaptured "psycopg2" assertCapturedSuccess } testCffi() { compile "cffi" assertCaptured "cffi" assertCapturedSuccess } testPylibmc() { compile "pylibmc" assertCaptured "pylibmc" assertCapturedSuccess } testPythonDefault() { compile "pythonDefault" assertCaptured "python-3.6.8" assertCapturedSuccess } testPython2() { compile "python2" assertCaptured "python-2.7.15" assertCapturedSuccess } testPython2_warn() { compile "python2_warn" if [[ $STACK = "heroku-18" ]]; then assertCapturedError else assertCaptured "python-2.7.14" assertCaptured "security update!" assertCapturedSuccess fi } testPython2_fail() { compile "python2_fail" assertCaptured "Aborting" assertCapturedError } testPython3_4() { compile "python3_4" assertCaptured "python-3.4.9" assertCapturedSuccess } testPython3_4_warn() { compile "python3_4_warn" if [[ $STACK = "cedar-14" ]]; then assertCaptured "python-3.4.0" assertCaptured "security update!" assertCapturedSuccess else assertCapturedError fi } testPython3_4_fail() { compile "python3_4_fail" assertCaptured "Aborting" assertCapturedError } testPython3_5() { compile "python3_5" assertCaptured "python-3.5.6" assertCapturedSuccess } testPython3_5_warn() { compile "python3_5_warn" if [[ $STACK = "cedar-14" ]]; then assertCaptured "python-3.5.3" assertCaptured "security update!" assertCapturedError else assertCapturedError fi } testPython3_5_fail() { compile "python3_5_fail" assertCaptured "Aborting" assertCapturedError } testPython3_6() { compile "python3_6" assertCaptured "python-3.6.8" assertCapturedSuccess } testPython3_6_warn() { compile "python3_6_warn" assertCaptured "python-3.6.7" assertCaptured "security update!" assertCapturedSuccess } testPython3_6_fail() { compile "python3_6_fail" assertCaptured "Aborting" assertCapturedError } testPython3_7() { compile "python3_7" if [[ $STACK = "cedar-14" ]]; then assertCapturedError else assertCaptured "python-3.7.2" assertCapturedSuccess fi } testPython3_7_warn() { compile "python3_7_warn" if [[ $STACK = "cedar-14" ]]; then assertCapturedError else assertCaptured "python-3.7.1" assertCaptured "security update!" assertCapturedSuccess fi } testPython3_7_fail() { compile "python3_7_fail" assertCaptured "Aborting" assertCapturedError } testGitEgg() { compile "git-egg" assertCaptured "requests" assertCapturedSuccess } testSmartRequirements() { local cache_dir="$(mktmpdir)" compile "requirements-standard" "$cache_dir" assertFile "requests" ".heroku/python/requirements-declared.txt" assertCapturedSuccess compile "psycopg2" "$cache_dir" assertCaptured "Uninstalling requests" assertFile "psycopg2" ".heroku/python/requirements-declared.txt" assertCapturedSuccess } testStackChange() { local cache_dir="$(mktmpdir)" mkdir -p "${cache_dir}/.heroku" echo "different-stack" > "${cache_dir}/.heroku/python-stack" compile "requirements-standard" "$cache_dir" assertCaptured "clearing cache" assertFile "$STACK" ".heroku/python-stack" assertCapturedSuccess } pushd $(dirname 0) >/dev/null popd >/dev/null source $(pwd)/test/utils mktmpdir() { dir=$(mktemp -t testXXXXX) rm -rf $dir mkdir $dir echo $dir } detect() { capture $(pwd)/bin/detect $(pwd)/test/fixtures/$1 } compile_dir="" default_process_types_cleanup() { file="/tmp/default_process_types" if [ -f "$file" ]; then rm "$file" fi } compile() { default_process_types_cleanup bp_dir=$(mktmpdir) compile_dir=$(mktmpdir) cp -a $(pwd)/* ${bp_dir} cp -a ${bp_dir}/test/fixtures/$1/. ${compile_dir} capture ${bp_dir}/bin/compile ${compile_dir} ${2:-$(mktmpdir)} $3 } compileDir() { default_process_types_cleanup local bp_dir=$(mktmpdir) local compile_dir=${1:-$(mktmpdir)} local cache_dir=${2:-$(mktmpdir)} local env_dir=$3 cp -a $(pwd)/* ${bp_dir} capture ${bp_dir}/bin/compile ${compile_dir} ${cache_dir} ${env_dir} } release() { bp_dir=$(mktmpdir) cp -a $(pwd)/* ${bp_dir} capture ${bp_dir}/bin/release ${bp_dir}/test/fixtures/$1 } assertFile() { assertEquals "$1" "$(cat ${compile_dir}/$2)" } source $(pwd)/test/shunit2