From e45cfb9e8f9a1d4ef7c3c296c3af0b264ed440d5 Mon Sep 17 00:00:00 2001 From: Jack Davison Date: Tue, 30 Mar 2021 14:02:15 +0100 Subject: [PATCH] arm: Enable ptest for optee xtest Provides a run-ptest script for running xtest under ptest-runner. This script parses the output of xtest and converts it to Automake's test format. Change-Id: I7c981422034b39701ddd74e176f2f5134ae607e6 Signed-off-by: Jack Davison Signed-off-by: Jon Mason --- .../recipes-security/optee/optee-test.inc | 3 +- .../optee/optee-test/run-ptest | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100755 meta-arm/recipes-security/optee/optee-test/run-ptest diff --git a/meta-arm/recipes-security/optee/optee-test.inc b/meta-arm/recipes-security/optee/optee-test.inc index 969d5e23..877bdeb0 100644 --- a/meta-arm/recipes-security/optee/optee-test.inc +++ b/meta-arm/recipes-security/optee/optee-test.inc @@ -5,7 +5,7 @@ HOMEPAGE = "https://www.op-tee.org/" LICENSE = "BSD & GPLv2" LIC_FILES_CHKSUM = "file://${S}/LICENSE.md;md5=daa2bcccc666345ab8940aab1315a4fa" -inherit python3native +inherit python3native ptest require optee.inc # Linking fails on musl due to C++/threads @@ -19,6 +19,7 @@ SRC_URI = "git://github.com/OP-TEE/optee_test.git \ file://0001-host-xtest-Adjust-order-of-including-compiler.h.patch \ file://0002-make-remove-Wno-unsafe-loop-for-clang.patch \ file://0003-make-remove-Wmissing-noreturn-for-clang.patch \ + file://run-ptest \ " S = "${WORKDIR}/git" diff --git a/meta-arm/recipes-security/optee/optee-test/run-ptest b/meta-arm/recipes-security/optee/optee-test/run-ptest new file mode 100755 index 00000000..ba88c14d --- /dev/null +++ b/meta-arm/recipes-security/optee/optee-test/run-ptest @@ -0,0 +1,52 @@ +#!/bin/sh +xtest | awk ' + + # Escapes the special characters in a string so that, when + # included in a regex, it represents a literal match + function regx_escape_literal(str, ret) { + ret = str + gsub(/[\[\]\^\$\.\*\?\+\{\}\\\(\)\|]/ , "\\\\&", str) + return str + } + + # Returns the simple test formatted name + function name(n, ret) { + ret = n + gsub(/\./, " ", ret) + return ret + } + + # Returns the simple test formatted result + function result(res) { + if(res ~ /OK/) { + return "PASS" + } else if(res ~ /FAILED/) { + return "FAIL" + } + } + + function parse(name, description, has_subtests, result_line) { + has_subtests = 0 + + # Consume every line up to the result line + result_line = " " regx_escape_literal(name) " (OK|FAILED)" + do { + getline + + # If this is a subtest (denoted by an "o" bullet) then subparse + if($0 ~ /^o /) { + parse($2, description " : " substr($0, index($0, $3))) + has_subtests = 1 + } + } while ($0 !~ result_line) + + # Only print the results for the deepest nested subtests + if(!has_subtests) { + print result($2) ": " name(name) " - " description + } + } + + # Start parsing at the beginning of every test (denoted by a "*" bullet) + /^\* / { parse($2, substr($0, index($0, $3))) } + +'