Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Example: Run test cases for a number of orders.
    • The attached example invoke_testrun.sh is for use with curl. We do not consider curl to be perfectly prepared to handle web service requests, however, it shows the building blocks.
    • The script can be parameterized to run a number of orders for a given set of workflows.
      • Code Block
        languagebash
        titleExample for use with curl to run a number of orders for a given set of workflows
        linenumberstrue
        collapsetrue
        #!/bin/bash
        
        # ----------------------------------------
        # JS7 Test Test Case Invocation
        # ----------------------------------------
        
        # Examples
        #   ./invoke_testrun.sh --url=http://joc-2-0-primary:7446 --id=testsuite --time-zone=Europe/Berlin --count=1 --workflows=/TestRuns/Test0000000070/tcpForkBalanced_001,/TestRuns/Test0000000070/tcpForkNestedLevel1_001
        #   ./invoke_testrun.sh --url=https://joc-2-0-primary:7443 --cacert=./certs/root-ca.crt --account=root --password=root --id=testsuite --time-zone=Europe/Berlin --workflows=/TestRuns/Test0000000070/tcpForkBalanced_001,/TestRuns/Test0000000070/tcpForkNestedLevel1_001 --batch-size=10 --count=1
        
        # Protocol, host and port of JOC Cockpit
        JS7_URL="http://localhost:4446"
        
        # CA certificate for TLS/SSL connection
        JS7_CACERT=""
        
        # Account and password if no client authentication certificate is used
        JS7_ACCOUNT="root"
        JS7_PASSWORD="root"
        
        # Identification of JS7 Controller
        JS7_CONTROLLER_ID=""
        
        # Number of test runs, number of orders per batch in a test run, test case directory and workflow paths
        JS7_TEST_COUNT=1
        JS7_TEST_BATCH_SIZE=100
        JS7_TEST_CASE_WORKFLOWS=()
        
        JS7_TEST_CASE_SCHEDULED_FOR="now"
        JS7_TEST_CASE_TIME_ZONE="Etc/UTC"
        
        JS7_VERBOSE=0
        
        # ----------------------------------------
        for option in "$@"
        do
          case "$option" in
                 -v)                 JS7_VERBOSE=1
                                     ;;
                 --url=*)            JS7_URL=`echo "$option" | sed 's/--url=//'`
                                     ;;
                 --cacert=*)         JS7_CACERT=`echo "$option" | sed 's/--cacert=//'`
                                     ;;
                 --account=*)        JS7_ACCOUNT=`echo "$option" | sed 's/--account=//'`
                                     ;;
                 --password=*)       JS7_PASSWORD=`echo "$option" | sed 's/--password=//'`
                                     ;;
                 --id=*)             JS7_CONTROLLER_ID=`echo "$option" | sed 's/--id=//'`
                                     ;;
                 --count=*)          JS7_TEST_COUNT=`echo "$option" | sed 's/--count=//'`
                                     ;;
                 --batch-size=*)     JS7_TEST_BATCH_SIZE=`echo "$option" | sed 's/--batch-size=//'`
                                     ;;
                 --workflows=*)      JS7_TEST_CASE_WORKFLOWS=(`echo "$option" | sed 's/--workflows=//' | sed -r 's/[,]+/ /g'`)
                                     ;;
                 --scheduled-for=*)  JS7_TEST_CASE_SCHEDULED_FOR=`echo "$option" | sed 's/--scheduled-for=//'`
                                     ;;
                 --time-zone=*)      JS7_TEST_CASE_TIME_ZONE=`echo "$option" | sed 's/--time-zone=//'`
                                     ;;
                 *)                  echo "unknown argument: $option"
                                     exit 1
                                     ;;
          esac
        done
        
        # -----------------------------------------
        JS7_Login()
        {
            echo -e "\n"
            echo "PERFORMING LOGIN"
        
            # Base64 encoded string "user:password" for authentication. The below string represents "root:root"
            js7_basic_authentication="`echo "$JS7_ACCOUNT:$JS7_PASSWORD" | base64`"
            js7_basic_authentication="${js7_basic_authentication:0:${#js7_basic_authentication}-4}"
        
            js7_curl_options=(-k -s -S -X POST -i -m 15)
            if [ "$JS7_CACERT" != "" ]
            then
                js7_curl_options+=(--cacert $JS7_CACERT)
            fi
        
            if [ $JS7_VERBOSE -ne 0 ]
            then
                echo "curl ${js7_curl_options[@]} -H \"Authorization: Basic $js7_basic_authentication\" -H \"Accept: application/json\" -H \"Content-Type: application/json\" $JS7_URL/joc/api/authentication/login"
            fi
        
            js7_json="`curl ${js7_curl_options[@]} -H "Authorization: Basic $js7_basic_authentication" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/authentication/login`"
            rc=$?
        
            if [ $rc -eq 0 ]
            then
                js7_access_token=$(echo $js7_json | grep -Po '"accessToken":.*?[^\\]"' | awk -F ':' '{print $2}' | tr -d \" )
                if [ $JS7_VERBOSE -ne 0 ]
                then
                    echo -e "Response:\n$js7_json"
                fi
            else
                echo "ERROR OCCURRED: $rc"
                echo $js7_json
                exit $rc
            fi
        
            js7_access_token=$(echo $js7_json | grep -Po '"accessToken":.*?[^\\]"' | awk -F ':' '{print $2}' | tr -d \" )
        }
        
        # -----------------------------------------
        JS7_Logout()
        {
            rc=$?
            echo -e "\n"
        
            if [ "$js7_access_token" != "" ]
            then
                echo "PERFORMING LOGOUT"
                js7_curl_options=(-k -s -S -X POST -i -m 15)
                if [ "$JS7_CACERT" != "" ]
                then
                    js7_curl_otions+=(--cacert $JS7_CACERT)
                fi
        
                js7_json="`curl ${js7_curl_options[@]} -H "X-Access-Token: $js7_access_token" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/authentication/logout`"
                exit_code=$?
        
                if [ $exit_code -eq 0 ]
                then
                    js7_access_token=""
                    if [ $JS7_VERBOSE -ne 0 ]
                    then
                        echo -e "Response:\n$js7_json"
                    fi
                else
                    echo "ERROR OCCURRED: $exit_code"
                    echo $js7_json
                fi
                echo -e "\n"
            fi
        
            exit $rc
        }
        
        # -----------------------------------------
        JS7_AddOrder()
        {
            echo -e "\n"
            js7_order_count=0
        
            for i in $(seq 1 $JS7_TEST_COUNT)
            do
                for workflow in ${JS7_TEST_CASE_WORKFLOWS[@]}
                do
                    echo "ADDING ORDERS TO WORKFLOW: count=$i batch-size=$JS7_TEST_BATCH_SIZE workflow=$workflow"
                    js7_rest_body="{ \"controllerId\": \"$JS7_CONTROLLER_ID\", \"orders\": [ "
        
                    for j in $(seq 1 $JS7_TEST_BATCH_SIZE)
                    do
                        js7_order_count=$((js7_order_count+1))
                        js7_rest_body="$js7_rest_body { \"workflowPath\":\"$workflow\", \"orderName\":\"$RANDOM\", \"scheduledFor\":\"$JS7_TEST_CASE_SCHEDULED_FOR\", \"timeZone\":\"$JS7_TEST_CASE_TIME_ZONE\" } "
                        if [ $j -lt $JS7_TEST_BATCH_SIZE ]
                        then
                            js7_rest_body="$js7_rest_body,"
                        fi
                    done
        
                    js7_rest_body="$js7_rest_body ] }"
        
                    if [ $JS7_VERBOSE -ne 0 ]
                    then
                        echo "Request Body:\n$js7_rest_body"
                    fi
        
                    # Execute web service request
                    js7_curl_options=(-k -s -S -X POST -i -m 15)
                    if [ "$JS7_CACERT" != "" ]
                    then
                        js7_curl_options+=(--cacert $JS7_CACERT)
                    fi
        
                    js7_json="`curl ${js7_curl_options[@]} -d "$js7_rest_body" -H "X-Access-Token: $js7_access_token" -H "Accept: application/json" -H "Content-Type: application/json" $JS7_URL/joc/api/orders/add`"
                    rc=$?
        
                    if [ $rc -eq 0 ]
                    then
                        if [ $JS7_VERBOSE -ne 0 ]
                        then
                            echo -e "Response:\n$js7_json"
                        fi
                    else
                        echo "ERROR OCCURRED: exit code $rc"
                        echo -e "Response:\n$js7_json"
                        exit $rc
                    fi
        
                    echo -e "orders added: $js7_order_count"
                done
            done
        }
        
        # -----------------------------------------
        
        trap 'JS7_Logout EXIT' EXIT
        trap 'JS7_Logout SIGTERM' SIGTERM
        trap 'JS7_Logout SIGINT' SIGINT
        
        JS7_Login
        JS7_AddOrder
        JS7_Logout
        
        # -----------------------------------------
  • Find a more elaborate example from the JS7 - How to update a Job Resource using the REST Web Service API from the Shell article.