Test framework improvement (#1128)
This commit is contained in:
committed by
Ta-Ching Chen
parent
1e8dfa38da
commit
c3177f9ebd
@@ -4,22 +4,29 @@
|
||||
# Create a function and trigger it using Kafka
|
||||
# This test requires Kafka & MQ-Kafka component of Fission installed in the cluster
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../../utils.sh
|
||||
set +x
|
||||
|
||||
nodeenv="node-kafka"
|
||||
goenv="go-kafka"
|
||||
producerfunc="producer-func"
|
||||
consumerfunc="consumer-func"
|
||||
consumerfunc2="consumer-func2"
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
log() {
|
||||
echo $1
|
||||
}
|
||||
export -f log
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
nodeenv="node-kafka-$TEST_ID"
|
||||
goenv="go-kafka-$TEST_ID"
|
||||
producerfunc="producer-func-$TEST_ID"
|
||||
consumerfunc="consumer-func-$TEST_ID"
|
||||
consumerfunc2="consumer-func2-$TEST_ID"
|
||||
mqt="kafkatest-$TEST_ID"
|
||||
mqt2="kafkatest2-$TEST_ID"
|
||||
topic="testtopic-$TEST_ID"
|
||||
resptopic="resptopic-$TEST_ID"
|
||||
|
||||
test_mqmessage() {
|
||||
echo "Checking for valid response"
|
||||
|
||||
set +e
|
||||
while true; do
|
||||
response0=$(kubectl -nfission logs -l=messagequeue=kafka)
|
||||
echo $response0 | grep -i $1
|
||||
@@ -28,6 +35,7 @@ test_mqmessage() {
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
export -f test_mqmessage
|
||||
|
||||
@@ -37,6 +45,7 @@ test_fnmessage() {
|
||||
# $3: string to look for
|
||||
echo "Checking for valid function log"
|
||||
|
||||
set +e
|
||||
while true; do
|
||||
response0=$(kubectl -nfission-function logs -l=functionName=$1 -c $2)
|
||||
echo $response0 | grep -i "$3"
|
||||
@@ -45,12 +54,14 @@ test_fnmessage() {
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
export -f test_fnmessage
|
||||
|
||||
waitBuild() {
|
||||
log "Waiting for builder manager to finish the build"
|
||||
|
||||
set +e
|
||||
while true; do
|
||||
kubectl --namespace default get packages $1 -o jsonpath='{.status.buildstatus}'|grep succeeded
|
||||
if [[ $? -eq 0 ]]; then
|
||||
@@ -59,32 +70,33 @@ waitBuild() {
|
||||
log "Waiting for build to finish"
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
export -f waitBuild
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name ${goenv} || true
|
||||
fission env delete --name ${nodeenv} || true
|
||||
fission fn delete --name ${producerfunc} || true
|
||||
fission fn delete --name ${consumerfunc} || true
|
||||
fission fn delete --name ${consumerfunc2} || true
|
||||
fission mqt delete --name kafkatest || true
|
||||
fission mqt delete --name kafkatest2 || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
export -f cleanup
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
DIR=$(dirname $0)
|
||||
|
||||
log "Creating ${nodeenv} environment"
|
||||
fission env create --name ${nodeenv} --image fission/node-env
|
||||
trap cleanup EXIT
|
||||
fission env create --name ${nodeenv} --image ${NODE_RUNTIME_IMAGE}
|
||||
|
||||
log "Creating ${goenv} environment"
|
||||
fission env create --name ${goenv} --image fission/go-env --builder fission/go-builder
|
||||
fission env create --name ${goenv} --image ${GO_RUNTIME_IMAGE} --builder ${GO_BUILDER_IMAGE}
|
||||
|
||||
log "Creating package for Kafka producer"
|
||||
pushd $DIR/kafka_pub
|
||||
cp -r $DIR/kafka_pub $tmp_dir/
|
||||
pushd $tmp_dir/kafka_pub
|
||||
go mod vendor
|
||||
zip -qr kafka.zip *
|
||||
pkgName=$(fission package create --env ${goenv} --src kafka.zip|cut -f2 -d' '| tr -d \')
|
||||
@@ -96,19 +108,19 @@ timeout 120s bash -c "waitBuild $pkgName"
|
||||
log "Package ${pkgName} created"
|
||||
|
||||
log "Creating function ${consumerfunc}"
|
||||
fission fn create --name ${consumerfunc} --env ${nodeenv} --code hellokafka.js
|
||||
fission fn create --name ${consumerfunc} --env ${nodeenv} --code $DIR/hellokafka.js
|
||||
|
||||
log "Creating function ${consumerfunc2}"
|
||||
fission fn create --name ${consumerfunc2} --env ${nodeenv} --code hellokafka.js
|
||||
fission fn create --name ${consumerfunc2} --env ${nodeenv} --code $DIR/hellokafka.js
|
||||
|
||||
log "Creating function ${producerfunc}"
|
||||
fission fn create --name ${producerfunc} --env ${goenv} --pkg ${pkgName} --entrypoint Handler
|
||||
|
||||
log "Creating trigger kafkatest"
|
||||
fission mqt create --name kafkatest --function ${consumerfunc} --mqtype kafka --topic testtopic --resptopic resptopic
|
||||
log "Creating trigger $mqt"
|
||||
fission mqt create --name ${mqt} --function ${consumerfunc} --mqtype kafka --topic $topic --resptopic $resptopic
|
||||
|
||||
log "Creating trigger kafkatest2"
|
||||
fission mqt create --name kafkatest2 --function ${consumerfunc2} --mqtype kafka --topic resptopic
|
||||
log "Creating trigger $mqt2"
|
||||
fission mqt create --name ${mqt2} --function ${consumerfunc2} --mqtype kafka --topic $resptopic
|
||||
|
||||
fission fn test --name ${producerfunc}
|
||||
|
||||
@@ -122,3 +134,5 @@ log "Testing the header value in ${consumerfunc2}"
|
||||
timeout 60 bash -c "test_fnmessage '${consumerfunc2}' '${nodeenv}' 'z-custom-name: Kafka-Header-test'"
|
||||
# test if the Fission specific headers are overwritten
|
||||
timeout 60 bash -c "test_fnmessage '${consumerfunc2}' '${nodeenv}' 'x-fission-function-name: consumer-func2'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -5,21 +5,29 @@
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../../utils.sh
|
||||
set +x
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
DIR=$(dirname $0)
|
||||
|
||||
clusterID="fissionMQTrigger"
|
||||
topic="foo.bar"
|
||||
resptopic="foo.foo"
|
||||
expectedRespOutput="[foo.foo]: 'Hello, World!'"
|
||||
pubClientID="clientPub-$TEST_ID"
|
||||
subClientID="clientSub-$TEST_ID"
|
||||
topic="foo.bar$TEST_ID"
|
||||
resptopic="foo.foo$TEST_ID"
|
||||
expectedRespOutput="[foo.foo$TEST_ID]: 'Hello, World!'"
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
fn=hello-$TEST_ID
|
||||
mqt=mqt-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn || true
|
||||
fission mqtrigger delete --name $mqt || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -28,18 +36,13 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function"
|
||||
fn=hello-$(date +%s)
|
||||
fission fn create --name $fn --env nodejs --code $DIR/main.js --method GET
|
||||
fission fn create --name $fn --env $env --code $DIR/main.js --method GET
|
||||
|
||||
log "Creating message queue trigger"
|
||||
mqt=mqt-$(date +%s)
|
||||
fission mqtrigger create --name $mqt --function $fn --mqtype "nats-streaming" --topic $topic --resptopic $resptopic
|
||||
|
||||
# wait until nats trigger is created
|
||||
@@ -49,23 +52,18 @@ sleep 5
|
||||
# Send a message
|
||||
#
|
||||
log "Sending message"
|
||||
go run $DIR/stan-pub.go -s $FISSION_NATS_STREAMING_URL -c $clusterID -id clientPub $topic ""
|
||||
go run $DIR/stan-pub.go -s $FISSION_NATS_STREAMING_URL -c $clusterID -id $pubClientID $topic ""
|
||||
|
||||
#
|
||||
# Wait for message on response topic
|
||||
#
|
||||
log "Waiting for response"
|
||||
TIMEOUT=timeout
|
||||
if [ $(uname -s) == 'Darwin' ]
|
||||
then
|
||||
# If this fails on mac os, do "brew install coreutils".
|
||||
TIMEOUT=gtimeout
|
||||
fi
|
||||
response=$($TIMEOUT 120s go run $DIR/stan-sub.go --last -s $FISSION_NATS_STREAMING_URL -c $clusterID -id clientSub $resptopic 2>&1)
|
||||
response=$(timeout 120s go run $DIR/stan-sub.go --last -s $FISSION_NATS_STREAMING_URL -c $clusterID -id $subClientID $resptopic 2>&1)
|
||||
|
||||
if [[ "$response" != "$expectedRespOutput" ]]; then
|
||||
log "$response is not equal to $expectedRespOutput"
|
||||
log "'$response' is not equal to '$expectedRespOutput'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Subscriber received expected response: $response"
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -2,27 +2,35 @@
|
||||
|
||||
#
|
||||
# Create a function and trigger it using NATS
|
||||
# To run this on Minikube, uncomment line 18
|
||||
# To run this on Minikube, uncomment line 24
|
||||
|
||||
set -euo pipefail
|
||||
set +x
|
||||
source $(dirname $0)/../../../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
DIR=$(dirname $0)
|
||||
|
||||
clusterID="fissionMQTrigger"
|
||||
topic="foo.bar"
|
||||
resptopic="foo.foo"
|
||||
errortopic="foo.error"
|
||||
pubClientID="clientPub-$TEST_ID"
|
||||
subClientID="clientSub-$TEST_ID"
|
||||
topic="foo.bar$TEST_ID"
|
||||
resptopic="foo.foo$TEST_ID"
|
||||
errortopic="foo.error$TEST_ID"
|
||||
maxretries=1
|
||||
# FISSION_NATS_STREAMING_URL="http://defaultFissionAuthToken@$(minikube ip):4222"
|
||||
expectedRespOutput="[foo.error]: 'Hello, World!'"
|
||||
expectedRespOutput="[foo.error$TEST_ID]: 'Hello, World!'"
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
fn=hello-$TEST_ID
|
||||
mqt=mqt-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn || true
|
||||
fission mqtrigger delete --name $mqt || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -31,18 +39,13 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function"
|
||||
fn=hello-$(date +%s)
|
||||
fission fn create --name $fn --env nodejs --code $DIR/main_error.js --method GET
|
||||
fission fn create --name $fn --env $env --code $DIR/main_error.js --method GET
|
||||
|
||||
log "Creating message queue trigger"
|
||||
mqt=mqt-$(date +%s)
|
||||
fission mqtrigger create --name $mqt --function $fn --mqtype "nats-streaming" --topic $topic --resptopic $resptopic --errortopic $errortopic --maxretries $maxretries
|
||||
log "Updated mqtrigger list"
|
||||
fission mqtrigger list
|
||||
@@ -54,28 +57,20 @@ sleep 5
|
||||
# Send a message
|
||||
#
|
||||
log "Sending message"
|
||||
go run $DIR/stan-pub.go -s $FISSION_NATS_STREAMING_URL -c $clusterID -id clientPub $topic ""
|
||||
go run $DIR/stan-pub.go -s $FISSION_NATS_STREAMING_URL -c $clusterID -id $pubClientID $topic ""
|
||||
|
||||
#
|
||||
# Wait for message on error topic
|
||||
#
|
||||
log "Waiting for response"
|
||||
TIMEOUT=timeout
|
||||
if [ $(uname -s) == 'Darwin' ]
|
||||
then
|
||||
# If this fails on mac os, do "brew install coreutils".
|
||||
TIMEOUT=gtimeout
|
||||
fi
|
||||
response=$(go run $DIR/stan-sub.go --last -s $FISSION_NATS_STREAMING_URL -c $clusterID -id clientSub $errortopic 2>&1)
|
||||
response=$(go run $DIR/stan-sub.go --last -s $FISSION_NATS_STREAMING_URL -c $clusterID -id $subClientID $errortopic 2>&1)
|
||||
|
||||
log "Subscriber received response: $response"
|
||||
|
||||
fission mqtrigger delete --name $mqt
|
||||
# kubectl delete functions --all
|
||||
|
||||
if [[ "$response" != "$expectedRespOutput" ]]; then
|
||||
log "$response is not equal to $expectedRespOutput"
|
||||
log "'$response' is not equal to '$expectedRespOutput'"
|
||||
exit 1
|
||||
else
|
||||
log "Responses match."
|
||||
fi
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
# test_annotations.sh - tests whether a user is able to add pod annotations to a Fission environment deployment
|
||||
|
||||
TEST_ID=$(date +%s)
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ENV=python-${TEST_ID}
|
||||
FN=foo-${TEST_ID}
|
||||
RESOURCE_NS=default # Change to test-specific namespace once we support namespaced CRDs
|
||||
FUNCTION_NS=${FUNCTION_NAMESPACE:-fission-function}
|
||||
BUILDER_NS=fission-builder
|
||||
LIST_ANNOTATIONS=go-template='{{range $key,$value := .metadata.annotations}}{{$key}}: {{$value}}{{"\n"}}{{end}}'
|
||||
|
||||
# fs
|
||||
TEST_DIR=/tmp/${TEST_ID}
|
||||
ENV_SPEC_FILE=${TEST_DIR}/${ENV}.yaml
|
||||
FN_FILE=${TEST_DIR}/${FN}.yaml
|
||||
ENV_SPEC_FILE=$tmp_dir/${ENV}.yaml
|
||||
|
||||
log_exec() {
|
||||
cmd=$@
|
||||
@@ -25,22 +28,16 @@ log_exec() {
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
kubectl -n ${RESOURCE_NS} delete environment/${ENV} || true
|
||||
rm -rf ${TEST_DIR}
|
||||
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
if ! stat ${TEST_DIR} >/dev/null 2>&1 ; then
|
||||
mkdir ${TEST_DIR}
|
||||
fi
|
||||
|
||||
getPodName() {
|
||||
NS=$1
|
||||
POD=$2
|
||||
@@ -57,7 +54,7 @@ getPodName() {
|
||||
# https://unix.stackexchange.com/questions/82598/how-do-i-write-a-retry-logic-in-script-to-keep-retrying-to-run-it-upto-5-times/82610
|
||||
function retry {
|
||||
local n=1
|
||||
local max=5
|
||||
local max=10
|
||||
local delay=10 # pods take time to get ready
|
||||
while true; do
|
||||
"$@" && break || {
|
||||
@@ -88,9 +85,9 @@ metadata:
|
||||
spec:
|
||||
builder:
|
||||
command: build
|
||||
image: gcr.io/fission-ci/python-env-builder:test
|
||||
image: ${PYTHON_BUILDER_IMAGE}
|
||||
runtime:
|
||||
image: gcr.io/fission-ci/python-env:test
|
||||
image: ${PYTHON_RUNTIME_IMAGE}
|
||||
version: 2
|
||||
poolsize: 1
|
||||
EOM
|
||||
|
||||
@@ -1,32 +1,42 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
# global variables
|
||||
env=python-$TEST_ID
|
||||
pkg=""
|
||||
http_status=""
|
||||
url=""
|
||||
|
||||
|
||||
cleanup() {
|
||||
if [ -e "test-deploy-pkg.zip" ]; then
|
||||
rm -rf test-deploy-pkg.zip test_dir
|
||||
fi
|
||||
if [ -e "/tmp/file" ]; then
|
||||
rm -rf /tmp/file
|
||||
fi
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
create_archive() {
|
||||
log "Creating an archive"
|
||||
mkdir test_dir
|
||||
dd if=/dev/urandom of=test_dir/dynamically_generated_file bs=256k count=1
|
||||
printf 'def main():\n return "Hello, world!"' > test_dir/hello.py
|
||||
zip -jr test-deploy-pkg.zip test_dir/
|
||||
mkdir -p $tmp_dir/archive
|
||||
dd if=/dev/urandom of=$tmp_dir/archive/dynamically_generated_file bs=256k count=1
|
||||
printf 'def main():\n return "Hello, world!"' > $tmp_dir/archive/hello.py
|
||||
zip -jr $tmp_dir/test-deploy-pkg.zip $tmp_dir/archive/
|
||||
}
|
||||
|
||||
create_package() {
|
||||
log "Creating package"
|
||||
pkg=$(fission package create --deploy "test-deploy-pkg.zip" --env python| cut -f2 -d' '| tr -d \')
|
||||
pkg=$(fission package create --deploy "$tmp_dir/test-deploy-pkg.zip" --env $env| cut -f2 -d' '| tr -d \')
|
||||
}
|
||||
|
||||
delete_package() {
|
||||
@@ -36,7 +46,7 @@ delete_package() {
|
||||
|
||||
get_archive_url_from_package() {
|
||||
log "Getting archive URL from package: $1"
|
||||
url=`kubectl get package $1 -ojsonpath='{.spec.deployment.url}'`
|
||||
url=`kubectl -n default get package $1 -ojsonpath='{.spec.deployment.url}'`
|
||||
}
|
||||
|
||||
get_archive_from_storage() {
|
||||
@@ -44,7 +54,7 @@ get_archive_from_storage() {
|
||||
controller_ip=$(kubectl -n $FISSION_NAMESPACE get svc controller -o jsonpath='{...ip}')
|
||||
controller_proxy_url=`echo $storage_service_url | sed -e "s/storagesvc.$FISSION_NAMESPACE/$controller_ip\/proxy\/storage/"`
|
||||
log "controller_proxy_url=$controller_proxy_url"
|
||||
http_status=`curl -sw "%{http_code}" $controller_proxy_url -o /tmp/file`
|
||||
http_status=`curl --retry 5 -sw "%{http_code}" $controller_proxy_url -o /dev/null`
|
||||
echo "http_status: $http_status"
|
||||
}
|
||||
|
||||
@@ -56,8 +66,8 @@ get_archive_from_storage() {
|
||||
#6. sleep for two minutes
|
||||
#7. now verify that both got deleted.
|
||||
main() {
|
||||
# trap
|
||||
trap cleanup EXIT
|
||||
log "Creating python env"
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
|
||||
# create a huge archive
|
||||
create_archive
|
||||
@@ -117,8 +127,7 @@ main() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
log "Test archive pruner PASSED"
|
||||
}
|
||||
|
||||
main
|
||||
main
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
ROOT=$(dirname $0)/../..
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
nodejs_env=nodejs-$TEST_ID
|
||||
fn0=nodejs-hello-0-$TEST_ID
|
||||
fn1=nodejs-hello-1-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn1 || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -17,19 +23,13 @@ else
|
||||
fi
|
||||
|
||||
# Create a hello world function in nodejs, test it with an http trigger
|
||||
log "NewDeploy ExecutorType: Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
#trap "fission env delete --name nodejs" EXIT
|
||||
fission env create --name $nodejs_env --image $NODE_RUNTIME_IMAGE --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
|
||||
# TODO Imporve test code by reusing common blocks
|
||||
|
||||
log "Creating function, testing for cold start with MinScale 0"
|
||||
fn0=nodejs-hello-$(date +%N)
|
||||
fission fn create --name $fn0 --env nodejs --code $ROOT/examples/nodejs/hello.js --minscale 0 --maxscale 4 --executortype newdeploy
|
||||
#trap "fission fn delete --name $fn0" EXIT
|
||||
fission fn create --name $fn0 --env $nodejs_env --code $ROOT/examples/nodejs/hello.js --minscale 0 --maxscale 4 --executortype newdeploy
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn0 --url /$fn0 --method GET
|
||||
@@ -38,16 +38,13 @@ log "Waiting for router & newdeploy deployment creation"
|
||||
sleep 5
|
||||
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
response0=$(curl http://$FISSION_ROUTER/$fn0)
|
||||
response0=$(curl --retry 5 http://$FISSION_ROUTER/$fn0)
|
||||
|
||||
log "Checking for valid response"
|
||||
echo $response0 | grep -i hello
|
||||
|
||||
|
||||
log "Creating function, testing for warm start with MinScale 1"
|
||||
fn1=nodejs-hello-$(date +%N)
|
||||
fission fn create --name $fn1 --env nodejs --code $ROOT/examples/nodejs/hello.js --minscale 1 --maxscale 4 --executortype newdeploy
|
||||
#trap "fission fn delete --name $fn1" EXIT
|
||||
fission fn create --name $fn1 --env $nodejs_env --code $ROOT/examples/nodejs/hello.js --minscale 1 --maxscale 4 --executortype newdeploy
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn1 --url /$fn1 --method GET
|
||||
@@ -56,12 +53,9 @@ log "Waiting for router & newdeploy deployment creation"
|
||||
sleep 5
|
||||
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
response1=$(curl http://$FISSION_ROUTER/$fn1)
|
||||
response1=$(curl --retry 5 http://$FISSION_ROUTER/$fn1)
|
||||
|
||||
log "Checking for valid response"
|
||||
echo $response1 | grep -i hello
|
||||
|
||||
# crappy cleanup, improve this later
|
||||
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
|
||||
|
||||
log "NewDeploy ExecutorType: All done."
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
fn=nodejs-hello-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -16,17 +22,13 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
fn=nodejs-hello-$(date +%N)
|
||||
|
||||
# Create a hello world function in nodejs, test it with an http trigger
|
||||
log "Poolmgr ExecutorType: Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
|
||||
log "Creating function"
|
||||
fission fn create --name $fn --env nodejs --code $ROOT/examples/nodejs/hello.js --executortype poolmgr
|
||||
fission fn create --name $fn --env $env --code $ROOT/examples/nodejs/hello.js --executortype poolmgr
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
@@ -40,7 +42,4 @@ response=$(curl http://$FISSION_ROUTER/$fn)
|
||||
log "Checking for valid response"
|
||||
echo $response | grep -i hello
|
||||
|
||||
# crappy cleanup, improve this later
|
||||
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
|
||||
|
||||
log "Poolmgr ExecutorType: All done."
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
# Create a function with source package in python
|
||||
# to test builder manger functionality.
|
||||
@@ -9,10 +16,9 @@ set -euo pipefail
|
||||
# 2. package watcher triggers the build if any changes to packages
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
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)
|
||||
env=python-$TEST_ID
|
||||
fn=python-srcbuild-$TEST_ID
|
||||
|
||||
checkFunctionResponse() {
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
@@ -31,6 +37,7 @@ waitBuild() {
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
export -f waitBuild
|
||||
@@ -47,15 +54,15 @@ waitEnvBuilder() {
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
export -f waitEnvBuilder
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name python || true
|
||||
fission fn delete --name $fn || true
|
||||
rm demo-src-pkg.zip || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -64,20 +71,16 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name python || true
|
||||
kubectl --namespace default get packages|grep -v NAME|awk '{print $1}'|xargs -I@ bash -c 'kubectl --namespace default delete packages @' || true
|
||||
|
||||
log "Creating python env"
|
||||
fission env create --name python --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
|
||||
timeout 180s bash -c "waitEnvBuilder python"
|
||||
timeout 180s bash -c "waitEnvBuilder $env"
|
||||
|
||||
log "Creating source pacakage"
|
||||
zip -jr demo-src-pkg.zip $ROOT/examples/python/sourcepkg/
|
||||
zip -jr $tmp_dir/demo-src-pkg.zip $ROOT/examples/python/sourcepkg/
|
||||
|
||||
log "Creating function " $fn
|
||||
fission fn create --name $fn --env python --src demo-src-pkg.zip --entrypoint "user.main" --buildcmd "./build.sh"
|
||||
fission fn create --name $fn --env $env --src $tmp_dir/demo-src-pkg.zip --entrypoint "user.main" --buildcmd "./build.sh"
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
@@ -93,7 +96,7 @@ timeout 60s bash -c "waitBuild $pkg"
|
||||
checkFunctionResponse $fn
|
||||
|
||||
log "Updating function " $fn
|
||||
fission fn update --name $fn --src demo-src-pkg.zip
|
||||
fission fn update --name $fn --src $tmp_dir/demo-src-pkg.zip
|
||||
|
||||
pkg=$(kubectl --namespace default get functions $fn -o jsonpath='{.spec.package.packageref.name}')
|
||||
|
||||
@@ -102,7 +105,4 @@ timeout 60s bash -c "waitBuild $pkg"
|
||||
|
||||
checkFunctionResponse $fn
|
||||
|
||||
# crappy cleanup, improve this later
|
||||
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
|
||||
|
||||
log "All done."
|
||||
|
||||
+39
-30
@@ -3,52 +3,65 @@
|
||||
# has 2 tests to verify the canary deployments - success scenario and a failure scenario
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
id=""
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
fn_v1=fn-v1-$TEST_ID
|
||||
fn_v2=fn-v2-$TEST_ID
|
||||
fn_v3=fn-v3-$TEST_ID
|
||||
route_succ=route-succ-$TEST_ID
|
||||
route_fail=route-fail-$TEST_ID
|
||||
canary_1=canary-1-$TEST_ID
|
||||
canary_2=canary-2-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name fn-v1 || true
|
||||
fission fn delete --name fn-v2 || true
|
||||
fission fn delete --name fn-v3 || true
|
||||
fission ht delete --name route-success || true
|
||||
fission ht delete --name route-fail || true
|
||||
fission canary-config delete --name canary-1 || true
|
||||
fission canary-config delete --name canary-2 || true
|
||||
log "Cleaning up..."
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
success_scenario() {
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env --graceperiod 1
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE --graceperiod 1
|
||||
|
||||
log "Creating function version-1"
|
||||
fission fn create --name fn-v1 --env nodejs --code $ROOT/examples/nodejs/hello.js
|
||||
fission fn create --name $fn_v1 --env $env --code $ROOT/examples/nodejs/hello.js
|
||||
|
||||
log "Creating function version-1"
|
||||
fission fn create --name fn-v2 --env nodejs --code $ROOT/examples/nodejs/hello.js
|
||||
fission fn create --name $fn_v2 --env $env --code $ROOT/examples/nodejs/hello.js
|
||||
|
||||
log "Create a route for the version-1 of the function with weight 100% and version-2 with weight 0%"
|
||||
fission route create --name route-success --method GET --url /success --function fn-v1 --weight 100 --function fn-v2 --weight 0
|
||||
fission route create --name $route_succ --method GET --url /$route_succ --function $fn_v1 --weight 100 --function $fn_v2 --weight 0
|
||||
|
||||
log "Create a canary config to gradually increment the weight of version-2 by a step of 50 every 1m"
|
||||
fission canary-config create --name canary-1 --newfunction fn-v2 --oldfunction fn-v1 --httptrigger route-success --increment-step 50 --increment-interval 1m --failure-threshold 10
|
||||
fission canary-config create --name $canary_1 --newfunction $fn_v2 --oldfunction $fn_v1 --httptrigger $route_succ --increment-step 50 --increment-interval 1m --failure-threshold 10
|
||||
|
||||
sleep 60
|
||||
|
||||
log "Fire requests to the route"
|
||||
ab -n 300 -c 1 http://$FISSION_ROUTER/success
|
||||
ab -n 300 -c 1 http://$FISSION_ROUTER/$route_succ
|
||||
|
||||
sleep 60
|
||||
|
||||
log "verify that version-2 of the function is receiving 100% traffic"
|
||||
weight=`kubectl get httptrigger route-success -o jsonpath='{.spec.functionref.functionweights.fn-v2}'`
|
||||
weight=`kubectl -n default get httptrigger $route_succ -o jsonpath='{.spec.functionref.functionweights.'$fn_v2'}'`
|
||||
|
||||
if [ "$weight" != "100" ]; then
|
||||
log "weight of fn-v2 at the end of the test is $weight"
|
||||
cleanup
|
||||
log "weight of $fn_v2 at the end of the test is $weight"
|
||||
exit 1
|
||||
else
|
||||
log "canary success scenario test passed"
|
||||
@@ -56,32 +69,30 @@ success_scenario() {
|
||||
}
|
||||
|
||||
failure_scenario() {
|
||||
cp $ROOT/examples/nodejs/hello.js hello_400.js
|
||||
sed -i 's/200/400/' hello_400.js
|
||||
sed 's/200/400/' $ROOT/examples/nodejs/hello.js > $tmp_dir/hello_400.js
|
||||
|
||||
log "Creating function version-3"
|
||||
fission fn create --name fn-v3 --env nodejs --code hello_400.js
|
||||
fission fn create --name $fn_v3 --env $env --code $tmp_dir/hello_400.js
|
||||
|
||||
log "Create a route for the version-1 of the function with weight 100% and version-3 with weight 0%"
|
||||
fission route create --name route-fail --method GET --url /fail --function fn-v1 --weight 100 --function fn-v3 --weight 0
|
||||
fission route create --name $route_fail --method GET --url /$route_fail --function $fn_v1 --weight 100 --function $fn_v3 --weight 0
|
||||
sleep 5
|
||||
|
||||
log "Create a canary config to gradually increment the weight of version-2 by a step of 50 every 1m"
|
||||
fission canary-config create --name canary-2 --newfunction fn-v3 --oldfunction fn-v1 --httptrigger route-fail --increment-step 50 --increment-interval 1m --failure-threshold 10
|
||||
fission canary-config create --name $canary_2 --newfunction $fn_v3 --oldfunction $fn_v1 --httptrigger $route_fail --increment-step 50 --increment-interval 1m --failure-threshold 10
|
||||
|
||||
sleep 60
|
||||
|
||||
log "Fire requests to the route"
|
||||
ab -n 300 -c 1 http://$FISSION_ROUTER/fail
|
||||
ab -n 300 -c 1 http://$FISSION_ROUTER/$route_fail
|
||||
|
||||
sleep 60
|
||||
|
||||
log "verify that version-3 of the function is receiving 0% traffic because of rollback"
|
||||
weight=`kubectl get httptrigger route-fail -o jsonpath='{.spec.functionref.functionweights.fn-v3}'`
|
||||
weight=`kubectl -n default get httptrigger $route_fail -o jsonpath='{.spec.functionref.functionweights.'$fn_v3'}'`
|
||||
|
||||
if [ "$weight" != "0" ]; then
|
||||
log "weight of fn-v3 at the end of the test is $weight"
|
||||
cleanup
|
||||
log "weight of 3 at the end of the test is $weight"
|
||||
exit 1
|
||||
else
|
||||
log "canary failure scenario test passed"
|
||||
@@ -95,8 +106,6 @@ main() {
|
||||
# v3 of a function starts with receiving 0% of the traffic, but because of failure rates crossing the threshold,
|
||||
# this test rollbacks the canary deployment to ensure v1 receives 100% of the traffic.
|
||||
failure_scenario
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
+14
-15
@@ -1,10 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
# test_env_vars.sh - tests whether a user is able to add environment variables to a Fission environment deployment
|
||||
|
||||
TEST_ID=$(date +%s)
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ENV=python-${TEST_ID}
|
||||
FN=foo-${TEST_ID}
|
||||
RESOURCE_NS=default # Change to test-specific namespace once we support namespaced CRDs
|
||||
@@ -12,9 +18,8 @@ FUNCTION_NS=${FUNCTION_NAMESPACE:-fission-function}
|
||||
BUILDER_NS=fission-builder
|
||||
|
||||
# fs
|
||||
TEST_DIR=/tmp/${TEST_ID}
|
||||
ENV_SPEC_FILE=${TEST_DIR}/${ENV}.yaml
|
||||
FN_FILE=${TEST_DIR}/${FN}.yaml
|
||||
ENV_SPEC_FILE=${tmp_dir}/${ENV}.yaml
|
||||
FN_FILE=${tmp_dir}/${FN}.yaml
|
||||
|
||||
log_exec() {
|
||||
cmd=$@
|
||||
@@ -24,22 +29,16 @@ log_exec() {
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
kubectl -n ${RESOURCE_NS} delete environment/${ENV} || true
|
||||
rm -rf ${TEST_DIR}
|
||||
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
if ! stat ${TEST_DIR} >/dev/null 2>&1 ; then
|
||||
mkdir ${TEST_DIR}
|
||||
fi
|
||||
|
||||
getPodName() {
|
||||
NS=$1
|
||||
POD=$2
|
||||
@@ -56,7 +55,7 @@ getPodName() {
|
||||
# https://unix.stackexchange.com/questions/82598/how-do-i-write-a-retry-logic-in-script-to-keep-retrying-to-run-it-upto-5-times/82610
|
||||
function retry {
|
||||
local n=1
|
||||
local max=5
|
||||
local max=10
|
||||
local delay=10 # pods take time to get ready
|
||||
while true; do
|
||||
"$@" && break || {
|
||||
@@ -83,14 +82,14 @@ metadata:
|
||||
spec:
|
||||
builder:
|
||||
command: build
|
||||
image: gcr.io/fission-ci/python-env-builder:test
|
||||
image: ${PYTHON_BUILDER_IMAGE}
|
||||
container:
|
||||
env:
|
||||
- name: TEST_BUILDER_ENV_KEY
|
||||
value: "TEST_BUILDER_ENV_VAR"
|
||||
|
||||
runtime:
|
||||
image: gcr.io/fission-ci/python-env:test
|
||||
image: ${PYTHON_RUNTIME_IMAGE}
|
||||
container:
|
||||
env:
|
||||
- name: TEST_RUNTIME_ENV_KEY
|
||||
|
||||
@@ -1,108 +1,112 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
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
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
env=go-$TEST_ID
|
||||
fn_poolmgr=hello-go-poolmgr-$TEST_ID
|
||||
fn_nd=hello-go-nd-$TEST_ID
|
||||
|
||||
wait_for_builder() {
|
||||
env=$1
|
||||
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'
|
||||
|
||||
# wait for tiller ready
|
||||
set +e
|
||||
while true; do
|
||||
kubectl --namespace fission-builder get pod -l envName=go -o jsonpath="$JSONPATH" | grep "Ready=True"
|
||||
kubectl --namespace fission-builder get pod -l envName=$env -o jsonpath="$JSONPATH" | grep "Ready=True"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 5
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
|
||||
waitBuild() {
|
||||
log "Waiting for builder manager to finish the build"
|
||||
|
||||
set +e
|
||||
while true; do
|
||||
kubectl --namespace default get packages $1 -o jsonpath='{.status.buildstatus}'|grep succeeded
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
test_fn() {
|
||||
log "Checking for valid response"
|
||||
|
||||
while true; do
|
||||
response0=$(curl http://$FISSION_ROUTER/$1)
|
||||
log $response0 | grep -i $2
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
|
||||
export -f wait_for_builder
|
||||
export -f waitBuild
|
||||
export -f test_fn
|
||||
|
||||
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 $GO_RUNTIME_IMAGE --builder $GO_BUILDER_IMAGE --period 5
|
||||
fission env create --name $env --image $GO_RUNTIME_IMAGE --builder $GO_BUILDER_IMAGE --period 5
|
||||
|
||||
timeout 90 bash -c "wait_for_builder"
|
||||
timeout 90 bash -c "wait_for_builder $env"
|
||||
|
||||
pkgName=$(fission package create --src hello.go --env go| cut -f2 -d' '| tr -d \')
|
||||
pkgName=$(fission package create --src hello.go --env $env| cut -f2 -d' '| tr -d \')
|
||||
|
||||
# wait for build to finish at most 90s
|
||||
timeout 90 bash -c "waitBuild $pkgName"
|
||||
|
||||
log "Creating pool manager & new deployment function for Golang"
|
||||
fission fn create --name hello-go-poolmgr --env go --pkg $pkgName --entrypoint Handler
|
||||
fission fn create --name hello-go-nd --env go --pkg $pkgName --entrypoint Handler --executortype newdeploy
|
||||
fission fn create --name $fn_poolmgr --env $env --pkg $pkgName --entrypoint Handler
|
||||
fission fn create --name $fn_nd --env $env --pkg $pkgName --entrypoint Handler --executortype newdeploy
|
||||
|
||||
log "Creating route for new deployment function"
|
||||
fission route create --function hello-go-poolmgr --url /hello-go-poolmgr --method GET
|
||||
fission route create --function hello-go-nd --url /hello-go-nd --method GET
|
||||
fission route create --function $fn_poolmgr --url /$fn_poolmgr --method GET
|
||||
fission route create --function $fn_nd --url /$fn_nd --method GET
|
||||
|
||||
log "Waiting for router & pools to catch up"
|
||||
sleep 5
|
||||
|
||||
log "Testing pool manager function"
|
||||
timeout 60 bash -c "test_fn hello-go-poolmgr 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_poolmgr 'Hello'"
|
||||
|
||||
log "Testing new deployment function"
|
||||
timeout 60 bash -c "test_fn hello-go-nd 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_nd 'Hello'"
|
||||
|
||||
# Create zip file without top level directory (vendor-example)
|
||||
cd vendor-example && zip -r vendor.zip *
|
||||
cd vendor-example && zip -r $tmp_dir/vendor.zip *
|
||||
|
||||
pkgName=$(fission package create --src vendor.zip --env go| cut -f2 -d' '| tr -d \')
|
||||
pkgName=$(fission package create --src $tmp_dir/vendor.zip --env $env| cut -f2 -d' '| tr -d \')
|
||||
|
||||
# wait for build to finish at most 90s
|
||||
timeout 90 bash -c "waitBuild $pkgName"
|
||||
|
||||
log "Update function package"
|
||||
fission fn update --name hello-go-poolmgr --pkg $pkgName
|
||||
fission fn update --name hello-go-nd --pkg $pkgName
|
||||
fission fn update --name $fn_poolmgr --pkg $pkgName
|
||||
fission fn update --name $fn_nd --pkg $pkgName
|
||||
|
||||
log "Waiting for router & pools to catch up"
|
||||
sleep 5
|
||||
|
||||
log "Testing pool manager function with new package"
|
||||
timeout 60 bash -c "test_fn hello-go-poolmgr 'vendor'"
|
||||
timeout 60 bash -c "test_fn $fn_poolmgr 'Vendor'"
|
||||
|
||||
log "Testing new deployment function with new package"
|
||||
timeout 60 bash -c "test_fn hello-go-nd 'vendor'"
|
||||
timeout 60 bash -c "test_fn $fn_nd 'Vendor'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
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}
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
env=java-$TEST_ID
|
||||
fn_p=pbuilderhello-$TEST_ID
|
||||
fn_n=nbuilderhello-$TEST_ID
|
||||
|
||||
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
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
test_fn() {
|
||||
echo "Checking for valid response"
|
||||
|
||||
while true; do
|
||||
response0=$(curl http://$FISSION_ROUTER/$1)
|
||||
echo $response0 | grep -i $2
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
test_pkg() {
|
||||
echo "Checking for valid response"
|
||||
echo "Checking package for valid response"
|
||||
|
||||
set +e
|
||||
while true; do
|
||||
response0=$(kubectl get -ndefault package $1 -o=jsonpath='{.status.buildstatus}')
|
||||
echo $response0 | grep -i $2
|
||||
@@ -38,43 +38,43 @@ test_pkg() {
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
set -e
|
||||
}
|
||||
|
||||
export -f test_fn
|
||||
export -f test_pkg
|
||||
|
||||
cd $ROOT/examples/jvm/java
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
log "Creating zip from source code"
|
||||
zip -r java-src-pkg.zip *
|
||||
zip -r $tmp_dir/java-src-pkg.zip *
|
||||
|
||||
log "Creating Java environment with Java Builder"
|
||||
fission env create --name java --image $JVM_RUNTIME_IMAGE --version 2 --keeparchive --builder $JVM_BUILDER_IMAGE
|
||||
fission env create --name $env --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`
|
||||
pkg_name=`fission package create --sourcearchive $tmp_dir/java-src-pkg.zip --env $env|cut -d' ' -f 2|cut -d"'" -f 2`
|
||||
log "Created package $pkg_name"
|
||||
|
||||
log "Checking the status of package"
|
||||
timeout 300 bash -c "test_pkg $pkg_name 'succeeded'"
|
||||
timeout 400 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
|
||||
fission fn create --name $fn_n --pkg $pkg_name --env $env --entrypoint io.fission.HelloWorld --executortype newdeploy --minscale 1 --maxscale 1
|
||||
fission fn create --name $fn_p --pkg $pkg_name --env $env --entrypoint io.fission.HelloWorld
|
||||
|
||||
log "Creating route for pool manager function"
|
||||
fission route create --function pbuilderhello --url /pbuilderhello --method GET
|
||||
fission route create --function $fn_p --url /$fn_p --method GET
|
||||
|
||||
log "Creating route for new deployment function"
|
||||
fission route create --function nbuilderhello --url /nbuilderhello --method GET
|
||||
fission route create --function $fn_n --url /$fn_n --method GET
|
||||
|
||||
log "Waiting for router & pools to catch up"
|
||||
sleep 5
|
||||
|
||||
log "Testing pool manager function"
|
||||
timeout 60 bash -c "test_fn pbuilderhello 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_p 'Hello'"
|
||||
|
||||
log "Testing new deployment function"
|
||||
timeout 60 bash -c "test_fn nbuilderhello 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_n 'Hello'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -3,29 +3,26 @@
|
||||
#test:disabled
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=jvm-$TEST_ID
|
||||
fn_n=jvm-hello-n-$TEST_ID
|
||||
fn_p=jvm-hello-p-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
fission fn delete --name hellon || true
|
||||
fission fn delete --name hellop || true
|
||||
fission env delete --name jvm || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
test_fn() {
|
||||
echo "Checking for valid response"
|
||||
|
||||
while true; do
|
||||
response0=$(curl http://$FISSION_ROUTER/$1)
|
||||
echo $response0 | grep -i $2
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
export -f test_fn
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
cd $ROOT/examples/jvm/java
|
||||
|
||||
@@ -34,24 +31,25 @@ log "Creating the jar from application"
|
||||
docker run -it --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.5-jdk-8 mvn clean package -q
|
||||
|
||||
log "Creating environment for Java"
|
||||
fission env create --name jvm --image gcr.io/fission-ci/jvm-env:test --version 2 --keeparchive=true
|
||||
fission env create --name $env --image $JVM_RUNTIME_IMAGE --version 2 --keeparchive=true
|
||||
|
||||
log "Creating pool manager & new deployment function for Java"
|
||||
fission fn create --name hellop --deploy target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar --env jvm --entrypoint io.fission.HelloWorld
|
||||
fission fn create --name hellon --deploy target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar --env jvm --executortype newdeploy --entrypoint io.fission.HelloWorld
|
||||
trap cleanup EXIT
|
||||
fission fn create --name $fn_p --deploy target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar --env $env --entrypoint io.fission.HelloWorld
|
||||
fission fn create --name $fn_n --deploy target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar --env $env --executortype newdeploy --entrypoint io.fission.HelloWorld
|
||||
|
||||
log "Creating route for pool manager function"
|
||||
fission route create --function hellop --url /hellop --method GET
|
||||
fission route create --name $fn_p --function $fn_p --url /$fn_p --method GET
|
||||
|
||||
log "Creating route for new deployment function"
|
||||
fission route create --function hellon --url /hellon --method GET
|
||||
fission route create --name $fn_n --function $fn_n --url /$fn_n --method GET
|
||||
|
||||
log "Waiting for router & pools to catch up"
|
||||
sleep 5
|
||||
|
||||
log "Testing pool manager function"
|
||||
timeout 60 bash -c "test_fn hellop 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_p 'Hello'"
|
||||
|
||||
log "Testing new deployment function"
|
||||
timeout 60 bash -c "test_fn hellon 'Hello'"
|
||||
timeout 60 bash -c "test_fn $fn_n 'Hello'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Common methods used for testing function update
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
test_fn() {
|
||||
echo "Doing an HTTP GET on the function's route"
|
||||
echo "Checking for valid response"
|
||||
|
||||
while true; do
|
||||
response0=$(curl http://$FISSION_ROUTER/$1)
|
||||
echo $response0 | grep -i $2
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
export -f test_fn
|
||||
@@ -1,25 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn_name=hellopy-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn_name=hellopy-$TEST_ID
|
||||
|
||||
old_cfgmap=old-cfgmap-$(date +%N)
|
||||
new_cfgmap=new-cfgmap-$(date +%N)
|
||||
old_cfgmap=old-cfgmap-$TEST_ID
|
||||
new_cfgmap=new-cfgmap-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
kubectl delete configmap ${old_cfgmap} -n default || true
|
||||
kubectl delete configmap ${new_cfgmap} -n default || true
|
||||
fission spec destroy || true
|
||||
rm -rf specs || true
|
||||
rm cfgmap.py || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -28,22 +29,25 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
cp ../test_secret_cfgmap/cfgmap.py.template cfgmap.py
|
||||
sed -i "s/{{ FN_CFGMAP }}/${old_cfgmap}/g" cfgmap.py
|
||||
sed "s/{{ FN_CFGMAP }}/${old_cfgmap}/g" \
|
||||
$(dirname $0)/../test_secret_cfgmap/cfgmap.py.template \
|
||||
> $tmp_dir/cfgmap.py
|
||||
|
||||
log "Creating env $env"
|
||||
fission env create --name $env --image fission/python-env
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Creating configmap $old_cfgmap"
|
||||
kubectl create configmap ${old_cfgmap} --from-literal=TEST_KEY="TESTVALUE" -n default
|
||||
|
||||
log "Creating NewDeploy function spec: $fn_name"
|
||||
pushd $tmp_dir
|
||||
fission spec init
|
||||
fission fn create --spec --name $fn_name --env $env --code cfgmap.py --configmap $old_cfgmap --minscale 1 --maxscale 4 --executortype newdeploy
|
||||
fission spec apply ./specs/
|
||||
fission spec apply
|
||||
popd
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_name} --url /${fn_name} --method GET
|
||||
fission route create --name ${fn_name} --function ${fn_name} --url /${fn_name} --method GET
|
||||
|
||||
log "Waiting for router to catch up"
|
||||
sleep 5
|
||||
@@ -55,14 +59,18 @@ log "Creating a new cfgmap"
|
||||
kubectl create configmap ${new_cfgmap} --from-literal=TEST_KEY="TESTVALUE_NEW" -n default
|
||||
|
||||
log "Updating cfgmap and code for the function"
|
||||
sed -i "s/${old_cfgmap}/${new_cfgmap}/g" cfgmap.py
|
||||
sed -i "s/${old_cfgmap}/${new_cfgmap}/g" specs/function-$fn_name.yaml
|
||||
sed -i "s/${old_cfgmap}/${new_cfgmap}/g" $tmp_dir/cfgmap.py
|
||||
sed -i "s/${old_cfgmap}/${new_cfgmap}/g" $tmp_dir/specs/function-$fn_name.yaml
|
||||
|
||||
log "Applying function changes"
|
||||
fission spec apply ./specs/
|
||||
pushd $tmp_dir
|
||||
fission spec apply
|
||||
popd
|
||||
|
||||
log "Waiting for changes to take effect"
|
||||
sleep 5
|
||||
sleep 10
|
||||
|
||||
log "Testing function for cfgmap value"
|
||||
timeout 60 bash -c "test_fn $fn_name 'TESTVALUE_NEW'"
|
||||
timeout 90 bash -c "test_fn $fn_name 'TESTVALUE_NEW'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env_old=python-$(date +%N)
|
||||
env_new=python-$(date +%N)
|
||||
fn=hellopy-$(date +%N)
|
||||
env_old=python-old-$TEST_ID
|
||||
env_new=python-new-$TEST_ID
|
||||
fn=hellopy-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env_old || true
|
||||
fission fn delete --name $fn || true
|
||||
fission env delete --name $env_new || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
@@ -25,7 +24,7 @@ else
|
||||
fi
|
||||
|
||||
log "Creating env $env_old"
|
||||
fission env create --name $env_old --image fission/python-env
|
||||
fission env create --name $env_old --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function $fn"
|
||||
fission fn create --name $fn --env $env_old --code $ROOT/examples/python/hello.py --minscale 1 --maxscale 4 --executortype newdeploy --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
@@ -39,7 +38,7 @@ sleep 5
|
||||
timeout 60 bash -c "test_fn $fn 'world'"
|
||||
|
||||
log "Creating a new env $env_new"
|
||||
fission env create --name $env_new --image fission/python-env
|
||||
fission env create --name $env_new --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Updating function with a new environment"
|
||||
fission fn update --name $fn --env $env_new --code $ROOT/examples/python/hello.py --minscale 1 --maxscale 4 --executortype newdeploy --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
@@ -48,3 +47,5 @@ log "Waiting for update to catch up"
|
||||
sleep 5
|
||||
|
||||
timeout 60 bash -c "test_fn $fn 'world'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,23 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
#test:disabled
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
env=python-$(date +%s)
|
||||
fn=hellopython-$(date +%s)
|
||||
env=python-$TEST_ID
|
||||
fn=hellopython-$TEST_ID
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission fn delete --name ${fn}-nd || true
|
||||
fission fn delete --name ${fn}-gpm || true
|
||||
fission env delete --name $env || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
@@ -25,7 +22,7 @@ else
|
||||
fi
|
||||
|
||||
log "Creating Python env $env"
|
||||
fission env create --name $env --image fission/python-env --period 5
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --period 5
|
||||
|
||||
log "Creating function ${fn}-nd, ${fn}-gpm"
|
||||
fission fn create --name ${fn}-nd --env $env --code $ROOT/examples/python/hello.py --minscale 0 --maxscale 2 --executortype newdeploy
|
||||
@@ -50,14 +47,18 @@ sleep 260
|
||||
ndDeployReplicas=$(kubectl -n $FUNCTION_NAMESPACE get deploy -l functionName=${fn}-nd -ojsonpath='{.items[0].spec.replicas}')
|
||||
if [ "$ndDeployReplicas" -ne "0" ]
|
||||
then
|
||||
log "Failed to reap idle function pod for function ${fn}-nd"
|
||||
log "Failed to reap idle function pod for function ${fn}-nd. replicas should be 0 but got $ndDeployReplicas"
|
||||
kubectl -n $FUNCTION_NAMESPACE get deploy -l functionName=${fn}-nd -o yaml
|
||||
exit 1
|
||||
fi
|
||||
|
||||
gpmNumberOfPod=$(kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm -o name|wc -l)
|
||||
set +o pipefail
|
||||
gpmNumberOfPod=$(kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm | grep Running | wc -l)
|
||||
set -o pipefail
|
||||
if [ "$gpmNumberOfPod" -ne "0" ]
|
||||
then
|
||||
log "Failed to reap idle function pod for function ${fn}-gpm"
|
||||
log "Failed to reap idle function pod for function ${fn}-gpm. replicas should be 0 but got $gpmNumberOfPod"
|
||||
kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm -o yaml
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -70,13 +71,19 @@ timeout 60 bash -c "test_fn ${fn}-gpm 'world'"
|
||||
ndDeployReplicas=$(kubectl -n $FUNCTION_NAMESPACE get deploy -l functionName=${fn}-nd -ojsonpath='{.items[0].spec.replicas}')
|
||||
if [ "$ndDeployReplicas" -ne "1" ]
|
||||
then
|
||||
log "Failed to reap idle function pod for function ${fn}-nd"
|
||||
log "Failed to scale function pod for function ${fn}-nd. replicas should be 1 but got $ndDeployReplicas"
|
||||
kubectl -n $FUNCTION_NAMESPACE get deploy -l functionName=${fn}-nd -o yaml
|
||||
exit 1
|
||||
fi
|
||||
|
||||
gpmNumberOfPod=$(kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm -o name|wc -l)
|
||||
set +o pipefail
|
||||
gpmNumberOfPod=$(kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm | grep Running | wc -l)
|
||||
set -o pipefail
|
||||
if [ "$gpmNumberOfPod" -ne "1" ]
|
||||
then
|
||||
log "Failed to reap idle function pod for function ${fn}-gpm"
|
||||
log "Failed to scale function pod for function ${fn}-gpm. replicas should be 1 but got $gpmNumberOfPod"
|
||||
kubectl -n $FUNCTION_NAMESPACE get pod -l functionName=${fn}-gpm -o yaml
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,26 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
# global variables
|
||||
pkg=""
|
||||
http_status=""
|
||||
url=""
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
|
||||
if [ -e "test-deploy-pkg.zip" ]; then
|
||||
rm -rf test-deploy-pkg.zip test_dir || true
|
||||
fi
|
||||
if [ -e "/tmp/file" ]; then
|
||||
rm -rf /tmp/file || true
|
||||
fi
|
||||
|
||||
fission env delete --name $env || true
|
||||
fission fn delete --name $fn_name || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -33,19 +25,19 @@ fi
|
||||
# Creates a archive, env. with builder and a function and tests for response
|
||||
# Then updates archive with a different word and udpates functions to check for new string in response
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn_name=hellopython-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn_name=hellopython-$TEST_ID
|
||||
|
||||
log "Creating an archive"
|
||||
mkdir test_dir
|
||||
printf 'def main():\n return "Hello, world!"' > test_dir/hello.py
|
||||
zip -jr test-deploy-pkg.zip test_dir/
|
||||
mkdir -p $tmp_dir/test_dir
|
||||
printf 'def main():\n return "Hello, world!"' > $tmp_dir/test_dir/hello.py
|
||||
zip -jr $tmp_dir/test-deploy-pkg.zip $tmp_dir/test_dir/
|
||||
|
||||
log "Creating environment"
|
||||
fission env create --name $env --image fission/python-env:latest --builder fission/python-builder:latest --mincpu 40 --maxcpu 80 --minmemory 64 --maxmemory 128 --poolsize 2
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE --mincpu 40 --maxcpu 80 --minmemory 64 --maxmemory 128 --poolsize 2
|
||||
|
||||
log "Creating functiom"
|
||||
fission fn create --name $fn_name --env $env --deploy test-deploy-pkg.zip --entrypoint "hello.main" --executortype newdeploy --minscale 1 --maxscale 4 --targetcpu 50
|
||||
fission fn create --name $fn_name --env $env --deploy $tmp_dir/test-deploy-pkg.zip --entrypoint "hello.main" --executortype newdeploy --minscale 1 --maxscale 4 --targetcpu 50
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn_name --url /$fn_name --method GET
|
||||
@@ -56,11 +48,11 @@ sleep 5
|
||||
timeout 60 bash -c "test_fn $fn_name 'world'"
|
||||
|
||||
log "Updating the archive"
|
||||
sed -i 's/world/fission/' test_dir/hello.py
|
||||
zip -jr test-deploy-pkg.zip test_dir/
|
||||
sed -i 's/world/fission/' $tmp_dir/test_dir/hello.py
|
||||
zip -jr $tmp_dir/test-deploy-pkg.zip $tmp_dir/test_dir/
|
||||
|
||||
log "Updating function with updated package"
|
||||
fission fn update --name $fn_name --deploy test-deploy-pkg.zip --entrypoint "hello.main" --executortype newdeploy --minscale 1 --maxscale 4 --targetcpu 50
|
||||
fission fn update --name $fn_name --deploy $tmp_dir/test-deploy-pkg.zip --entrypoint "hello.main" --executortype newdeploy --minscale 1 --maxscale 4 --targetcpu 50
|
||||
|
||||
log "Waiting for deployment to update"
|
||||
sleep 5
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn=hellopython-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn=hellopython-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
fission fn delete --name $fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -22,7 +23,7 @@ else
|
||||
fi
|
||||
|
||||
log "Creating Python env $env"
|
||||
fission env create --name $env --image fission/python-env --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
|
||||
log "Creating function $fn"
|
||||
fission fn create --name $fn --env $env --code $ROOT/examples/python/hello.py
|
||||
@@ -50,3 +51,4 @@ log "Waiting for router to catch up"
|
||||
sleep 5
|
||||
|
||||
timeout 60 bash -c "test_fn $fn 'world'"
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn=hellopython-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn=hellopython-$TEST_ID
|
||||
|
||||
mincpu1=40
|
||||
maxcpu1=140
|
||||
@@ -21,11 +23,9 @@ maxmem2=768
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
fission fn delete --name $fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
@@ -33,7 +33,7 @@ else
|
||||
fi
|
||||
|
||||
log "Creating Python env $env"
|
||||
fission env create --name $env --image fission/python-env --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
|
||||
log "Creating function $fn"
|
||||
fission fn create --name $fn --env $env --code $ROOT/examples/python/hello.py --minscale 1 --maxscale 4 --executortype newdeploy --mincpu $mincpu1 --maxcpu $maxcpu1 --minmemory $minmem1 --maxmemory $maxmem1
|
||||
@@ -87,3 +87,4 @@ then
|
||||
fi
|
||||
|
||||
timeout 60 bash -c "test_fn $fn 'world'"
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn=hellopython-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn=hellopython-$TEST_ID
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
targetMinScale=2
|
||||
@@ -14,11 +16,9 @@ targetCpuPercent=60
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
fission fn delete --name $fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
cleanup
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
@@ -26,7 +26,7 @@ else
|
||||
fi
|
||||
|
||||
log "Creating Python env $env"
|
||||
fission env create --name $env --image fission/python-env --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
|
||||
log "Creating function $fn"
|
||||
fission fn create --name $fn --env $env --code $ROOT/examples/python/hello.py --minscale 1 --maxscale 4 --executortype newdeploy --mincpu 20 --maxcpu 100 --minmemory 128 --maxmemory 256
|
||||
@@ -70,3 +70,4 @@ then
|
||||
fi
|
||||
|
||||
timeout 60 bash -c "test_fn $fn 'world'"
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
source $(dirname $0)/fnupdate_utils.sh
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$(date +%N)
|
||||
fn_name=hellopython-$(date +%N)
|
||||
env=python-$TEST_ID
|
||||
fn_name=hellopython-$TEST_ID
|
||||
|
||||
old_secret=old-secret-$(date +%N)
|
||||
new_secret=new-secret-$(date +%N)
|
||||
old_secret=old-secret-$TEST_ID
|
||||
new_secret=new-secret-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
kubectl delete secret ${old_secret} -n default || true
|
||||
kubectl delete secret ${new_secret} -n default || true
|
||||
fission spec destroy || true
|
||||
rm -rf specs || true
|
||||
rm secret.py || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -28,19 +29,22 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
cp $ROOT/test/tests/test_secret_cfgmap/secret.py.template secret.py
|
||||
sed -i "s/{{ FN_SECRET }}/${old_secret}/g" secret.py
|
||||
sed "s/{{ FN_SECRET }}/${old_secret}/g" \
|
||||
$ROOT/test/tests/test_secret_cfgmap/secret.py.template \
|
||||
> $tmp_dir/secret.py
|
||||
|
||||
log "Creating env $env"
|
||||
fission env create --name $env --image fission/python-env
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Creating secret $old_secret"
|
||||
kubectl create secret generic ${old_secret} --from-literal=TEST_KEY="TESTVALUE" -n default
|
||||
|
||||
log "Creating NewDeploy function spec: $fn_name"
|
||||
pushd $tmp_dir
|
||||
fission spec init
|
||||
fission fn create --spec --name $fn_name --env $env --code secret.py --secret $old_secret --minscale 1 --maxscale 4 --executortype newdeploy
|
||||
fission spec apply ./specs/
|
||||
fission spec apply
|
||||
popd
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_name} --url /${fn_name} --method GET
|
||||
@@ -55,14 +59,17 @@ log "Creating a new secret"
|
||||
kubectl create secret generic ${new_secret} --from-literal=TEST_KEY="TESTVALUE_NEW" -n default
|
||||
|
||||
log "Updating secret and code for the function"
|
||||
sed -i "s/${old_secret}/${new_secret}/g" secret.py
|
||||
sed -i "s/${old_secret}/${new_secret}/g" specs/function-$fn_name.yaml
|
||||
sed -i "s/${old_secret}/${new_secret}/g" $tmp_dir/secret.py
|
||||
sed -i "s/${old_secret}/${new_secret}/g" $tmp_dir/specs/function-$fn_name.yaml
|
||||
|
||||
log "Applying function changes"
|
||||
fission spec apply ./specs/
|
||||
pushd $tmp_dir
|
||||
fission spec apply
|
||||
popd
|
||||
|
||||
log "Waiting for changes to take effect"
|
||||
sleep 5
|
||||
|
||||
log "Testing function for secret value"
|
||||
timeout 60 bash -c "test_fn $fn_name 'TESTVALUE_NEW'"
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -4,16 +4,22 @@
|
||||
# Disabled because CI Fails for invalid function https://github.com/fission/fission/issues/653
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
env=nodejs-$(date +%N)
|
||||
valid_fn_name=hello-$(date +%N)
|
||||
invalid_fn_name=errhello-$(date +%N)
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
valid_fn_name=hello-$TEST_ID
|
||||
invalid_fn_name=errhello-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name $env || true
|
||||
fission fn delete --name $valid_fn_name || true
|
||||
fission fn delete --name $invalid_fn_name || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -23,18 +29,18 @@ else
|
||||
fi
|
||||
|
||||
log "Creating env $env"
|
||||
fission env create --name $env --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating valid function $valid_fn_name"
|
||||
fission fn create --name $valid_fn_name --env $env --code hello.js
|
||||
fission fn create --name $valid_fn_name --env $env --code $(dirname $0)/hello.js
|
||||
|
||||
log "Testing valid function $valid_fn_name"
|
||||
fission fn test --name $valid_fn_name > /tmp/valid.log
|
||||
fission fn test --name $valid_fn_name > $tmp_dir/valid.log
|
||||
|
||||
log "---Valid Function logs---"
|
||||
cat /tmp/valid.log
|
||||
cat $tmp_dir/valid.log
|
||||
log "------"
|
||||
valid_num=$(grep 'Hello, Fission' /tmp/valid.log | wc -l)
|
||||
valid_num=$(grep 'Hello, Fission' $tmp_dir/valid.log | wc -l)
|
||||
|
||||
if [ $valid_num -ne 1 ]
|
||||
then
|
||||
@@ -43,26 +49,26 @@ then
|
||||
fi
|
||||
|
||||
log "Creating function with an error $invalid_fn_name"
|
||||
fission fn create --name $invalid_fn_name --env $env --code errhello.js
|
||||
fission fn create --name $invalid_fn_name --env $env --code $(dirname $0)/errhello.js
|
||||
|
||||
log "Testing invalid function $valid_fn_name"
|
||||
fission fn test --name $invalid_fn_name > /tmp/invalid.log
|
||||
fission fn test --name $invalid_fn_name > $tmp_dir/invalid.log
|
||||
|
||||
for i in {1..10}
|
||||
do
|
||||
size=$(wc -c </tmp/invalid.log)
|
||||
size=$(wc -c < $tmp_dir/invalid.log)
|
||||
if [ $size == 0 ]
|
||||
then
|
||||
fission fn test --name $invalid_fn_name > /tmp/invalid.log
|
||||
fission fn test --name $invalid_fn_name > $tmp_dir/invalid.log
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
log "---Invalid Function logs---"
|
||||
cat /tmp/invalid.log
|
||||
cat $tmp_dir/invalid.log
|
||||
log "------"
|
||||
invalid_num=$(grep 'SyntaxError' /tmp/invalid.log | wc -l)
|
||||
invalid_num=$(grep 'SyntaxError' $tmp_dir/invalid.log | wc -l)
|
||||
|
||||
if [ $invalid_num -ne 1 ]
|
||||
then
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
fn=nodejs-hello-$(date +%s)
|
||||
env=nodejs-$TEST_ID
|
||||
fn=nodejs-hello-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn || true
|
||||
rm foo.js || true
|
||||
rm bar.js || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -23,15 +30,12 @@ fi
|
||||
# Update it and check it's output, the output should be
|
||||
# different from the previous one.
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function"
|
||||
echo 'module.exports = function(context, callback) { callback(200, "foo!\n"); }' > foo.js
|
||||
fission fn create --name $fn --env nodejs --code foo.js
|
||||
echo 'module.exports = function(context, callback) { callback(200, "foo!\n"); }' > $tmp_dir/foo.js
|
||||
fission fn create --name $fn --env $env --code $tmp_dir/foo.js
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
@@ -52,8 +56,8 @@ echo $response | grep -i foo
|
||||
pid=$!
|
||||
|
||||
log "Updating function"
|
||||
echo 'module.exports = function(context, callback) { callback(200, "bar!\n"); }' > bar.js
|
||||
fission fn update --name $fn --code bar.js
|
||||
echo 'module.exports = function(context, callback) { callback(200, "bar!\n"); }' > $tmp_dir/bar.js
|
||||
fission fn update --name $fn --code $tmp_dir/bar.js
|
||||
|
||||
log "Waiting for router to update cache"
|
||||
sleep 10
|
||||
@@ -66,7 +70,4 @@ echo $response | grep -i bar
|
||||
|
||||
kill -15 $pid
|
||||
|
||||
# crappy cleanup, improve this later
|
||||
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
|
||||
|
||||
log "All done."
|
||||
|
||||
@@ -1,19 +1,28 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
relativeUrl="/itest"
|
||||
functionName="hellotest"
|
||||
hostName="test.com"
|
||||
relativeUrl="/itest-$TEST_ID"
|
||||
functionName="hellotest-$TEST_ID"
|
||||
hostName="test-$TEST_ID.com"
|
||||
|
||||
cleanup() {
|
||||
fission route delete --name $1
|
||||
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
|
||||
|
||||
log "Creating route for URL $relativeUrl"
|
||||
route_name=$(fission route create --url $relativeUrl --function $functionName --createingress| grep trigger| cut -d" " -f 2|cut -d"'" -f 2)
|
||||
trap "cleanup $route_name" EXIT
|
||||
|
||||
log "Route $route_name created"
|
||||
|
||||
@@ -42,4 +51,6 @@ if [ $hostName != $actual_host ]
|
||||
then
|
||||
log "Provided host and host in ingress don't match"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -6,21 +6,25 @@
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
log "Writing functions"
|
||||
f1=f1-$(date +%s)
|
||||
f2=f2-$(date +%s)
|
||||
env=nodejs-$TEST_ID
|
||||
f1=f1-$TEST_ID
|
||||
f2=f2-$TEST_ID
|
||||
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
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -29,23 +33,20 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
|
||||
|
||||
for f in $f1 $f2
|
||||
do
|
||||
echo "module.exports = function(context, callback) { callback(200, \"$f\n\"); }" > $f.js
|
||||
echo "module.exports = function(context, callback) { callback(200, \"$f\n\"); }" > $tmp_dir/$f.js
|
||||
done
|
||||
|
||||
log "Creating functions"
|
||||
for f in $f1 $f2
|
||||
do
|
||||
fission fn create --name $f --env nodejs --code $f.js
|
||||
fission fn create --name $f --env $env --code $tmp_dir/$f.js
|
||||
done
|
||||
|
||||
log "Waiting for router to catch up"
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
fn=nodejs-logtest-$(date +%N)
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=nodejs-$TEST_ID
|
||||
fn=nodejs-logtest-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
var=$(fission route list | grep $fn | awk '{print $1;}')
|
||||
fission fn delete --name $fn || true
|
||||
fission env delete --name nodejs || true
|
||||
log "delete logfile" || true
|
||||
rm "/tmp/logfile" || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -24,16 +28,16 @@ fi
|
||||
|
||||
# Create a hello world function in nodejs, test it with an http trigger
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function"
|
||||
fission fn create --name $fn --env nodejs --code log.js
|
||||
fission fn create --name $fn --env $env --code $(dirname $0)/log.js
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
|
||||
log "Waiting for router to catch up"
|
||||
sleep 15
|
||||
sleep 3
|
||||
|
||||
log "Doing 4 HTTP GETs on the function's route"
|
||||
for i in 1 2 3 4
|
||||
@@ -45,18 +49,18 @@ log "Grabbing logs, should have 4 calls in logs"
|
||||
|
||||
sleep 60
|
||||
|
||||
fission function logs --name $fn --detail > /tmp/logfile
|
||||
fission function logs --name $fn --detail > $tmp_dir/logfile
|
||||
|
||||
size=$(wc -c </tmp/logfile)
|
||||
size=$(wc -c < $tmp_dir/logfile)
|
||||
if [ $size == 0 ]
|
||||
then
|
||||
fission function logs --name $fn --detail > /tmp/logfile
|
||||
fission function logs --name $fn --detail > $tmp_dir/logfile
|
||||
fi
|
||||
|
||||
log "---function logs---"
|
||||
cat /tmp/logfile
|
||||
cat $tmp_dir/logfile
|
||||
log "------"
|
||||
num=$(grep 'log test' /tmp/logfile | wc -l)
|
||||
num=$(grep 'log test' $tmp_dir/logfile | wc -l)
|
||||
log $num logs found
|
||||
|
||||
if [ $num -ne 4 ]
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
fn=nodejs-hello-$(date +%N)
|
||||
env=nodejs-$TEST_ID
|
||||
fn=nodejs-hello-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name nodejs || true
|
||||
fission fn delete --name $fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -19,14 +23,11 @@ else
|
||||
fi
|
||||
|
||||
# Create a hello world function in nodejs, test it with an http trigger
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name nodejs || true
|
||||
|
||||
log "Creating nodejs env"
|
||||
fission env create --name nodejs --image fission/node-env
|
||||
fission env create --name $env --image $NODE_RUNTIME_IMAGE
|
||||
|
||||
log "Creating function"
|
||||
fission fn create --name $fn --env nodejs --code $ROOT/examples/nodejs/hello.js
|
||||
fission fn create --name $fn --env $env --code $ROOT/examples/nodejs/hello.js
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
@@ -35,12 +36,9 @@ log "Waiting for router to catch up"
|
||||
sleep 3
|
||||
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
response=$(curl http://$FISSION_ROUTER/$fn)
|
||||
response=$(curl --retry 5 http://$FISSION_ROUTER/$fn)
|
||||
|
||||
log "Checking for valid response"
|
||||
echo $response | grep -i hello
|
||||
|
||||
routeid=$(fission route list|grep "$fn"|awk '{print $1}')
|
||||
fission route delete --name $routeid || true
|
||||
|
||||
log "All done."
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
#!/bin/bash
|
||||
#test:disabled
|
||||
|
||||
# TODO: This test takes too long to run. It should be split into multiple little tests.
|
||||
|
||||
# we may not need this to run as a pre-check-in test for every PR. but only once in a while to ensure nothing's broken.
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
id=""
|
||||
ROOT=$(dirname $0)/../..
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
# Use package command to create packages of type:
|
||||
# 1) Multiple source files from a directory
|
||||
@@ -13,25 +20,27 @@ set -euo pipefail
|
||||
# Then create a function to test the packages created by package command are
|
||||
# able to work.
|
||||
|
||||
# TODO: seperate to multiple tests
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
PYTHON_RUNTIME_IMAGE=gcr.io/fission-ci/python-env:test
|
||||
PYTHON_BUILDER_IMAGE=gcr.io/fission-ci/python-env-builder:test
|
||||
|
||||
fn1=python-srcbuild1-$(date +%s)
|
||||
fn2=python-srcbuild2-$(date +%s)
|
||||
env=python-$TEST_ID
|
||||
fn1=python-srcbuild1-$TEST_ID
|
||||
fn2=python-srcbuild2-$TEST_ID
|
||||
|
||||
fn4=python-deploy4-$(date +%s)
|
||||
fn5=python-deploy5-$(date +%s)
|
||||
fn4=python-deploy4-$TEST_ID
|
||||
fn5=python-deploy5-$TEST_ID
|
||||
|
||||
waitBuild() {
|
||||
log "Waiting for builder manager to finish the build"
|
||||
|
||||
while true; do
|
||||
kubectl --namespace default get packages $1 -o jsonpath='{.status.buildstatus}'|grep succeeded
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
status=$(kubectl --namespace default get packages $1 -o jsonpath='{.status.buildstatus}')
|
||||
if (echo $status | grep succeeded); then
|
||||
break
|
||||
else
|
||||
log "status=$status Waiting for build to finish"
|
||||
fi
|
||||
log "Waiting for build to finish"
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
@@ -39,7 +48,7 @@ export -f waitBuild
|
||||
|
||||
checkFunctionResponse() {
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
response=$(curl http://$FISSION_ROUTER/$1)
|
||||
response=$(curl --retry 5 http://$FISSION_ROUTER/$1)
|
||||
|
||||
log "Checking for valid response"
|
||||
log $response
|
||||
@@ -54,24 +63,19 @@ waitEnvBuilder() {
|
||||
|
||||
while true; do
|
||||
kubectl -n fission-builder get pod -l envName=${env},envResourceVersion=${envRV} \
|
||||
-o jsonpath='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' | grep "Ready=True" | grep -i "$1"
|
||||
-o jsonpath='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' | grep "Ready=True" | grep -i "$env"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
export -f waitEnvBuilder
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name python || true
|
||||
fission fn delete --name $fn1 || true
|
||||
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
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -80,17 +84,14 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name python || true
|
||||
|
||||
log "Creating python env"
|
||||
fission env create --name python --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
|
||||
timeout 180s bash -c "waitEnvBuilder python"
|
||||
timeout 180s bash -c "waitEnvBuilder $env"
|
||||
# 1) Multiple source files (multiple inputs, Using * expression, from a directory)
|
||||
# Currently only * expression implemented as a test
|
||||
pushd $ROOT/examples/python/
|
||||
pkg1=$(fission package create --src "sourcepkg/*" --env python --buildcmd "./build.sh"| cut -f2 -d' '| tr -d \')
|
||||
pkg1=$(fission package create --src "sourcepkg/*" --env $env --buildcmd "./build.sh"| cut -f2 -d' '| tr -d \')
|
||||
popd
|
||||
# wait for build to finish at most 60s
|
||||
timeout 60s bash -c "waitBuild $pkg1"
|
||||
@@ -107,8 +108,8 @@ checkFunctionResponse $fn1 'a: 1 b: {c: 3, d: 4}'
|
||||
|
||||
# 2) Source archive file
|
||||
log "Creating pacakage with source archive"
|
||||
zip -jr demo-src-pkg.zip $ROOT/examples/python/sourcepkg/
|
||||
pkg2=$(fission package create --src demo-src-pkg.zip --env python --buildcmd "./build.sh"| cut -f2 -d' '| tr -d \')
|
||||
zip -jr $tmp_dir/demo-src-pkg.zip $ROOT/examples/python/sourcepkg/
|
||||
pkg2=$(fission package create --src $tmp_dir/demo-src-pkg.zip --env $env --buildcmd "./build.sh"| cut -f2 -d' '| tr -d \')
|
||||
|
||||
# wait for build to finish at most 60s
|
||||
timeout 60s bash -c "waitBuild $pkg2"
|
||||
@@ -129,7 +130,7 @@ checkFunctionResponse $fn2 'a: 1 b: {c: 3, d: 4}'
|
||||
|
||||
# 4) Deployment files from a directory
|
||||
pushd $ROOT/examples/python/
|
||||
pkg4=$(fission package create --deploy "multifile/*" --env python| cut -f2 -d' '| tr -d \')
|
||||
pkg4=$(fission package create --deploy "multifile/*" --env $env| cut -f2 -d' '| tr -d \')
|
||||
popd
|
||||
log "Creating function " $fn4
|
||||
fission fn create --name $fn4 --pkg $pkg4 --entrypoint "main.main"
|
||||
@@ -145,15 +146,15 @@ checkFunctionResponse $fn4 'Hello, world!'
|
||||
# 5) Deployment archive
|
||||
|
||||
log "Creating package with deploy archive"
|
||||
mkdir testDir
|
||||
touch testDir/__init__.py
|
||||
printf 'def main():\n return "Hello, world!"' > testDir/hello.py
|
||||
zip -jr demo-deploy-pkg.zip testDir/
|
||||
pkgName=$(fission package create --deploy demo-deploy-pkg.zip --env python| cut -f2 -d' '| tr -d \')
|
||||
mkdir $tmp_dir/deploypkg
|
||||
touch $tmp_dir/deploypkg/__init__.py
|
||||
printf 'def main():\n return "Hello, world!"' > $tmp_dir/deploypkg/hello.py
|
||||
zip -jr $tmp_dir/demo-deploy-pkg.zip $tmp_dir/deploypkg/
|
||||
pkg5=$(fission package create --deploy $tmp_dir/demo-deploy-pkg.zip --env $env| cut -f2 -d' '| tr -d \')
|
||||
|
||||
|
||||
log "Updating function " $fn5
|
||||
fission fn create --name $fn5 --pkg $pkgName --entrypoint "hello.main"
|
||||
fission fn create --name $fn5 --pkg $pkg5 --entrypoint "hello.main"
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn5 --url /$fn5 --method GET
|
||||
@@ -166,7 +167,4 @@ checkFunctionResponse $fn5 'Hello, world!'
|
||||
# 6) Deployment archive from a HTTP location
|
||||
# TBD
|
||||
|
||||
# crappy cleanup, improve this later
|
||||
kubectl get httptrigger -o name | tail -1 | cut -f2 -d'/' | xargs kubectl delete httptrigger
|
||||
|
||||
log "All done."
|
||||
|
||||
@@ -1,6 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
|
||||
# This doesn't test fission, just the test framework. It ensures we
|
||||
# have the right environment, that's all.
|
||||
|
||||
@@ -9,3 +30,4 @@ log "Test test, please ignore."
|
||||
log $FISSION_NATS_STREAMING_URL
|
||||
log $FISSION_ROUTER
|
||||
which fission
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission env delete --name python || true
|
||||
fission fn delete --name $fn || true
|
||||
rm -rf testDir-$fn || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -24,24 +30,17 @@ fi
|
||||
# This ensures that router invalidated its cache, made a request to executor to get service for function and retried
|
||||
# the request against this new address.
|
||||
|
||||
PYTHON_RUNTIME_IMAGE=gcr.io/fission-ci/python-env:test
|
||||
fn=python-func-$(date +%s)
|
||||
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name python || true
|
||||
env=python-$TEST_ID
|
||||
fn=python-func-$TEST_ID
|
||||
|
||||
log "Creating python env"
|
||||
fission env create --name python --image $PYTHON_RUNTIME_IMAGE
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Creating hello.py"
|
||||
mkdir testDir-$fn
|
||||
printf 'def main():\n return "Hello, world!"' > testDir-$fn/hello.py
|
||||
printf 'def main():\n return "Hello, world!"' > $tmp_dir/hello.py
|
||||
|
||||
log "Creating function " $fn
|
||||
fission fn create --name $fn --env python --code testDir-$fn/hello.py
|
||||
|
||||
log "rm testDir-$fn"
|
||||
rm -rf testDir-$fn
|
||||
fission fn create --name $fn --env $env --code $tmp_dir/hello.py
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function $fn --url /$fn --method GET
|
||||
@@ -69,3 +68,5 @@ if [ "$http_status" -ne "200" ]; then
|
||||
log "Something went wrong, http status after deleting function pod is $http_status"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,30 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
ROOT=$(dirname $0)/../..
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
fn=testnormal-$(date +%s)
|
||||
fn_secret=testsecret-$(date +%s)
|
||||
fn_cfgmap=testcfgmap-$(date +%s)
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$TEST_ID
|
||||
fn=testnormal-$TEST_ID
|
||||
fn_secret=testsecret-$TEST_ID
|
||||
fn_cfgmap=testcfgmap-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
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
|
||||
fission fn list | grep ${f} | awk '{print $1;}' | xargs -I@ bash -c "fission function delete --name @"
|
||||
done
|
||||
# delete routes
|
||||
for r in ${fn_secret} ${fn_cfgmap} ${fn}
|
||||
do
|
||||
fission route list | grep ${r} | awk '{print $1;}' | xargs -I@ bash -c "fission route delete --name @"
|
||||
done
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
@@ -33,11 +28,8 @@ else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
cp secret.py.template secret.py
|
||||
sed -i "s/{{ FN_SECRET }}/${fn_secret}/g" secret.py
|
||||
|
||||
cp cfgmap.py.template cfgmap.py
|
||||
sed -i "s/{{ FN_CFGMAP }}/${fn_cfgmap}/g" cfgmap.py
|
||||
sed "s/{{ FN_SECRET }}/${fn_secret}/g" $(dirname $0)/secret.py.template > $tmp_dir/secret.py
|
||||
sed "s/{{ FN_CFGMAP }}/${fn_cfgmap}/g" $(dirname $0)/cfgmap.py.template > $tmp_dir/cfgmap.py
|
||||
|
||||
checkFunctionResponse() {
|
||||
log "Doing an HTTP GET on the function's route"
|
||||
@@ -59,17 +51,14 @@ checkFunctionResponse() {
|
||||
export -f checkFunctionResponse
|
||||
|
||||
# Create a hello world function in nodejs, test it with an http trigger
|
||||
log "Pre-test cleanup"
|
||||
fission env delete --name python || true
|
||||
|
||||
log "Creating python env"
|
||||
fission env create --name python --image fission/python-env
|
||||
fission env create --name $env --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "Creating secret"
|
||||
kubectl create secret generic ${fn_secret} --from-literal=TEST_KEY="TESTVALUE" -n default
|
||||
|
||||
log "Creating function with secret"
|
||||
fission fn create --name ${fn_secret} --env python --code secret.py --secret ${fn_secret}
|
||||
fission fn create --name ${fn_secret} --env $env --code $tmp_dir/secret.py --secret ${fn_secret}
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_secret} --url /${fn_secret} --method GET
|
||||
@@ -81,7 +70,7 @@ timeout 60 bash -c "checkFunctionResponse ${fn_secret} 'TESTVALUE' 'secret'"
|
||||
|
||||
log "Creating function with newdeploy executorType and new secret value"
|
||||
kubectl patch secrets ${fn_secret} -p '{"data":{"TEST_KEY":"TkVXVkFMCg=="}}' -n default
|
||||
fission fn create --name ${fn_secret}-1 --env python --code secret.py --secret ${fn_secret} --executortype newdeploy
|
||||
fission fn create --name ${fn_secret}-1 --env $env --code $tmp_dir/secret.py --secret ${fn_secret} --executortype newdeploy
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_secret}-1 --url /${fn_secret}-1 --method GET
|
||||
@@ -95,7 +84,7 @@ log "Creating configmap"
|
||||
kubectl create configmap ${fn_cfgmap} --from-literal=TEST_KEY="TESTVALUE" -n default
|
||||
|
||||
log "creating function with configmap"
|
||||
fission fn create --name ${fn_cfgmap} --env python --code cfgmap.py --configmap ${fn_cfgmap}
|
||||
fission fn create --name ${fn_cfgmap} --env $env --code $tmp_dir/cfgmap.py --configmap ${fn_cfgmap}
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_cfgmap} --url /${fn_cfgmap} --method GET
|
||||
@@ -107,7 +96,7 @@ timeout 60 bash -c "checkFunctionResponse ${fn_cfgmap} 'TESTVALUE' 'configmap'"
|
||||
|
||||
log "Creating function with newdeploy executorType and new configmap value"
|
||||
kubectl patch configmap ${fn_cfgmap} -p '{"data":{"TEST_KEY":"NEWVAL"}}' -n default
|
||||
fission fn create --name ${fn_cfgmap}-1 --env python --code cfgmap.py --configmap ${fn_cfgmap} --executortype newdeploy
|
||||
fission fn create --name ${fn_cfgmap}-1 --env $env --code $tmp_dir/cfgmap.py --configmap ${fn_cfgmap} --executortype newdeploy
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn_cfgmap}-1 --url /${fn_cfgmap}-1 --method GET
|
||||
@@ -118,7 +107,7 @@ sleep 5
|
||||
timeout 60 bash -c "checkFunctionResponse ${fn_cfgmap}-1 'NEWVAL' 'configmap'"
|
||||
|
||||
log "testing creating a function without a secret or configmap"
|
||||
fission function create --name ${fn} --env python --code empty.py
|
||||
fission function create --name ${fn} --env $env --code $(dirname $0)/empty.py
|
||||
|
||||
log "Creating route"
|
||||
fission route create --function ${fn} --url /${fn} --method GET
|
||||
@@ -128,3 +117,5 @@ sleep 5
|
||||
|
||||
log "HTTP GET on the function's route"
|
||||
timeout 60 bash -c "checkFunctionResponse ${fn} 'yes' 'configmap'"
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,17 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
fn=spec-$(date +%N)
|
||||
env=python-$fn
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
env=python-$TEST_ID
|
||||
fn=spec-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
log "Cleaning up..."
|
||||
fission spec destroy || true
|
||||
rm -rf specs || true
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
cp $ROOT/test/tests/test_specs/hello.py $tmp_dir
|
||||
pushd $tmp_dir
|
||||
|
||||
# init
|
||||
fission spec init
|
||||
@@ -21,13 +37,13 @@ fission spec init
|
||||
[ -f specs/README ]
|
||||
[ -f specs/fission-deployment-config.yaml ]
|
||||
|
||||
fission env create --spec --name $env --image fission/python-env
|
||||
fission env create --spec --name $env --image $PYTHON_RUNTIME_IMAGE
|
||||
|
||||
log "create env spec"
|
||||
fission spec apply
|
||||
|
||||
log "verify env created"
|
||||
fission env list | grep python
|
||||
fission env list | grep $env
|
||||
|
||||
log "generate function spec"
|
||||
fission fn create --spec --name $fn --env $env --code hello.py
|
||||
@@ -40,7 +56,6 @@ grep Function specs/*.yaml
|
||||
|
||||
log "Apply specs"
|
||||
fission spec apply
|
||||
trap "fission fn delete --name $fn" EXIT
|
||||
|
||||
log "verify function exists"
|
||||
fission fn list | grep $fn
|
||||
@@ -48,4 +63,6 @@ fission fn list | grep $fn
|
||||
sleep 3
|
||||
|
||||
log "Test the function"
|
||||
fission fn test --name $fn | grep -i hello
|
||||
fission fn test --name $fn | grep -i hello
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
@@ -1,27 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
source $(dirname $0)/../../utils.sh
|
||||
|
||||
TEST_ID=$(generate_test_id)
|
||||
echo "TEST_ID = $TEST_ID"
|
||||
|
||||
tmp_dir="/tmp/test-$TEST_ID"
|
||||
mkdir -p $tmp_dir
|
||||
|
||||
ROOT=$(dirname $0)/../../..
|
||||
|
||||
fn=spec-$(date +%N)
|
||||
env=python-$fn
|
||||
env=python-$TEST_ID
|
||||
fn=spec-$TEST_ID
|
||||
|
||||
cleanup() {
|
||||
pushd $ROOT/examples/python
|
||||
fission spec destroy
|
||||
rm -rf $ROOT/examples/python/specs
|
||||
log "Cleaning up..."
|
||||
clean_resource_by_id $TEST_ID
|
||||
rm -rf $tmp_dir
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
if [ -z "${TEST_NOCLEANUP:-}" ]; then
|
||||
trap cleanup EXIT
|
||||
else
|
||||
log "TEST_NOCLEANUP is set; not cleaning up test artifacts afterwards."
|
||||
fi
|
||||
|
||||
pushd $ROOT/examples/python
|
||||
cp -r $ROOT/examples/python/multifile $tmp_dir/
|
||||
pushd $tmp_dir
|
||||
|
||||
fission spec init
|
||||
|
||||
log "Creating environment spec"
|
||||
fission env create --spec --name $env --image fission/python-env --builder fission/python-builder
|
||||
fission env list | grep python
|
||||
fission env create --spec --name $env --image $PYTHON_RUNTIME_IMAGE --builder $PYTHON_BUILDER_IMAGE
|
||||
|
||||
log "Creating function spec"
|
||||
fission fn create --spec --name $fn --env $env --deploy "multifile/*" --entrypoint main.main
|
||||
@@ -37,4 +48,6 @@ fission fn test --name $fn | grep -i hello
|
||||
|
||||
log "Destroying spec objects"
|
||||
fission spec destroy
|
||||
popd
|
||||
popd
|
||||
|
||||
log "Test PASSED"
|
||||
|
||||
Reference in New Issue
Block a user