From 0c7029f968dff18a16180dbeba30a964982f0a9f Mon Sep 17 00:00:00 2001 From: daniceexi Date: Thu, 24 Apr 2014 04:37:18 -0400 Subject: [PATCH] The script is used to run rest api test. --- xCAT-server/xCAT-wsapi/xcatws-test.sh | 197 ++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100755 xCAT-server/xCAT-wsapi/xcatws-test.sh diff --git a/xCAT-server/xCAT-wsapi/xcatws-test.sh b/xCAT-server/xCAT-wsapi/xcatws-test.sh new file mode 100755 index 000000000..cbf8ebb4f --- /dev/null +++ b/xCAT-server/xCAT-wsapi/xcatws-test.sh @@ -0,0 +1,197 @@ +#! /bin/sh + + +# Get all the parameters +for i in $@ +do + if [ "$paramname" = "USER" ]; then + USER=$i + paramname= + fi + if [ "$paramname" = "PW" ]; then + PW=$i + paramname= + fi + if [ "$paramname" = "HOST" ]; then + HOST=$i + paramname= + fi + + if [ $i = '-u' ]; then + paramname=USER + fi + if [ $i = '-p' ]; then + paramname=PW + fi + if [ $i = '-h' ]; then + paramname=HOST + fi + if [ $i = '-c' ]; then + cert=yes + fi + if [ $i = '-t' ]; then + token=yes + fi + +done + +# display the usage message +function usage { + echo "Usage:" + echo " xcatws-test.sh -u -p [-t]" + echo " xcatws-test.sh -u -p -h [-c] [-t]" + echo " -u The username of xCAT user which is used to access xCAT resource" + echo " -p The password of username" + echo " The fully qualified hostname of xCAT management node. It can be an IP if using -k." + echo " -c Check the server identity. The server certificate authentication must be enabled." + echo " -t Using token authentication method." +} + +if [ "$USER" = "" ] || [ "$PW" = "" ]; then + echo "Error: Miss username or password" + usage + exit 1 +fi + +if [ "$cert" = "yes" ] && [ "$HOST" = "" ]; then + echo "Error: -c must be used with -h that user needs specify the FQDN of xCAT MN" + usage + exit 1 +fi + +if [ "$HOST" = "" ]; then + HOST="127.0.0.1" +fi + + +ctype='-H Content-Type:application/json' + +# Perform the REST API request +function REST { + METHOD=$1 # it should be GET/PUT/POST/DELETE + SRC=$2 # The resource path like /nodes/node1 + DATA=$3 # The operation data for PUT/POST/DELETE + if [ "$DATA" != "" ]; then + datamsg="$ctype -d $DATA" + fi + if [ "$cert" = "yes" ]; then + if [ "$token" = "yes" ]; then + CMD="curl -X $METHOD --cacert /tmp/ca-cert.pem -H X-Auth-Token:$TOKENID $datamsg https://$HOST/xcatws$SRC?pretty=1" + else + CMD="curl -X $METHOD --cacert /tmp/ca-cert.pem $datamsg https://$HOST/xcatws$SRC?pretty=1&userName=$USER&password=$PW" + fi + else + if [ "$token" = "yes" ]; then + CMD="curl -X $METHOD -k -H X-Auth-Token:$TOKENID $datamsg https://$HOST/xcatws$SRC?pretty=1" + else + CMD="curl -X $METHOD -k $datamsg https://$HOST/xcatws$SRC?pretty=1&userName=$USER&password=$PW" + fi + fi + + echo "-------------------------------------------------------------------------------" + echo "Run: [$RESTMSG]" + echo " $CMD" + echo "Output:" + `$CMD 2>/dev/null >/tmp/xcatws-test.log` + cat "/tmp/xcatws-test.log" + echo "" + + ERROR=`grep "errorcode" "/tmp/xcatws-test.log"` + if [ "$ERROR" != "" ]; then + echo "FAILED to continue. See the error message in 'error' section." + echo "" + exit 2 + fi +} + +function PUT { + SRC=$1 +} + +# echo debug message +echo "***********************************************************" +echo "** Username: $USER" +echo "** Password: $PW" +echo "** Hostname: $HOST" + + +# get the CA of server certificate +if [ "$cert" = "yes" ]; then + rm -f /tmp/ca-cert.pem + cd /tmp + wget http://$HOST/install/postscripts/ca/ca-cert.pem 2>1 1>/dev/null + echo "** Using CA /tmp/ca-cert.pem for server certificate checking" +fi + +# get a token +if [ "$token" = "yes" ]; then + TOKENID=$(curl -X POST -k "https://$HOST/xcatws/tokens?pretty=1" -H Content-Type:application/json --data "{\"userName\":\"$USER\",\"password\":\"$PW\"}" 2>/dev/null | grep '"id"' | awk -F: {'print $2'} | awk -F \" {'print $2'}) + echo "** Using Token: $TOKENID to authenticate" +fi + +echo "***********************************************************" +echo "" + +# clean the env +rmdef -t node restapinode[1-9] 1>/dev/null 2>1 +rmdef -t group restapi 1>/dev/null 2>1 + +# get all resources +RESTMSG="Get all available resource" +REST GET "/" + +# test global conf +RESTMSG="Get all global configuration resource" +REST GET "/globalconf" + +RESTMSG="Change the global configuration domain to cluster.com" +REST PUT "/globalconf/attrs/domain" '{"domain":"cluster.com"}' + +RESTMSG="Get the global configuration domain" +REST GET "/globalconf/attrs/domain" + +# test node create/change/list/delete +RESTMSG="Create node restapinode1" +REST POST "/nodes/restapinode1" '{"groups":"restapi","arch":"x86_64","mgt":"ipmi","netboot":"xnba"}' + +RESTMSG="Display the node restapinode1" +REST GET "/nodes/restapinode1" + +RESTMSG="Change the attributes for node restapinode1" +REST PUT "/nodes/restapinode1" '{"mgt":"fsp","netboot":"yaboot"}' + +RESTMSG="Display the node restapinode1" +REST GET "/nodes/restapinode1" + +RESTMSG="Delete node restapinode1" +REST DELETE "/nodes/restapinode1" + +# test multiple nodes manipulation +RESTMSG="Create node restapinode1 and restapinode2" +REST POST "/nodes/restapinode1,restapinode2" '{"groups":"restapi","arch":"x86_64","mgt":"ipmi","netboot":"xnba"}' + +RESTMSG="Display the node restapinode1 and restapinode2" +REST GET "/nodes/restapinode1,restapinode2" + +RESTMSG="Change the attributes for node restapinode1 and restapinode2" +REST PUT "/nodes/restapinode1,restapinode2" '{"mgt":"hmc","netboot":"grub2"}' + +RESTMSG="Display the node restapinode1 and restapinode2" +REST GET "/nodes/restapinode1,restapinode2" + +RESTMSG="Display all the nodes in the cluster" +REST GET "/nodes" + +# test group +RESTMSG="Display the group restapi" +REST GET "/groups/restapi" + +RESTMSG="Change attributes for group restapi" +REST PUT "/groups/restapi" '{"os":"rh7"}' + +RESTMSG="Display the group restapi" +REST GET "/groups/restapi" + +RESTMSG="Display the nodes in group restapi" +REST GET "/nodes/restapi" +