[dredd] more error handling (#8978)
author윤현식/On-Device Lab(SR)/Principal Engineer/삼성전자 <hyunsik.yoon@samsung.com>
Tue, 19 Nov 2019 04:56:02 +0000 (13:56 +0900)
committer박세희/On-Device Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Tue, 19 Nov 2019 04:56:02 +0000 (13:56 +0900)
* [dredd] more error handling

This adds two error handling: 1) error log into $ERROR_LOG file 2) catching error in pipe

Signed-off-by: Hyun Sik Yoon <hyunsik.yoon@samsung.com>
* fixing wrong rule

* another fix for rule file.

compiler/dredd-rule-lib/rule-lib.sh

index 44a84d0..a16ffa9 100755 (executable)
@@ -4,27 +4,34 @@
 #   COMPILED_FILE
 #   INSPECT_PROG_PATH
 #   VERIFY_PROG_PATH
+#   ERROR_LOG
 
 # exit if unknown var is used
 set -u
 
-ERROR_FLAG="Error"
-
 # ---------------
 # HELPER FUNCTION
 
+init_error_log()
+{
+  # create ${ERROR_LOG} that redirect stderr for pipe
+  exec 2>"${ERROR_LOG}"
+}
+
 argc_check()
 {
   ACTUAL_ARGC=$1
   EXPECTED_ARGC=$2
 
   if [ "$#" -ne 2 ];then
-    echo "${ERROR_FLAG} - argc_check : param count must be 2"
+    echo "argc_check : param count must be 2" > ${ERROR_LOG}
+    echo "error"  # return value of sub-shell
     exit 1
   fi
 
   if [ ${ACTUAL_ARGC} -ne ${EXPECTED_ARGC} ];then
-    echo "${ERROR_FLAG} - arg count mismatch: actual = ${ACTUAL_ARGC} vs expected = ${EXPECTED_ARGC}"
+    echo "arg count mismatch: actual = ${ACTUAL_ARGC} vs expected = ${EXPECTED_ARGC}" > ${ERROR_LOG}
+    echo "error"  # return value of sub-shell
     exit 1
   fi
 }
@@ -34,7 +41,8 @@ file_path_check()
   argc_check $# 1
 
   if [ ! -f $1 ]; then
-    echo "${ERROR_FLAG} - $1 does not exist"
+    echo "$1 does not exist" > ${ERROR_LOG}
+    echo "error"  # return value of sub-shell
     exit 1
   fi
 }
@@ -50,8 +58,6 @@ file_path_check()
 #   - Return
 #     - 0 : success
 #     - 1 : fail (condition check fail)
-#     - 10 : error while getting actual value
-#     - 11 : error while running expected value
 #
 
 RULE()
@@ -66,19 +72,6 @@ RULE()
   # not to exit when expr result with 0
   set +e
 
-  # check if ACTUAL or EXPECTED has "ERROR" string
-  expr match "${ACTUAL}" ${ERROR_FLAG} > /dev/null
-  if [ $? = 0 ]; then
-    echo "** Error in ACTUAL"
-    return 10
-  fi
-
-  expr match "${EXPECTED}" ${ERROR_FLAG} > /dev/null
-  if [ $? = 0 ]; then
-    echo "** Error in EXPECTED"
-    return 11
-  fi
-
   expr ${ACTUAL} ${COND} ${EXPECTED} > /dev/null
   RESULT=$?
 
@@ -113,7 +106,16 @@ file_size()
 {
   file_path_check ${COMPILED_FILE}
 
-  echo `cat ${COMPILED_FILE} | wc -c`
+  set -o pipefail
+
+  ACTUAL=`init_error_log ; cat ${COMPILED_FILE} | wc -c`
+
+  if [ $? -ne 0 ];then
+    echo "error"
+    exit 1
+  fi
+
+  echo ${ACTUAL}
 }
 
 all_op_count()
@@ -121,7 +123,16 @@ all_op_count()
   file_path_check ${COMPILED_FILE}
   file_path_check ${INSPECT_PROG_PATH}
 
-  echo `${INSPECT_PROG_PATH} --operators ${COMPILED_FILE} | wc -l`
+  set -o pipefail
+
+  ACTUAL=`init_error_log ; ${INSPECT_PROG_PATH} --operators ${COMPILED_FILE} | wc -l`
+
+  if [ $? -ne 0 ];then
+    echo "error"
+    exit 1
+  fi
+
+  echo ${ACTUAL}
 }
 
 op_count()
@@ -130,7 +141,16 @@ op_count()
   file_path_check ${COMPILED_FILE}
   file_path_check ${INSPECT_PROG_PATH}
 
-  echo `${INSPECT_PROG_PATH} --operators ${COMPILED_FILE} | grep -w "$1" | wc -l`
+  set -o pipefail
+
+  ACTUAL=`init_error_log ; ${INSPECT_PROG_PATH} --operators ${COMPILED_FILE} | grep -w "$1" | wc -l`
+
+  if [ $? -ne 0 ];then
+    echo "error"
+    exit 1
+  fi
+
+  echo ${ACTUAL}
 }
 
 conv2d_weight_not_constant()
@@ -138,7 +158,18 @@ conv2d_weight_not_constant()
   file_path_check ${COMPILED_FILE}
   file_path_check ${INSPECT_PROG_PATH}
 
-  echo `${INSPECT_PROG_PATH} --conv2d_weight ${COMPILED_FILE} | awk -F, '{ if ($2 != "CONST") print $0}' | wc -l`
+  set -o pipefail
+
+  ACTUAL=`init_error_log ; \
+          ${INSPECT_PROG_PATH} --conv2d_weight ${COMPILED_FILE} | \
+          awk -F, '{ if ($2 != "CONST") print $0}' | wc -l`
+
+  if [ $? -ne 0 ];then
+    echo "error"
+    exit 1
+  fi
+
+  echo ${ACTUAL}
 }
 
 verify_file_format()
@@ -146,7 +177,16 @@ verify_file_format()
   file_path_check ${COMPILED_FILE}
   file_path_check ${VERIFY_PROG_PATH}
 
-  echo `${VERIFY_PROG_PATH} ${COMPILED_FILE} | grep "PASS" | wc -l`
+  set -o pipefail
+
+  ACTUAL=`init_error_log ; ${VERIFY_PROG_PATH} ${COMPILED_FILE} | grep "PASS" | wc -l`
+
+  if [ $? -ne 0 ];then
+    echo "error"
+    exit 1
+  fi
+
+  echo ${ACTUAL}
 }
 
 # TODO define more qullity test function