automated: linux: kselftest: Adding SKIPLIST and SKIPFILE parameters

Known unsupported test cases list can be provided by using,
SKIPLIST or SKIPFILE parameters which will be skipped from the run.

Change-Id: I844dd6a9cded5a18bd1a21bc63320f4a3a3e7d83
Signed-off-by: Naresh Kamboju <naresh.kamboju@linaro.org>
diff --git a/automated/linux/kselftest/kselftest-skipfile b/automated/linux/kselftest/kselftest-skipfile
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/automated/linux/kselftest/kselftest-skipfile
diff --git a/automated/linux/kselftest/kselftest.sh b/automated/linux/kselftest/kselftest.sh
index 3369c46..d0c2596 100755
--- a/automated/linux/kselftest/kselftest.sh
+++ b/automated/linux/kselftest/kselftest.sh
@@ -8,20 +8,44 @@
 LOGFILE="${OUTPUT}/kselftest.txt"
 TESTPROG="kselftest_armhf.tar.gz"
 KSELFTEST_PATH="/usr/bin/kselftests"
+
+SCRIPT="$(readlink -f "${0}")"
+SCRIPTPATH="$(dirname "${SCRIPT}")"
+# List of known unsupported test cases to be skipped
+SKIPFILE=""
+SKIPLIST=""
+
 if [ "$(uname -m)" = "aarch64" ]
 then
     TESTPROG="kselftest_aarch64.tar.gz"
 fi
 
 usage() {
-    echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz] [-s true|false]" 1>&2
+    echo "Usage: $0 [-t kselftest_aarch64.tar.gz | kselftest_armhf.tar.gz]
+                    [-s True|False]
+                    [-L List of skip test cases]
+                    [-S kselftest-skipfile]" 1>&2
     exit 1
 }
 
-while getopts "t:s:h" opt; do
+while getopts "t:s:L:S:h" opt; do
     case "${opt}" in
         t) TESTPROG="${OPTARG}" ;;
         s) SKIP_INSTALL="${OPTARG}" ;;
+        # List of known unsupported test cases to be skipped
+        L) SKIPLIST="${OPTARG}" ;;
+        S)
+           OPT=$(echo "${OPTARG}" | grep "http")
+           if [ -z "${OPT}" ] ; then
+           # kselftest skipfile
+             SKIPFILE="${SCRIPTPATH}/${OPTARG}"
+           else
+           # Download kselftest skipfile from speficied URL
+             wget "${OPTARG}" -O "skipfile"
+             SKIPFILE="skipfile"
+             SKIPFILE="${SCRIPTPATH}/${SKIPFILE}"
+           fi
+           ;;
         h|*) usage ;;
     esac
 done
@@ -63,6 +87,22 @@
     cd "kselftest"
 fi
 
+if [ -n "${SKIPLIST}" ]; then
+    # shellcheck disable=SC2086
+    for test_name in ${SKIPLIST}; do
+        # shellcheck disable=SC2086
+        sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
+    done
+fi
+
+# Ignore SKIPFILE when SKIPLIST provided
+if [ -f "${SKIPFILE}" ] &&  [ -z "${SKIPLIST}" ]; then
+    while read -r test_name; do
+        # shellcheck disable=SC2086
+        sed -i "/.\/${test_name}/c\echo \"selftests: ${test_name} [SKIP]\"" run_kselftest.sh
+    done < "${SKIPFILE}"
+fi
+
 # run_kselftest.sh file generated by kselftest Makefile and included in tarball
 ./run_kselftest.sh 2>&1 | tee "${LOGFILE}"
 parse_output
diff --git a/automated/linux/kselftest/kselftest.yaml b/automated/linux/kselftest/kselftest.yaml
index c5465c8..ba81bbd 100644
--- a/automated/linux/kselftest/kselftest.yaml
+++ b/automated/linux/kselftest/kselftest.yaml
@@ -20,11 +20,17 @@
     # TESTPROG: kselftest_aarch64.tar.gz
     TESTPROG: kselftest_armhf.tar.gz
     SKIP_INSTALL: "false"
+    # List of known unsupported test cases to be skipped
+    SKIPLIST: ""
+    # SKIPFILE can be a filename from dir ./automated/linux/kselftest/ or an open URL
+    # SKIPFILE: "kselftest-skipfile"
+    SKIPFILE: ""
+
 
 run:
     steps:
         - cd ./automated/linux/kselftest/
-        - ./kselftest.sh -t "${TESTPROG}" -s "${SKIP_INSTALL}"
+        - ./kselftest.sh -t "${TESTPROG}" -s "${SKIP_INSTALL}" -L "${SKIPLIST}" -S "${SKIPFILE}"
 
 parse:
     pattern: "^selftests:\\s(?P<test_case_id>\\S+)\\s[[](?P<result>(FAIL|PASS|SKIP))[]]"