Recorder CRD, Records API, Redis deployment (#818)
This commit is contained in:
committed by
Ta-Ching Chen
parent
07ca5df8d0
commit
74a3a54543
@@ -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"
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
Executable
+95
@@ -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
@@ -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
|
||||
Reference in New Issue
Block a user