Mac test utility (#986)

A utility for running individual or all tests on a Mac dev machine without changing the test script.
This commit is contained in:
Vishal
2019-01-20 16:51:45 +05:30
committed by GitHub
parent e4746007da
commit 3c4fdb0659
15 changed files with 148 additions and 14 deletions
+93
View File
@@ -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
+3 -2
View File
@@ -9,8 +9,8 @@ set -euo pipefail
# 2. package watcher triggers the build if any changes to packages # 2. package watcher triggers the build if any changes to packages
ROOT=$(dirname $0)/../.. ROOT=$(dirname $0)/../..
PYTHON_RUNTIME_IMAGE=gcr.io/fission-ci/python-env:test PYTHON_RUNTIME_IMAGE=${PYTHON_RUNTIME_IMAGE:-gcr.io/fission-ci/python-env:test}
PYTHON_BUILDER_IMAGE=gcr.io/fission-ci/python-env-builder:test PYTHON_BUILDER_IMAGE=${PYTHON_BUILDER_IMAGE:-gcr.io/fission-ci/python-env-builder:test}
fn=python-srcbuild-$(date +%s) fn=python-srcbuild-$(date +%s)
@@ -55,6 +55,7 @@ cleanup() {
log "Cleaning up..." log "Cleaning up..."
fission env delete --name python || true fission env delete --name python || true
fission fn delete --name $fn || true fission fn delete --name $fn || true
rm demo-src-pkg.zip || true
} }
if [ -z "${TEST_NOCLEANUP:-}" ]; then if [ -z "${TEST_NOCLEANUP:-}" ]; then
+2
View File
@@ -18,6 +18,8 @@ cleanup() {
fission canary-config delete --name canary-2 || true fission canary-config delete --name canary-2 || true
} }
trap cleanup EXIT
success_scenario() { success_scenario() {
log "Creating nodejs env" log "Creating nodejs env"
fission env create --name nodejs --image fission/node-env --graceperiod 1 fission env create --name nodejs --image fission/node-env --graceperiod 1
+5 -1
View File
@@ -8,6 +8,7 @@ cleanup() {
fission fn delete --name hello-go-poolmgr || true fission fn delete --name hello-go-poolmgr || true
fission fn delete --name hello-go-nd || true fission fn delete --name hello-go-nd || true
fission env delete --name go || true fission env delete --name go || true
rm $ROOT/examples/go/vendor-example/vendor.zip || true
} }
wait_for_builder() { wait_for_builder() {
@@ -55,8 +56,11 @@ cd $ROOT/examples/go
trap cleanup EXIT 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" 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" timeout 90 bash -c "wait_for_builder"
@@ -4,10 +4,14 @@ set -euo pipefail
ROOT=$(dirname $0)/../../.. 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() { cleanup() {
fission fn delete --name pbuilderhello || true fission fn delete --name pbuilderhello || true
fission fn delete --name nbuilderhello || true fission fn delete --name nbuilderhello || true
fission env delete --name java || true fission env delete --name java || true
rm $ROOT/examples/jvm/java/java-src-pkg.zip || true
} }
test_fn() { test_fn() {
@@ -41,11 +45,13 @@ export -f test_pkg
cd $ROOT/examples/jvm/java cd $ROOT/examples/jvm/java
trap cleanup EXIT
log "Creating zip from source code" log "Creating zip from source code"
zip -r java-src-pkg.zip * zip -r java-src-pkg.zip *
log "Creating Java environment with Java Builder" 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" 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` 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" 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 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 fission fn create --name pbuilderhello --pkg $pkg_name --env java --entrypoint io.fission.HelloWorld
trap cleanup EXIT
log "Creating route for pool manager function" log "Creating route for pool manager function"
fission route create --function pbuilderhello --url /pbuilderhello --method GET fission route create --function pbuilderhello --url /pbuilderhello --method GET
@@ -19,6 +19,7 @@ cleanup() {
kubectl delete configmap ${new_cfgmap} -n default || true kubectl delete configmap ${new_cfgmap} -n default || true
fission spec destroy || true fission spec destroy || true
rm -rf specs || true rm -rf specs || true
rm cfgmap.py || true
} }
if [ -z "${TEST_NOCLEANUP:-}" ]; then if [ -z "${TEST_NOCLEANUP:-}" ]; then
+1 -1
View File
@@ -14,7 +14,7 @@ cleanup() {
log "Cleaning up..." log "Cleaning up..."
fission env delete --name $env_old || true fission env delete --name $env_old || true
fission fn delete --name $fn || true fission fn delete --name $fn || true
fission env delete --name $env_old || true fission env delete --name $env_new || true
} }
cleanup cleanup
@@ -19,16 +19,16 @@ cleanup() {
kubectl delete secret ${new_secret} -n default || true kubectl delete secret ${new_secret} -n default || true
fission spec destroy || true fission spec destroy || true
rm -rf specs || true rm -rf specs || true
rm secret.py || true
} }
cleanup
if [ -z "${TEST_NOCLEANUP:-}" ]; then if [ -z "${TEST_NOCLEANUP:-}" ]; then
trap cleanup EXIT trap cleanup EXIT
else else
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards." log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
fi 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 sed -i "s/{{ FN_SECRET }}/${old_secret}/g" secret.py
log "Creating env $env" log "Creating env $env"
+2
View File
@@ -9,6 +9,8 @@ cleanup() {
log "Cleaning up..." log "Cleaning up..."
fission env delete --name nodejs || true fission env delete --name nodejs || true
fission fn delete --name $fn || true fission fn delete --name $fn || true
rm foo.js || true
rm bar.js || true
} }
if [ -z "${TEST_NOCLEANUP:-}" ]; then if [ -z "${TEST_NOCLEANUP:-}" ]; then
+8 -4
View File
@@ -9,11 +9,18 @@ set -euo pipefail
ROOT=$(dirname $0)/../.. ROOT=$(dirname $0)/../..
log "Writing functions"
f1=f1-$(date +%s)
f2=f2-$(date +%s)
log $f1 $f2
cleanup() { cleanup() {
log "Cleaning up..." log "Cleaning up..."
fission env delete --name nodejs || true fission env delete --name nodejs || true
fission fn delete --name $f1 || true fission fn delete --name $f1 || true
fission fn delete --name $f2 || true fission fn delete --name $f2 || true
rm $f1.js || true
rm $f2.js || true
} }
if [ -z "${TEST_NOCLEANUP:-}" ]; then if [ -z "${TEST_NOCLEANUP:-}" ]; then
@@ -28,10 +35,7 @@ fission env delete --name nodejs || true
log "Creating nodejs env" log "Creating nodejs env"
fission env create --name nodejs --image fission/node-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 for f in $f1 $f2
do do
+3 -1
View File
@@ -9,10 +9,12 @@ id=""
ROOT=$(dirname $0)/../.. ROOT=$(dirname $0)/../..
final_cleanup() { final_cleanup() {
rm -rf testDir1 || true rm -rf testDir1/ || true
kubectl delete ns "ns1-$id" "ns2-$id" & kubectl delete ns "ns1-$id" "ns2-$id" &
} }
trap final_cleanup EXIT
cleanup() { cleanup() {
[[ -n "${1+x}" && -n "${2+x}" ]]; fission env delete --name $1 --envns $2 || true [[ -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 [[ -n "${3+x}" && -n "${4+x}" ]]; fission fn delete --name $3 --fns $4 || true
+3
View File
@@ -69,6 +69,9 @@ cleanup() {
fission fn delete --name $fn2 || true fission fn delete --name $fn2 || true
fission fn delete --name $fn4 || true fission fn delete --name $fn4 || true
fission fn delete --name $fn5 || 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 if [ -z "${TEST_NOCLEANUP:-}" ]; then
@@ -13,6 +13,8 @@ cleanup() {
fission env delete --name python || true fission env delete --name python || true
kubectl delete secret -n default ${fn_secret} || true kubectl delete secret -n default ${fn_secret} || true
kubectl delete configmap -n default ${fn_cfgmap} || true kubectl delete configmap -n default ${fn_cfgmap} || true
rm cfgmap.py || true
rm secret.py || true
# delete functions # delete functions
for f in ${fn_secret} ${fn_cfgmap} ${fn} for f in ${fn_secret} ${fn_cfgmap} ${fn}
do do
+8 -1
View File
@@ -5,6 +5,14 @@ set -euo pipefail
fn=spec-$(date +%N) fn=spec-$(date +%N)
env=python-$fn env=python-$fn
cleanup() {
log "Cleaning up..."
fission spec destroy || true
rm -rf specs || true
}
trap cleanup EXIT
# init # init
fission spec init fission spec init
@@ -17,7 +25,6 @@ fission env create --spec --name $env --image fission/python-env
log "create env spec" log "create env spec"
fission spec apply fission spec apply
trap "fission spec destroy" EXIT
log "verify env created" log "verify env created"
fission env list | grep python fission env list | grep python
@@ -7,6 +7,14 @@ ROOT=$(dirname $0)/../../..
fn=spec-$(date +%N) fn=spec-$(date +%N)
env=python-$fn env=python-$fn
cleanup() {
pushd $ROOT/examples/python
fission spec destroy
rm -rf $ROOT/examples/python/specs
}
trap cleanup EXIT
pushd $ROOT/examples/python pushd $ROOT/examples/python
fission spec init fission spec init