Test framework improvement (#1128)

This commit is contained in:
Chia-Chun Tai
2019-05-23 22:52:39 +08:00
committed by Ta-Ching Chen
parent 1e8dfa38da
commit c3177f9ebd
47 changed files with 1192 additions and 832 deletions
@@ -7,49 +7,63 @@
set -euo pipefail
set +x
source $(dirname $0)/../../utils.sh
ROOT=$(dirname $0)/../..
TEST_ID=$(generate_test_id)
echo "TEST_ID = $TEST_ID"
cleanup() {
log "Cleaning up..."
clean_resource_by_id $TEST_ID
}
if [ -z "${TEST_NOCLEANUP:-}" ]; then
trap cleanup EXIT
else
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
fi
ROOT=$(dirname $0)/../../..
DIR=$(dirname $0)
echo "Pre-test cleanup"
fission env delete --name python || true
env=python-$TEST_ID
fn=greetings-$TEST_ID
recName=rec-$TEST_ID
echo "Creating python env"
fission env create --name python --image fission/python-env
# trap "fission env delete --name python" EXIT
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
echo "Creating function"
fn=greetings-$(date +%s)
fission fn create --name $fn --env python --code $DIR/greetings.py --method GET
# trap "fission function delete --name $fn" EXIT
fission fn create --name $fn --env $env --code $DIR/greetings.py --method GET
echo "Creating http trigger"
generated=$(fission route create --function $fn --method POST --url greetings | awk '{print $2}'| tr -d "'")
generated=$(fission route create --function $fn --method POST --url /$fn | awk '{print $2}'| tr -d "'")
# Wait until trigger is created
sleep 5
echo "Creating recorder"
recName="gacrux"
fission recorder create --name $recName --function $fn
fission recorder get --name $recName
# trap "fission recorder delete --name $recName" EXIT
# Wait until recorder is created
sleep 5
echo "Issuing cURL request:"
resp=$(curl -X POST "http://$FISSION_ROUTER/greetings" -d "{\"title\":\"Madam\",\"name\":\"Thanh\",\"item\":\"coat\"}")
resp=$(curl -X POST "http://$FISSION_ROUTER/$fn" -d "{\"title\":\"Madam\",\"name\":\"Thanh\",\"item\":\"coat\"}")
expectedR="Greetings, Madam Thanh. May I take your coat?"
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
expectedS="200OK"
trap "fission recorder delete --name $recName && fission ht delete --name $generated && fission function delete --name $fn && fission env delete --name python" EXIT
set +o pipefail
recordedStatus="$(fission records view --from 15s --to 0s -v | grep $fn | awk '{print $4$5}')"
set -o pipefail
expectedS="200OK"
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
log "expected: status = '$expectedS' resp = '$expectedR'"
log "result: status = '$recordedStatus' resp = '$resp'"
exit 1
fi
echo "Passed."
exit 0
exit 0
+47 -25
View File
@@ -9,87 +9,109 @@
set -euo pipefail
set +x
source $(dirname $0)/../../utils.sh
ROOT=$(dirname $0)/../..
TEST_ID=$(generate_test_id)
echo "TEST_ID = $TEST_ID"
cleanup() {
log "Cleaning up..."
clean_resource_by_id $TEST_ID
}
if [ -z "${TEST_NOCLEANUP:-}" ]; then
trap cleanup EXIT
else
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
fi
ROOT=$(dirname $0)/../../..
DIR=$(dirname $0)
expectedR="We'll meet at 9 on Tuesday."
echo "Pre-test cleanup"
fission env delete --name python || true
env=python-$TEST_ID
fn=rv-$TEST_ID
recName1=rec1-$TEST_ID
recName2=rec2-$TEST_ID
echo "Creating python env"
fission env create --name python --image fission/python-env
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
echo "Creating function"
fn=rv-$(date +%s)
fission fn create --name $fn --env python --code $DIR/rendezvous.py --method GET
fission fn create --name $fn --env $env --code $DIR/rendezvous.py --method GET
echo "Creating trigger A"
generatedA=$(fission route create --function $fn --method GET --url rvA | awk '{print $2}'| tr -d "'")
triggerA=$(fission route create --function $fn --method GET --url /$fn-A | awk '{print $2}'| tr -d "'")
log "triggerA = $triggerA"
echo "Creating trigger B"
generatedB=$(fission route create --function $fn --method GET --url rvB | awk '{print $2}'| tr -d "'")
triggerB=$(fission route create --function $fn --method GET --url /$fn-B | awk '{print $2}'| tr -d "'")
log "triggerB = $triggerB"
# Wait until triggers are created
sleep 5
echo "Creating recorder by function"
recName="regulus"
fission recorder create --name $recName --function $fn
fission recorder get --name $recName
fission recorder create --name $recName1 --function $fn
fission recorder get --name $recName1
# Wait until recorder is created
sleep 5
echo "Issuing cURL request to urlA:"
respA=$(curl -X GET "http://$FISSION_ROUTER/rvA?time=9&date=Tuesday")
recordedStatusA="$(fission records view --from 5s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
respA=$(curl -X GET "http://$FISSION_ROUTER/$fn-A?time=9&date=Tuesday")
recordedStatusA="$(fission records view --from 5s --to 0s -v | grep $triggerA | awk '{print $4$5}')"
expectedSA="200OK"
# Separate records
sleep 5
echo "Issuing cURL request to urlB:"
respB=$(curl -X GET "http://$FISSION_ROUTER/rvB?time=9&date=Tuesday")
recordedStatusB="$(fission records view --from 5s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
respB=$(curl -X GET "http://$FISSION_ROUTER/$fn-B?time=9&date=Tuesday")
recordedStatusB="$(fission records view --from 5s --to 0s -v | grep $triggerB | awk '{print $4$5}')"
expectedSB="200OK"
if [ "$respA" != "$expectedR" ] || [ "$recordedStatusA" != "$expectedSA" ] || [ "$recordedStatusB" != "$expectedSB" ]; then
echo "Failed at test case 1."
log "expected: statusA = '$expectedSA' statusB = '$statusB' respA = '$expectedR'"
log "result: statusA = '$recordedStatusA' statusB = '$recordedStatusB' respA = '$respA'"
exit 1
fi
echo "Test case 1) Passed."
# Delete first recorder
fission recorder delete --name $recName
fission recorder delete --name $recName1
sleep 5
echo "Creating recorder by trigger"
recName2="regulus2"
fission recorder create --name $recName2 --trigger $generatedB
fission recorder create --name $recName2 --trigger $triggerB
fission recorder get --name $recName2
echo "Issuing cURL request to urlA:"
respA=$(curl -X GET "http://$FISSION_ROUTER/rvA?time=9&date=Tuesday")
recordedStatusA="$(fission records view --from 5s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
respA=$(curl -X GET "http://$FISSION_ROUTER/$fn-A?time=9&date=Tuesday")
# We except there is no records here -> grep will exit 1 -> this script exit 1 because 'pipefail' is set
# Temporary disable 'pipefail' here
set +o pipefail
recordedStatusA="$(fission records view --from 5s --to 0s -v | grep $triggerA | awk '{print $4$5}')"
set -o pipefail
expectedSA=""
# Separate records
sleep 5
echo "Issuing cURL request to urlB:"
respB=$(curl -X GET "http://$FISSION_ROUTER/rvB?time=9&date=Tuesday")
recordedStatusB="$(fission records view --from 5s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
respB=$(curl -X GET "http://$FISSION_ROUTER/$fn-B?time=9&date=Tuesday")
recordedStatusB="$(fission records view --from 5s --to 0s -v | grep $triggerB | awk '{print $4$5}')"
expectedSB="200OK"
if [ "$respA" != "$expectedR" ] || [ "$recordedStatusA" != "$expectedSA" ] || [ "$recordedStatusB" != "$expectedSB" ]; then
echo "Failed at test case 2."
log "expected: statusA = '$expectedSA' statusB = '$expectedSB' respA = '$expectedR'"
log "result: statusA = '$recordedStatusA' statusB = '$recordedStatusB' respA = '$respA'"
exit 1
fi
trap "fission recorder delete --name $recName2 && fission ht delete --name $generatedA && fission ht delete --name $generatedB && fission fn delete --name $fn && fission env delete --name python" EXIT
echo "All passed."
exit 0
exit 0
+42 -18
View File
@@ -11,28 +11,42 @@
set -euo pipefail
set +x
source $(dirname $0)/../../utils.sh
ROOT=$(dirname $0)/../..
TEST_ID=$(generate_test_id)
echo "TEST_ID = $TEST_ID"
cleanup() {
log "Cleaning up..."
clean_resource_by_id $TEST_ID
}
if [ -z "${TEST_NOCLEANUP:-}" ]; then
trap cleanup EXIT
else
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
fi
ROOT=$(dirname $0)/../../..
DIR=$(dirname $0)
echo "Pre-test cleanup"
fission env delete --name python || true
env=python-$TEST_ID
fn=rv-$TEST_ID
recName=rec-$TEST_ID
echo "Creating python env"
fission env create --name python --image fission/python-env
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
echo "Creating function"
fn=rv-$(date +%s)
fission fn create --name $fn --env python --code $DIR/rendezvous.py --method GET
fission fn create --name $fn --env $env --code $DIR/rendezvous.py --method GET
echo "Creating http trigger"
generated=$(fission route create --function $fn --method GET --url rv | awk '{print $2}'| tr -d "'")
generated=$(fission route create --function $fn --method GET --url /$fn | awk '{print $2}'| tr -d "'")
# Wait until trigger is created
sleep 5
echo "Creating recorder"
recName="regulus"
fission recorder create --name $recName --function $fn
fission recorder get --name $recName
@@ -44,13 +58,17 @@ fission recorder update --name $recName --disable
sleep 5
echo "Issuing cURL request that should not be recorded:"
resp=$(curl -X GET "http://$FISSION_ROUTER/rv?time=9&date=Tuesday")
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
resp=$(curl -X GET "http://$FISSION_ROUTER/$fn?time=9&date=Tuesday")
set +o pipefail
recordedStatus="$(fission records view --from 5s --to 0s -v | grep $fn | awk '{print $4$5}')"
set -o pipefail
expectedR="We'll meet at 9 on Tuesday."
expectedS=""
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
log "expected: status = '$expectedS' resp = '$expectedR'"
log "result: status = '$recordedStatus' resp = '$resp'"
exit 1
fi
@@ -61,20 +79,24 @@ fission recorder update --name $recName --enable
sleep 5
echo "Issuing cURL request that should be recorded:"
resp=$(curl -X GET "http://$FISSION_ROUTER/rv?time=9&date=Tuesday")
resp=$(curl -X GET "http://$FISSION_ROUTER/$fn?time=9&date=Tuesday")
expectedR="We'll meet at 9 on Tuesday."
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
set +o pipefail
recordedStatus="$(fission records view --from 5s --to 0s -v | grep $fn | awk '{print $4$5}')"
set -o pipefail
expectedS="200OK"
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
log "expected: status = '$expectedS' resp = '$expectedR'"
log "result: status = '$recordedStatus' resp = '$resp'"
exit 1
fi
echo "Test case 2) Passed."
# Create new trigger for same function recorded w/ different url
generated2=$(fission route create --function $fn --method GET --url rv2 | awk '{print $2}'| tr -d "'")
generated2=$(fission route create --function $fn --method GET --url $fn-2 | awk '{print $2}'| tr -d "'")
echo "New trigger: $generated2"
# Update recorder to observe new trigger
@@ -82,19 +104,21 @@ fission recorder update --name $recName --trigger $generated2
fission recorder list
echo "Issuing cURL request that should be recorded:"
resp=$(curl -X GET "http://$FISSION_ROUTER/rv2?time=9&date=Tuesday")
resp=$(curl -X GET "http://$FISSION_ROUTER/$fn-2?time=9&date=Tuesday")
expectedR="We'll meet at 9 on Tuesday."
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
set +o pipefail
recordedStatus="$(fission records view --from 5s --to 0s -v | grep $generated2 | awk '{print $4$5}')"
set -o pipefail
expectedS="200OK"
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
log "expected: status = '$expectedS' resp = '$expectedR'"
log "result: status = '$recordedStatus' resp = '$resp'"
exit 1
fi
echo "Test case 3) Passed."
trap "fission recorder delete --name $recName && fission ht delete --name $generated && fission ht delete --name $generated2 && fission function delete --name $fn && fission env delete --name python" EXIT
echo "All passed."
exit 0
exit 0