Recorder CRD, Records API, Redis deployment (#818)

This commit is contained in:
Nafisa Shazia
2018-08-15 05:28:40 +08:00
committed by Ta-Ching Chen
parent 07ca5df8d0
commit 74a3a54543
38 changed files with 2770 additions and 123 deletions
-61
View File
@@ -1,61 +0,0 @@
#!/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"
+9
View File
@@ -0,0 +1,9 @@
from flask import request
def main():
content = request.get_json(force=True)
title = content['title']
name = content['name']
item = content['item']
g = "Greetings, {} {}. May I take your {}?\n".format(title, name, item)
return g
+7
View File
@@ -0,0 +1,7 @@
from flask import request
def main():
time = request.args.get('time')
date = request.args.get('date')
r = "We'll meet at {} on {}.\n".format(time, date)
return r
+55
View File
@@ -0,0 +1,55 @@
#!/bin/bash
#
# Simple end-to-end test of record with POST
# Two recorders tested: by function, by trigger (TODO)
#
set -euo pipefail
set +x
ROOT=$(dirname $0)/../..
DIR=$(dirname $0)
echo "Pre-test cleanup"
fission env delete --name python || true
echo "Creating python env"
fission env create --name python --image fission/python-env
# trap "fission env delete --name python" EXIT
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
echo "Creating http trigger"
generated=$(fission route create --function $fn --method POST --url greetings | 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\"}")
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
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
exit 1
fi
echo "Passed."
exit 0
+95
View File
@@ -0,0 +1,95 @@
#!/bin/bash
#
# Simple end-to-end test of record with GET
# 0) Setup: Two triggers created for a function (different urls, urlA and urlB)
# 1) One recorder created for that function, two cURL requests made to both urls, check both are recorded
# 2) One recorder created for a particular trigger (urlB), both requests repeated, check only the one for urlB was recorded
#
set -euo pipefail
set +x
ROOT=$(dirname $0)/../..
DIR=$(dirname $0)
expectedR="We'll meet at 9 on Tuesday."
echo "Pre-test cleanup"
fission env delete --name python || true
echo "Creating python env"
fission env create --name python --image fission/python-env
echo "Creating function"
fn=rv-$(date +%s)
fission fn create --name $fn --env python --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 "'")
echo "Creating trigger B"
generatedB=$(fission route create --function $fn --method GET --url rvB | awk '{print $2}'| tr -d "'")
# 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
# 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}')"
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}')"
expectedSB="200OK"
if [ "$respA" != "$expectedR" ] || [ "$recordedStatusA" != "$expectedSA" ] || [ "$recordedStatusB" != "$expectedSB" ]; then
echo "Failed at test case 1."
exit 1
fi
echo "Test case 1) Passed."
# Delete first recorder
fission recorder delete --name $recName
sleep 5
echo "Creating recorder by trigger"
recName2="regulus2"
fission recorder create --name $recName2 --trigger $generatedB
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}')"
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}')"
expectedSB="200OK"
if [ "$respA" != "$expectedR" ] || [ "$recordedStatusA" != "$expectedSA" ] || [ "$recordedStatusB" != "$expectedSB" ]; then
echo "Failed at test case 2."
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
+100
View File
@@ -0,0 +1,100 @@
#!/bin/bash
#
# Simple test of recorder updates
# 0) Setup: One recorder created for function with trigger
# 1) Recorder disabled, cURL request made, check not saved.
# 2) Recorder re-enabled, request repeated, check now saved.
# 3) New trigger created for same function recorded w/ different url, recorder updated to observe requests for this trigger
# Request repeated at new url, check saved.
#
set -euo pipefail
set +x
ROOT=$(dirname $0)/../..
DIR=$(dirname $0)
echo "Pre-test cleanup"
fission env delete --name python || true
echo "Creating python env"
fission env create --name python --image fission/python-env
echo "Creating function"
fn=rv-$(date +%s)
fission fn create --name $fn --env python --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 "'")
# Wait until trigger is created
sleep 5
echo "Creating recorder"
recName="regulus"
fission recorder create --name $recName --function $fn
fission recorder get --name $recName
# Wait until recorder is created
sleep 5
# Disable recorder
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}')"
expectedR="We'll meet at 9 on Tuesday."
expectedS=""
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
exit 1
fi
echo "Test case 1) Passed."
# Reenable recorder
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")
expectedR="We'll meet at 9 on Tuesday."
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
expectedS="200OK"
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
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 "'")
echo "New trigger: $generated2"
# Update recorder to observe new trigger
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")
expectedR="We'll meet at 9 on Tuesday."
recordedStatus="$(fission records view --from 15s --to 0s -v | awk 'FNR == 2 {print $4$5}')"
expectedS="200OK"
if [ "$resp" != "$expectedR" ] || [ "$recordedStatus" != "$expectedS" ]; then
echo "Response is not equal to expected response."
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