From 3c4fdb0659d19aa947eb052718e166cf64c2980b Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 20 Jan 2019 16:51:45 +0530 Subject: [PATCH] Mac test utility (#986) A utility for running individual or all tests on a Mac dev machine without changing the test script. --- test/run_test_mac.sh | 93 +++++++++++++++++++ test/tests/test_buildermgr.sh | 5 +- test/tests/test_canary.sh | 2 + test/tests/test_environments/test_go_env.sh | 6 +- .../test_environments/test_java_builder.sh | 9 +- .../test_fn_update/test_configmap_update.sh | 1 + test/tests/test_fn_update/test_env_update.sh | 2 +- .../test_fn_update/test_secret_update.sh | 4 +- test/tests/test_function_update.sh | 2 + test/tests/test_internal_routes.sh | 12 ++- test/tests/test_obj_create_in_diff_ns.sh | 4 +- test/tests/test_package_command.sh | 3 + .../test_secret_cfgmap/test_secret_cfgmap.sh | 2 + test/tests/test_specs/test_spec.sh | 9 +- test/tests/test_specs/test_spec_multifile.sh | 8 ++ 15 files changed, 148 insertions(+), 14 deletions(-) create mode 100755 test/run_test_mac.sh diff --git a/test/run_test_mac.sh b/test/run_test_mac.sh new file mode 100755 index 00000000..521654b9 --- /dev/null +++ b/test/run_test_mac.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash + +#### Purpose #### +# The purpose of this script is to enable running some/all of test scripts locally on mac so that +# you don't have to always rely on CI cycle for feedback. + +#### Usage #### +# For running a specific test: +# ./run_test_mac.sh test_spec.sh +# +# For running all tests +# ./run_test_mac.sh + +#### Prerequisite #### +# Need to install following on Mac +# brew install coreutils --> For (g)date & (g)timeout equivalents +# brew install gnu-sed --with-default-names --> Sed's -i flag does not work without argument on Mac. Check: https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux/22084103#22084103 +# + +#### Caution #### +# Some scripts might use additional variables only available during CI cycle such as an image +# being built by CI - which you will have to override manually in that script. +# Some tests known to fail as of now: +# test_mqtrigger_error.sh, test_mqtrigger.sh (Needs connection to MQ), test_archive_pruner.sh (The package somehow gets created in default package in local setup), test_obj_create_in_diff_ns.sh + + +set -euo pipefail + +source $(dirname $0)/test_utils.sh + +## Common env parameters +export FISSION_NAMESPACE=fission +export FUNCTION_NAMESPACE=fission-function +export FISSION_ROUTER=$(kubectl -n $FISSION_NAMESPACE get svc router -o jsonpath='{...ip}') +export FISSION_NATS_STREAMING_URL="http://defaultFissionAuthToken@$(kubectl -n $FISSION_NAMESPACE get svc nats-streaming -o jsonpath='{...ip}:{.spec.ports[0].port}')" + +## Parameters used by some specific test cases + +export PYTHON_RUNTIME_IMAGE=fission/python-env +export PYTHON_BUILDER_IMAGE=fission/python-builder +export GO_RUNTIME_IMAGE=fission/go-env +export GO_BUILDER_IMAGE=fission/go-builder +export JVM_RUNTIME_IMAGE=fission/jvm-env +export JVM_BUILDER_IMAGE=fission/jvm-builder + + +if [ $(uname -s) == 'Darwin' ] +then + # gtimeout needs to be installed separately, do "brew install coreutils". + timeout() { + gtimeout "$@" + } + export -f timeout + + # gdate needs to be installed separately, do "brew install coreutils". + date() { + gdate "$@" + } + export -f date + + #brew install gnu-sed --with-default-names --> needed for gsed to work + sed() { + gsed "$@" + } + export -f sed + + log() { + echo "$@" + } + export -f log + + export FISSION_ROUTER=$(kubectl -n fission get svc router -o jsonpath='{...ip}') +fi + + +if [[ $# -gt 0 ]] +then + + for var in "$@" + do + test_file=$(find $ROOT/test/tests -iname $var) + run_test $test_file + done + +else + + test_files=$(find $ROOT/test/tests -iname 'test_*.sh') + + for file in $test_files + do + run_test ${file} + done +fi diff --git a/test/tests/test_buildermgr.sh b/test/tests/test_buildermgr.sh index ac397b69..ee30407c 100755 --- a/test/tests/test_buildermgr.sh +++ b/test/tests/test_buildermgr.sh @@ -9,8 +9,8 @@ set -euo pipefail # 2. package watcher triggers the build if any changes to packages ROOT=$(dirname $0)/../.. -PYTHON_RUNTIME_IMAGE=gcr.io/fission-ci/python-env:test -PYTHON_BUILDER_IMAGE=gcr.io/fission-ci/python-env-builder:test +PYTHON_RUNTIME_IMAGE=${PYTHON_RUNTIME_IMAGE:-gcr.io/fission-ci/python-env:test} +PYTHON_BUILDER_IMAGE=${PYTHON_BUILDER_IMAGE:-gcr.io/fission-ci/python-env-builder:test} fn=python-srcbuild-$(date +%s) @@ -55,6 +55,7 @@ cleanup() { log "Cleaning up..." fission env delete --name python || true fission fn delete --name $fn || true + rm demo-src-pkg.zip || true } if [ -z "${TEST_NOCLEANUP:-}" ]; then diff --git a/test/tests/test_canary.sh b/test/tests/test_canary.sh index 2e909341..ac5351f9 100755 --- a/test/tests/test_canary.sh +++ b/test/tests/test_canary.sh @@ -18,6 +18,8 @@ cleanup() { fission canary-config delete --name canary-2 || true } +trap cleanup EXIT + success_scenario() { log "Creating nodejs env" fission env create --name nodejs --image fission/node-env --graceperiod 1 diff --git a/test/tests/test_environments/test_go_env.sh b/test/tests/test_environments/test_go_env.sh index a85a3138..ad69939b 100755 --- a/test/tests/test_environments/test_go_env.sh +++ b/test/tests/test_environments/test_go_env.sh @@ -8,6 +8,7 @@ cleanup() { fission fn delete --name hello-go-poolmgr || true fission fn delete --name hello-go-nd || true fission env delete --name go || true + rm $ROOT/examples/go/vendor-example/vendor.zip || true } wait_for_builder() { @@ -55,8 +56,11 @@ cd $ROOT/examples/go trap cleanup EXIT +GO_RUNTIME_IMAGE=${GO_RUNTIME_IMAGE:-gcr.io/fission-ci/go-env:test} +GO_BUILDER_IMAGE=${GO_BUILDER_IMAGE:-gcr.io/fission-ci/go-env-builder:test} + log "Creating environment for Golang" -fission env create --name go --image gcr.io/fission-ci/go-env:test --builder gcr.io/fission-ci/go-env-builder:test --period 5 +fission env create --name go --image $GO_RUNTIME_IMAGE --builder $GO_BUILDER_IMAGE --period 5 timeout 90 bash -c "wait_for_builder" diff --git a/test/tests/test_environments/test_java_builder.sh b/test/tests/test_environments/test_java_builder.sh index 558bcb9c..4d94ca47 100755 --- a/test/tests/test_environments/test_java_builder.sh +++ b/test/tests/test_environments/test_java_builder.sh @@ -4,10 +4,14 @@ set -euo pipefail ROOT=$(dirname $0)/../../.. +JVM_RUNTIME_IMAGE=${JVM_RUNTIME_IMAGE:-gcr.io/fission-ci/jvm-env:test} +JVM_BUILDER_IMAGE=${JVM_BUILDER_IMAGE:-gcr.io/fission-ci/jvm-env-builder:test} + cleanup() { fission fn delete --name pbuilderhello || true fission fn delete --name nbuilderhello || true fission env delete --name java || true + rm $ROOT/examples/jvm/java/java-src-pkg.zip || true } test_fn() { @@ -41,11 +45,13 @@ export -f test_pkg cd $ROOT/examples/jvm/java +trap cleanup EXIT + log "Creating zip from source code" zip -r java-src-pkg.zip * log "Creating Java environment with Java Builder" -fission env create --name java --image gcr.io/fission-ci/jvm-env:test --version 2 --keeparchive --builder gcr.io/fission-ci/jvm-env-builder:test +fission env create --name java --image $JVM_RUNTIME_IMAGE --version 2 --keeparchive --builder $JVM_BUILDER_IMAGE log "Creating package from the source archive" pkg_name=`fission package create --sourcearchive java-src-pkg.zip --env java|cut -d' ' -f 2|cut -d"'" -f 2` @@ -57,7 +63,6 @@ timeout 300 bash -c "test_pkg $pkg_name 'succeeded'" log "Creating pool manager & new deployment function for Java" fission fn create --name nbuilderhello --pkg $pkg_name --env java --entrypoint io.fission.HelloWorld --executortype newdeploy --minscale 1 --maxscale 1 fission fn create --name pbuilderhello --pkg $pkg_name --env java --entrypoint io.fission.HelloWorld -trap cleanup EXIT log "Creating route for pool manager function" fission route create --function pbuilderhello --url /pbuilderhello --method GET diff --git a/test/tests/test_fn_update/test_configmap_update.sh b/test/tests/test_fn_update/test_configmap_update.sh index 67a1ac41..3a55c948 100755 --- a/test/tests/test_fn_update/test_configmap_update.sh +++ b/test/tests/test_fn_update/test_configmap_update.sh @@ -19,6 +19,7 @@ cleanup() { kubectl delete configmap ${new_cfgmap} -n default || true fission spec destroy || true rm -rf specs || true + rm cfgmap.py || true } if [ -z "${TEST_NOCLEANUP:-}" ]; then diff --git a/test/tests/test_fn_update/test_env_update.sh b/test/tests/test_fn_update/test_env_update.sh index 406c4cab..39d8c8fb 100755 --- a/test/tests/test_fn_update/test_env_update.sh +++ b/test/tests/test_fn_update/test_env_update.sh @@ -14,7 +14,7 @@ cleanup() { log "Cleaning up..." fission env delete --name $env_old || true fission fn delete --name $fn || true - fission env delete --name $env_old || true + fission env delete --name $env_new || true } cleanup diff --git a/test/tests/test_fn_update/test_secret_update.sh b/test/tests/test_fn_update/test_secret_update.sh index e7b8cd01..240ad742 100755 --- a/test/tests/test_fn_update/test_secret_update.sh +++ b/test/tests/test_fn_update/test_secret_update.sh @@ -19,16 +19,16 @@ cleanup() { kubectl delete secret ${new_secret} -n default || true fission spec destroy || true rm -rf specs || true + rm secret.py || true } -cleanup if [ -z "${TEST_NOCLEANUP:-}" ]; then trap cleanup EXIT else log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards." fi -cp ../test_secret_cfgmap/secret.py.template secret.py +cp $ROOT/test/tests/test_secret_cfgmap/secret.py.template secret.py sed -i "s/{{ FN_SECRET }}/${old_secret}/g" secret.py log "Creating env $env" diff --git a/test/tests/test_function_update.sh b/test/tests/test_function_update.sh index 1f20b997..35487fca 100755 --- a/test/tests/test_function_update.sh +++ b/test/tests/test_function_update.sh @@ -9,6 +9,8 @@ cleanup() { log "Cleaning up..." fission env delete --name nodejs || true fission fn delete --name $fn || true + rm foo.js || true + rm bar.js || true } if [ -z "${TEST_NOCLEANUP:-}" ]; then diff --git a/test/tests/test_internal_routes.sh b/test/tests/test_internal_routes.sh index 59df0886..b33a03ec 100755 --- a/test/tests/test_internal_routes.sh +++ b/test/tests/test_internal_routes.sh @@ -9,11 +9,18 @@ set -euo pipefail ROOT=$(dirname $0)/../.. +log "Writing functions" +f1=f1-$(date +%s) +f2=f2-$(date +%s) +log $f1 $f2 + cleanup() { log "Cleaning up..." fission env delete --name nodejs || true fission fn delete --name $f1 || true fission fn delete --name $f2 || true + rm $f1.js || true + rm $f2.js || true } if [ -z "${TEST_NOCLEANUP:-}" ]; then @@ -28,10 +35,7 @@ fission env delete --name nodejs || true log "Creating nodejs env" fission env create --name nodejs --image fission/node-env -log "Writing functions" -f1=f1-$(date +%s) -f2=f2-$(date +%s) -log $f1 $f2 + for f in $f1 $f2 do diff --git a/test/tests/test_obj_create_in_diff_ns.sh b/test/tests/test_obj_create_in_diff_ns.sh index fcfa7a42..a1830fe0 100755 --- a/test/tests/test_obj_create_in_diff_ns.sh +++ b/test/tests/test_obj_create_in_diff_ns.sh @@ -9,10 +9,12 @@ id="" ROOT=$(dirname $0)/../.. final_cleanup() { - rm -rf testDir1 || true + rm -rf testDir1/ || true kubectl delete ns "ns1-$id" "ns2-$id" & } +trap final_cleanup EXIT + cleanup() { [[ -n "${1+x}" && -n "${2+x}" ]]; fission env delete --name $1 --envns $2 || true [[ -n "${3+x}" && -n "${4+x}" ]]; fission fn delete --name $3 --fns $4 || true diff --git a/test/tests/test_package_command.sh b/test/tests/test_package_command.sh index a5eeda20..571ef497 100755 --- a/test/tests/test_package_command.sh +++ b/test/tests/test_package_command.sh @@ -69,6 +69,9 @@ cleanup() { fission fn delete --name $fn2 || true fission fn delete --name $fn4 || true fission fn delete --name $fn5 || true + rm demo-src-pkg.zip || true + rm -rf testDir/ || true + rm demo-deploy-pkg.zip || true } if [ -z "${TEST_NOCLEANUP:-}" ]; then diff --git a/test/tests/test_secret_cfgmap/test_secret_cfgmap.sh b/test/tests/test_secret_cfgmap/test_secret_cfgmap.sh index 2a437f75..a15fb2fa 100755 --- a/test/tests/test_secret_cfgmap/test_secret_cfgmap.sh +++ b/test/tests/test_secret_cfgmap/test_secret_cfgmap.sh @@ -13,6 +13,8 @@ cleanup() { fission env delete --name python || true kubectl delete secret -n default ${fn_secret} || true kubectl delete configmap -n default ${fn_cfgmap} || true + rm cfgmap.py || true + rm secret.py || true # delete functions for f in ${fn_secret} ${fn_cfgmap} ${fn} do diff --git a/test/tests/test_specs/test_spec.sh b/test/tests/test_specs/test_spec.sh index 83ef9e7b..7e09b269 100755 --- a/test/tests/test_specs/test_spec.sh +++ b/test/tests/test_specs/test_spec.sh @@ -5,6 +5,14 @@ set -euo pipefail fn=spec-$(date +%N) env=python-$fn +cleanup() { + log "Cleaning up..." + fission spec destroy || true + rm -rf specs || true +} + +trap cleanup EXIT + # init fission spec init @@ -17,7 +25,6 @@ fission env create --spec --name $env --image fission/python-env log "create env spec" fission spec apply -trap "fission spec destroy" EXIT log "verify env created" fission env list | grep python diff --git a/test/tests/test_specs/test_spec_multifile.sh b/test/tests/test_specs/test_spec_multifile.sh index a2a0984e..48c9f314 100755 --- a/test/tests/test_specs/test_spec_multifile.sh +++ b/test/tests/test_specs/test_spec_multifile.sh @@ -7,6 +7,14 @@ ROOT=$(dirname $0)/../../.. fn=spec-$(date +%N) env=python-$fn +cleanup() { + pushd $ROOT/examples/python + fission spec destroy + rm -rf $ROOT/examples/python/specs +} + +trap cleanup EXIT + pushd $ROOT/examples/python fission spec init