E2E test for NATS-streaming trigger (#338)

E2E test for NATS-streaming trigger: move ad-hoc shell script into CI tests.
This commit is contained in:
Soam Vasani
2018-04-05 10:07:00 -07:00
committed by GitHub
parent 1dbf8f9243
commit f9ca626940
7 changed files with 78 additions and 54 deletions
-45
View File
@@ -1,45 +0,0 @@
#!/bin/bash
set -e
clusterID="fissionMQTrigger"
topic="foo.bar"
resptopic="foo.foo"
expectedRespOutput="[foo.foo]: 'Hello, World!'"
FISSIONDIR=$GOPATH"/src/github.com/fission/fission"
if [[ -z $NATS_STREAMING_URL ]]; then
echo "'NATS_STREAMING_URL' must not be empty. For example: export NATS_STREAMING_URL=nats://192.168.0.1:4222"
exit 1
fi
if [[ -z $FISSION_URL ]]; then
echo "'FISSION_URL' must not be empty. For example: export FISSION_URL=http://10.10.10.10"
exit 1
fi
cd $FISSIONDIR"/fission/"
go build
mv fission $FISSIONDIR"/test/mqtrigger"
cd $FISSIONDIR"/test/mqtrigger"
./fission env create --name nodejs --image fission/node-env
./fission fn create --name hello1 --env nodejs --code main.js --method GET
./fission route create --method GET --url /h1 --function hello1
./fission mqtrigger create --name h1 --function hello1 --mqtype "nats-streaming" --topic "foo.bar" --resptopic "foo.foo"
# wait until nats trigger is created
sleep 5
go run ./stan-pub.go -s $NATS_STREAMING_URL -c $clusterID -id clientPub $topic "" || exit 1
response=$(go run ./stan-sub.go --last -s $NATS_STREAMING_URL -c $clusterID -id clientSub $resptopic 2>&1)
if [[ "$response" != "$expectedRespOutput" ]]; then
echo "$response is not equal to $expectedRespOutput"
exit 1
fi
echo "Subscriber received expected response: $response"
exit 0
+15 -9
View File
@@ -161,7 +161,7 @@ helm_install_fission() {
controllerNodeport=$6
routerNodeport=$7
fluentdImage=$8
fluentdImageTag=$9
fluentdImageTag=${9}
pruneInterval="${10}"
routerServiceType=${11}
@@ -234,15 +234,12 @@ export -f helm_uninstall_fission
port_forward_services() {
id=$1
ns=f-$id
port=8888
svc=$2
port=$3
kubectl get pods -l svc="router" -o name --namespace $ns | \
kubectl get pods -l svc="$svc" -o name --namespace $ns | \
sed 's/^.*\///' | \
xargs -I{} kubectl port-forward {} $port:$port -n $ns &
export FISSION_ROUTER="127.0.0.1:"
FISSION_ROUTER+="$port"
export PATH=$ROOT/fission:$PATH
}
dump_builder_pod_logs() {
@@ -367,6 +364,8 @@ dump_logs() {
dump_fission_logs $ns $fns buildermgr
dump_fission_logs $ns $fns executor
dump_fission_logs $ns $fns storagesvc
dump_fission_logs $ns $fns mqtrigger
dump_fission_logs $ns $fns nats-streaming
dump_function_pod_logs $ns $fns
dump_builder_pod_logs $bns
dump_fission_crds
@@ -433,7 +432,7 @@ install_and_test() {
routerPort=31235
clean_tpr_crd_resources
id=$(generate_test_id)
trap "helm_uninstall_fission $id" EXIT
helm_install_fission $id $image $imageTag $fetcherImage $fetcherImageTag $controllerPort $routerPort $fluentdImage $fluentdImageTag $pruneInterval $routerServiceType
@@ -445,7 +444,14 @@ install_and_test() {
exit 1
fi
port_forward_services $id $routerPort
export PATH=$ROOT/fission:$PATH
port_forward_services $id "router" 8888
port_forward_services $id "nats-streaming" 4222
export FISSION_ROUTER="127.0.0.1:8888"
export FISSION_NATS_STREAMING_URL="http://defaultFissionAuthToken@127.0.0.1:4222"
run_all_tests $id
dump_logs $id
+61
View File
@@ -0,0 +1,61 @@
#!/bin/bash
#
# Create a function and trigger it using NATS
#
set -euo pipefail
set +x
ROOT=$(dirname $0)/../..
DIR=$(dirname $0)
clusterID="fissionMQTrigger"
topic="foo.bar"
resptopic="foo.foo"
expectedRespOutput="[foo.foo]: 'Hello, World!'"
log "Pre-test cleanup"
fission env delete --name nodejs || true
log "Creating nodejs env"
fission env create --name nodejs --image fission/node-env
trap "fission env delete --name nodejs" EXIT
log "Creating function"
fn=hello-$(date +%s)
fission fn create --name $fn --env nodejs --code $DIR/main.js --method GET
trap "fission fn delete --name $fn" EXIT
log "Creating message queue trigger"
mqt=mqt-$(date +%s)
fission mqtrigger create --name $mqt --function $fn --mqtype "nats-streaming" --topic $topic --resptopic $resptopic
trap "fission mqtrigger delete --name $mqt" EXIT
# wait until nats trigger is created
sleep 5
#
# Send a message
#
log "Sending message"
go run $DIR/stan-pub.go -s $FISSION_NATS_STREAMING_URL -c $clusterID -id clientPub $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)
if [[ "$response" != "$expectedRespOutput" ]]; then
log "$response is not equal to $expectedRespOutput"
exit 1
fi
log "Subscriber received expected response: $response"
+2
View File
@@ -6,5 +6,7 @@ set -euo pipefail
# have the right environment, that's all.
log "Test test, please ignore."
log $FISSION_NATS_STREAMING_URL
log $FISSION_ROUTER
which fission