#!/bin/bash if [ "$1" == "-v" ]; then VERBOSE='true' fi if [ "$1" == "-vv" ]; then VERBOSE='very' fi pkill go-pluginserver rq --help >/dev/null echo "pwd: $PWD" SOCKET='go_pluginserver.sock' if pgrep go-pluginserver -l; then PREVIOUS_SERVER="yes" else echo "starting server..." [ -S "$SOCKET" ] && rm "$SOCKET" ./go-pluginserver -kong-prefix . & pgrep go-pluginserver -l sleep 0.1s fi msg() { query="$1" [ -v VERBOSE ] && rq <<< "$query" [ "$VERBOSE" == "very" ] && rq <<< "$query" -M | hd METHOD="$(rq <<< "$query" -- 'at([2])')" response="$(rq <<< "$query" -M | ncat -U "$SOCKET" | rq -m | jq 'select(.[0]==1)' )" [ -v VERBOSE ] && rq <<< "$response" ERROR="$(jq <<< "$response" '.[2]')" RESULT="$(jq <<< "$response" '.[3]')" # echo $RESULT } assert_noerr() { if [ "$ERROR" != "null" ]; then echo "query: $query" echo "response: $response" echo "$METHOD : $ERROR" > /dev/stderr exit 1 fi echo "$METHOD: ok" } assert_fld_match() { fld="$1" pattern="$2" fld_v="$(query_result '.'$fld'')" if [[ "$fld_v" =~ "$pattern" ]]; then echo "==> $fld_v : ok" else echo "==> $fld_v : no match '$pattern'" exit 1 fi } query_result() { jq <<< "$RESULT" "$1" } msg '[0, 19, "plugin.SetPluginDir", ["'$PWD'"]]' assert_noerr msg '[0, 19, "plugin.GetStatus", []]' assert_noerr assert_fld_match 'Plugins' '{}' msg '[0, 19, "plugin.GetPluginInfo", ["go-hello-lm"]]' assert_noerr msg '[0, 19, "plugin.StartInstance", [{"Name":"go-hello-lm", "Config":"{\"message\":\"howdy\"}"}]]' assert_noerr helloId=$(query_result '."Id"') echo "helloId: $helloId" msg '[0, 19, "plugin.StartInstance", [{"Name":"go-log-lm", "Config":"{\"reopen\":false, \"path\":\"/some/where/else/\"}"}]]' assert_noerr logId=$(query_result '."Id"') echo "logId: $logId" msg '[0, 19, "plugin.HandleEvent", [{"InstanceId": '$helloId', "EventName": "access", "Params": [45, 23]}]]' assert_noerr helloEventId=$(query_result '."EventId"') assert_fld_match 'Data.Method' 'kong.request.get_header' assert_fld_match 'Data.Args' '"host"' msg '[0, 20, "plugin.HandleEvent", [{"InstanceId": '$logId', "EventName": "log", "Params": [45, 23]}]]' assert_noerr logEventId=$(query_result '."EventId"') assert_noerr assert_fld_match 'Data.Method' 'kong.log.serialize' # msg '[0, 19, "plugin.StepError", [{"EventId": '$helloEventId', "Data": "not in the mood for routes"}]]' #msg "$(cat <<-EOF #[ # 0, 19, "plugin.StepRoute", # [{ # "Data": { # "created_at": 1574445198, # "https_redirect_status_code": 426, # "id": "c0ba987b-99e0-4342-a255-61ff47d54fe6", # "paths": [ "/" ], # "preserve_host": false, # "protocols": [ "http", "https" ], # "regex_priority": 0, # "service": { # "id": "a1a72823-4c75-42b3-92e6-79c865175287" # }, # "strip_path": true, # "updated_at": 1574445198 # }, # "EventId": 0 # }] #] #EOF #)" #assert_noerr # #callBack=$(query_result '."Data"') # #assert_fld_match 'Data' '"ret"' msg '[0, 19, "plugin.InstanceStatus", ['$helloId']]' assert_noerr msg "[0, 19, \"plugin.CloseInstance\", [$helloId]]" assert_noerr msg '[0, 19, "plugin.InstanceStatus", ['$logId']]' assert_noerr msg "[0, 19, \"plugin.CloseInstance\", [$logId]]" assert_noerr msg '[0, 19, "plugin.GetStatus", []]' assert_noerr assert_fld_match 'Plugins["go-hello-lm"]' '"Name": "go-hello-lm"' assert_fld_match 'Plugins["go-log-lm"]' '"Name": "go-log-lm"' if [ ! -v PREVIOUS_SERVER ]; then pkill go-pluginserver rm "$SOCKET" fi