Completed test case automation (shell scripting resources). Pending new features...
authorEduardo Ramos Testillano <eduardo.ramos.testillano@gmail.com>
Sun, 15 Mar 2015 23:09:09 +0000 (00:09 +0100)
committerEduardo Ramos Testillano <eduardo.ramos.testillano@gmail.com>
Sun, 15 Mar 2015 23:09:09 +0000 (00:09 +0100)
example/diameter/launcher/resources/ft-client/tests/case_1.sh
example/diameter/launcher/resources/ft-client/tests/common.sh

index 7eca089..b353c63 100755 (executable)
@@ -1,9 +1,15 @@
 #!/bin/bash
 
+# In this test we will send a incorrect message (AAR) to the server peer:
+#       Warning | source/diameter/codec/Message.cpp (387) | Internal Avp decoding error (avp code = 443): Avp format error, the avp length is incorrect (must be multiple of 4 on grouped type)
+#
+# The server shall answer with the FailedAVP and we will check this to validate the test.
+
 #############
 # VARIABLES #
 #############
-
+# Paths from the point of view of ADL executable:
+REQ1_HEX=./hex_examples/aar-bad.hex
 
 #############
 # FUNCTIONS #
@@ -20,5 +26,22 @@ cd `dirname $0`
 # Source utils:
 source common.sh
 
-# xxxx
-echo "testing ..."
+# Clean traffic traces:
+rm ../launcher.log*
+
+# Send incorrect AAR:
+send_hex $REQ1_HEX &
+
+# Monitor activity:
+monitor_4_message ../launcher.log.recvfe 10
+
+# Check if message was received:
+[ $? -ne 0 ] && test_failed "Missing answer from the server"
+
+# Check launcher.log.recvfe:
+check_pattern "<avp name=\"Result-Code\" data=\"5004\" alias=\"DIAMETER_INVALID_AVP_VALUE\"/>" ../launcher.log.recvfe
+check_pattern "<avp name=\"Failed-AVP\">( *)<avp name=\"Subscription-Id\"" ../launcher.log.recvfe
+
+# Test OK
+test_ok "Received answer to bad-aar message indicating Failed-AVP as Subscription-Id"
+
index 839bf85..fb60a33 100755 (executable)
@@ -5,7 +5,6 @@
 #############
 tmpdir=$(mktemp -d)
 
-
 #############
 # FUNCTIONS #
 #############
@@ -22,9 +21,75 @@ sigint_handler() {
   _exit "Script interrupted. Cleanup & exit ..."
 }
 
+# $1: hex formatted file to send to the server
+send_xml () {
+  ../operation.sh "sendxml|$1"
+}
+
+send_hex () {
+  sleep 1
+  ../operation.sh "sendxml|$1"
+}
+
+# $1: pattern; $2: file
+check_pattern () {
+  echo "Matching pattern '$1' ..." 
+  cat $2 | tr '\n' ' ' | egrep "$1" >/dev/null
+  res=${PIPESTATUS[2]}
+  [ $? -ne 0 ] && _exit "Test failed: miss pattern !!"
+}
+
+test_ok () {
+  echo
+  echo $1
+  echo "Test OK !"
+  echo
+  exit 0
+}
+
+test_failed () {
+  echo
+  echo $1
+  echo "Test FAILED !"
+  echo
+  exit 1
+}
+
+
+# $1: traffic log to monitor
+# $2: timeout (request expiration) in seconds
+# Result: cats the message when completed
+monitor_4_message () {
+  0>$1
+  rm -f .msg_received
+
+  [ -z "$2" ] && _exit "ERROR: must provide '$FUNCNAME' timeout (second argument)"
+  sleep $2 &
+  local timerPid=$!
+
+  # Monitor for incoming message:
+  tail -n0 -F --pid=$timerPid $1 | while read line 
+  do
+    if echo $line | grep "^</message>" >/dev/null; then
+      echo "Message received"
+      # stop the timer
+      kill -13 $timerPid
+      touch .msg_received
+    fi
+  done
+
+  if [ ! -f .msg_received ]; then
+    echo "Timeout expired"
+    return 1
+  fi
+
+  return 0
+}
+
 #############
 # EXECUTION #
 #############
 
 # Trap sigint signal:
 trap sigint_handler SIGINT
+