meta-agl-bsp: ptest-runner: v2.2 and LAVA support 71/18071/2
authorKevin Hilman <khilman@baylibre.com>
Mon, 19 Nov 2018 19:29:12 +0000 (11:29 -0800)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 22 Nov 2018 15:22:56 +0000 (15:22 +0000)
Upgrade ptest-runner to v2.2 (first 6 patches), and add the
WIP support for LAVA signal (patch 7).

From branch:
https://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/log/?h=timo/lava-ptest-runner2

Commit:
https://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/commit/?h=timo/lava-ptest-runner2&id=11b29ce444610a07067a89b38e9e85c2162bbf67

Change-Id: Ic4ee5e3a9ab796fe7ccd1810b31e582370f99a25
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0001-utils.c-Prefer-monotonic-clock-to-calculate-elapsed-.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0002-Makefile-libcheck-now-requires-to-link-subunit.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0003-Add-support-to-avoid-load-run-twice-a-run_ptest-scri.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0004-README.md-Update-to-my-current-email.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0005-main.c-Use-realpath-to-get-the-actual-directory-of-p.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0006-main.c-Add-option-e-to-exclude-certain-tests-for-exe.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch [new file with mode: 0644]
meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.1.bbappend [new file with mode: 0644]

diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0001-utils.c-Prefer-monotonic-clock-to-calculate-elapsed-.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0001-utils.c-Prefer-monotonic-clock-to-calculate-elapsed-.patch
new file mode 100644 (file)
index 0000000..6ca593b
--- /dev/null
@@ -0,0 +1,72 @@
+From 41b7f4814d39c1930b1fcf0be2e247a73546fb80 Mon Sep 17 00:00:00 2001
+From: Jeffrey Pautler <jeffrey.pautler@ni.com>
+Date: Tue, 31 Oct 2017 14:38:39 -0500
+Subject: [PATCH 1/7] utils.c: Prefer monotonic clock to calculate elapsed time
+
+The current implementation uses the system clock to calculate how long
+a ptest has been running with no output. If a ptest changes the system
+clock as part of the test, that can cause the current implementation
+to falsely trigger a timeout or miss an actual timeout. It is
+preferrable to use a monotonic clock for calculating elapsed time in
+order to avoid these issues.
+
+This change tries to use the monotonic clock first and falls back to
+the realtime clock if the monotonic clock is not supported.
+
+Signed-off-by: Jeffrey Pautler <jeffrey.pautler@ni.com>
+---
+ utils.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/utils.c b/utils.c
+index 6d653887e9e4..933ecedf57e8 100644
+--- a/utils.c
++++ b/utils.c
+@@ -257,7 +257,8 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid,
+               int timeout, int *fds, FILE **fps)
+ {
+       struct pollfd pfds[2];
+-      time_t sentinel;
++      struct timespec sentinel;
++      clockid_t clock = CLOCK_MONOTONIC;
+       int r;
+       int timeouted = 0;
+@@ -269,7 +270,11 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid,
+       pfds[1].fd = fds[1];
+       pfds[1].events = POLLIN;
+-      sentinel = time(NULL);
++      if (clock_gettime(clock, &sentinel) == -1) {
++              clock = CLOCK_REALTIME;
++              clock_gettime(clock, &sentinel);
++      }
++
+       while (1) {
+               waitflags = WNOHANG;
+@@ -288,11 +293,16 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid,
+                                       fwrite(buf, n, 1, fps[1]);
+                       }
+-                      sentinel = time(NULL);
+-              } else if (timeout >= 0 && ((time(NULL) - sentinel) > timeout)) {
+-                      timeouted = 1;
+-                      kill(pid, SIGKILL);
+-                      waitflags = 0;
++                      clock_gettime(clock, &sentinel);
++              } else if (timeout >= 0) {
++                      struct timespec time;
++
++                      clock_gettime(clock, &time);
++                      if ((time.tv_sec - sentinel.tv_sec) > timeout) {
++                              timeouted = 1;
++                              kill(pid, SIGKILL);
++                              waitflags = 0;
++                      }
+               }
+               if (waitpid(pid, &status, waitflags) == pid)
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0002-Makefile-libcheck-now-requires-to-link-subunit.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0002-Makefile-libcheck-now-requires-to-link-subunit.patch
new file mode 100644 (file)
index 0000000..4ada994
--- /dev/null
@@ -0,0 +1,29 @@
+From 4f6d6c5e3f2f181e3cc380a76e635e7c34d3c5d1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Thu, 7 Dec 2017 17:42:44 -0600
+Subject: [PATCH 2/7] Makefile: libcheck now requires to link subunit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 434b89f34688..1bde7beff9d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -22,7 +22,7 @@ TEST_SOURCES=tests/main.c tests/ptest_list.c tests/utils.c $(BASE_SOURCES)
+ TEST_OBJECTS=$(TEST_SOURCES:.c=.o)
+ TEST_EXECUTABLE=ptest-runner-test
+ TEST_LDFLAGS=-lm -lrt -lpthread
+-TEST_LIBSTATIC=-lcheck
++TEST_LIBSTATIC=-lcheck -lsubunit
+ TEST_DATA=$(shell echo `pwd`/tests/data)
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0003-Add-support-to-avoid-load-run-twice-a-run_ptest-scri.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0003-Add-support-to-avoid-load-run-twice-a-run_ptest-scri.patch
new file mode 100644 (file)
index 0000000..4795733
--- /dev/null
@@ -0,0 +1,137 @@
+From 0e566f65fa31eaa5208d4a17413c7a4aad7eade5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Thu, 7 Dec 2017 17:42:45 -0600
+Subject: [PATCH 3/7] Add support to avoid load/run twice a run_ptest script
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In some ptest packages exists symlink in the ptest directory causing
+to load/run twice the same ptest,
+
+For example in perl5:
+
+/usr/lib/perl -> /usr/lib/perl5
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+---
+ ptest_list.c       | 40 ++++++++++++++++++++++++++++++++++++++++
+ ptest_list.h       |  3 +++
+ tests/data/python3 |  1 +
+ tests/utils.c      |  1 +
+ utils.c            |  6 ++++++
+ 5 files changed, 51 insertions(+)
+ create mode 120000 tests/data/python3
+
+diff --git a/ptest_list.c b/ptest_list.c
+index 2e1aa305752d..3e393d5fabe2 100644
+--- a/ptest_list.c
++++ b/ptest_list.c
+@@ -110,6 +110,46 @@ ptest_list_search(struct ptest_list *head, char *ptest)
+       return q;
+ }
++
++struct ptest_list *
++ptest_list_search_by_file(struct ptest_list *head, char *run_ptest, struct stat st_buf)
++{
++      struct ptest_list *q = NULL;
++      struct ptest_list *p;
++      struct stat st_buf_p;
++
++      VALIDATE_PTR_RNULL(head);
++      VALIDATE_PTR_RNULL(run_ptest);
++
++      for (p = head; p != NULL; p = p->next) {
++              if (p->ptest == NULL) 
++                      continue;
++
++              if (stat(p->run_ptest, &st_buf_p) == -1)
++                      continue;
++
++              if (strcmp(p->run_ptest, run_ptest) == 0) {
++                      q = p;
++                      break;
++              }
++
++              /* *
++               * In some ptest packages exists symlink in the ptest directory
++               * causing to load/run twice the same ptest, 
++               *
++               * For example in perl5:
++               * /usr/lib/perl -> /usr/lib/perl5
++               * */
++              if (st_buf.st_dev == st_buf_p.st_dev &&
++                  st_buf.st_ino == st_buf_p.st_ino) {
++                      q = p;
++                      break;
++              }
++      }
++
++      return q;
++}
++
+ struct ptest_list *
+ ptest_list_add(struct ptest_list *head, char *ptest, char *run_ptest)
+ {
+diff --git a/ptest_list.h b/ptest_list.h
+index 8b394853c25b..03d75390a51d 100644
+--- a/ptest_list.h
++++ b/ptest_list.h
+@@ -28,6 +28,8 @@
+ #define PTEST_LIST_ITERATE_START(head, p) for (p = head->next; p != NULL; p = p->next) { 
+ #define PTEST_LIST_ITERATE_END }
++#include <sys/stat.h>
++
+ struct ptest_list {
+       char *ptest;
+       char *run_ptest;
+@@ -42,6 +44,7 @@ extern int ptest_list_free_all(struct ptest_list *);
+ extern int ptest_list_length(struct ptest_list *);
+ extern struct ptest_list *ptest_list_search(struct ptest_list *, char *);
++extern struct ptest_list *ptest_list_search_by_file(struct ptest_list *, char *, struct stat);
+ extern struct ptest_list *ptest_list_add(struct ptest_list *, char *, char *);
+ extern struct ptest_list *ptest_list_remove(struct ptest_list *, char *, int);
+diff --git a/tests/data/python3 b/tests/data/python3
+new file mode 120000
+index 000000000000..d8654aa0e2f2
+--- /dev/null
++++ b/tests/data/python3
+@@ -0,0 +1 @@
++python
+\ No newline at end of file
+diff --git a/tests/utils.c b/tests/utils.c
+index ecf3e8af9a81..cf093793c4f2 100644
+--- a/tests/utils.c
++++ b/tests/utils.c
+@@ -48,6 +48,7 @@ static int ptests_found_length = 6;
+ static char *ptests_not_found[] = {
+       "busybox",
+       "perl",
++      "python3",
+       NULL,
+ };
+diff --git a/utils.c b/utils.c
+index 933ecedf57e8..ed2eff7900c1 100644
+--- a/utils.c
++++ b/utils.c
+@@ -143,6 +143,12 @@ get_available_ptests(const char *dir)
+                               continue;
+                       }
++                      if (ptest_list_search_by_file(head, run_ptest, st_buf)) {
++                              free(run_ptest);
++                              free(d_name);
++                              continue;
++                      }
++
+                       struct ptest_list *p = ptest_list_add(head,
+                               d_name, run_ptest);
+                       CHECK_ALLOCATION(p, sizeof(struct ptest_list *), 0);
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0004-README.md-Update-to-my-current-email.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0004-README.md-Update-to-my-current-email.patch
new file mode 100644 (file)
index 0000000..dbfe648
--- /dev/null
@@ -0,0 +1,29 @@
+From 16413d71cc06b02a6d859c35a017cc49b88283f7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Thu, 7 Dec 2017 17:42:46 -0600
+Subject: [PATCH 4/7] README.md: Update to my current email
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+---
+ README.md | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/README.md b/README.md
+index fedab04b7f00..22b36a4b7bed 100644
+--- a/README.md
++++ b/README.md
+@@ -50,7 +50,7 @@ $ mtrace ./ptest-runner $(MALLOC_TRACE)
+ For contribute please send a patch with subject prefix "[ptest-runner]" to 
+ yocto@yoctoproject.org and cc the current maintainer that is Aníbal Limón 
+-<anibal.limon@linux.intel.com>.
++<anibal.limon@linaro.org>.
+ ## Links
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0005-main.c-Use-realpath-to-get-the-actual-directory-of-p.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0005-main.c-Use-realpath-to-get-the-actual-directory-of-p.patch
new file mode 100644 (file)
index 0000000..cb9e20a
--- /dev/null
@@ -0,0 +1,42 @@
+From 5bd94a93c89978c5e729db86b86b49919cd3b523 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Wed, 25 Apr 2018 12:05:29 -0500
+Subject: [PATCH 5/7] main.c: Use realpath to get the actual directory of
+ ptests
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix usage of relative paths in -d argument.
+
+$ ./ptest-runner -d ./tests/data
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+---
+ main.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/main.c b/main.c
+index 505829cdad58..593aff1a1956 100644
+--- a/main.c
++++ b/main.c
+@@ -19,6 +19,7 @@
+  *    Aníbal Limón <anibal.limon@intel.com>
+  */
++#include <limits.h>
+ #include <unistd.h>
+ #include <string.h>
+ #include <stdlib.h>
+@@ -70,7 +71,7 @@ main(int argc, char *argv[])
+               switch (opt) {
+                       case 'd':
+                               free(opts.directory);
+-                              opts.directory = strdup(optarg);
++                              opts.directory = realpath(optarg, NULL);
+                               CHECK_ALLOCATION(opts.directory, 1, 1);
+                       break;
+                       case 'l':
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0006-main.c-Add-option-e-to-exclude-certain-tests-for-exe.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0006-main.c-Add-option-e-to-exclude-certain-tests-for-exe.patch
new file mode 100644 (file)
index 0000000..7a4de86
--- /dev/null
@@ -0,0 +1,123 @@
+From 49956f65bb53ea2a2c1b394e5e59ffdfcdcc490f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linaro.org>
+Date: Wed, 25 Apr 2018 11:55:03 -0500
+Subject: [PATCH 6/7] main.c: Add option (-e) to exclude certain tests for
+ execution
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+You can specify a set of ptests to be excluded, it will not fail
+if some ptest excluded isn't found in the list of execution.
+
+$ ./ptest-runner -e "hang glibc" -d tests/data
+
+Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
+---
+ main.c  | 38 +++++++++++++++++++++++++++++++++++---
+ utils.h |  1 +
+ 2 files changed, 36 insertions(+), 3 deletions(-)
+
+diff --git a/main.c b/main.c
+index 593aff1a1956..83600b7d1b31 100644
+--- a/main.c
++++ b/main.c
+@@ -19,6 +19,7 @@
+  *    Aníbal Limón <anibal.limon@intel.com>
+  */
++#include <ctype.h>
+ #include <limits.h>
+ #include <unistd.h>
+ #include <string.h>
+@@ -42,8 +43,8 @@
+ static inline void
+ print_usage(FILE *stream, char *progname)
+ {
+-      fprintf(stream, "Usage: %s [-d directory] [-l list] [-t timeout] [-x xml-filename]"
+-                      " [-h] [ptest1 ptest2 ...]\n", progname);
++      fprintf(stream, "Usage: %s [-d directory] [-e exclude] [-l list] [-t timeout]"
++                      " [-x xml-filename] [-h] [ptest1 ptest2 ...]\n", progname);
+ }
+ int
+@@ -53,6 +54,8 @@ main(int argc, char *argv[])
+       int ptest_num = 0;
+       int i;
+       int rc;
++      int ptest_exclude_num = 0;
++      char *c, *tok;
+ #ifdef MEMCHECK
+       mtrace();
+@@ -62,18 +65,44 @@ main(int argc, char *argv[])
+       struct ptest_options opts;
+       opts.directory = strdup(DEFAULT_DIRECTORY);
++      opts.exclude = NULL;
+       opts.list = 0;
+       opts.timeout = DEFAULT_TIMEOUT;
+       opts.ptests = NULL;
+       opts.xml_filename = NULL;
+-      while ((opt = getopt(argc, argv, "d:lt:x:h")) != -1) {
++      while ((opt = getopt(argc, argv, "d:e:lt:x:h")) != -1) {
+               switch (opt) {
+                       case 'd':
+                               free(opts.directory);
+                               opts.directory = realpath(optarg, NULL);
+                               CHECK_ALLOCATION(opts.directory, 1, 1);
+                       break;
++                      case 'e':
++                              c = optarg;
++                              ptest_exclude_num = 1;
++
++                              while (*c) {
++                                      if (isspace(*c))
++                                              ptest_exclude_num++;
++                                      c++;
++                              }
++
++
++                              opts.exclude = malloc(ptest_exclude_num * sizeof(char));
++                              CHECK_ALLOCATION(opts.exclude, 1, 1);
++
++                              i = 0;
++                              tok = strtok_r(optarg, " ", &c);
++                              opts.exclude[i] = strdup(tok);
++                              CHECK_ALLOCATION(opts.exclude[i], 1, 1);
++                              i++;
++                              while ((tok = strtok_r(NULL, " ", &c)) != NULL) {
++                                      opts.exclude[i] = strdup(tok);
++                                      CHECK_ALLOCATION(opts.exclude[i], 1, 1);
++                                      i++;
++                              }
++                      break;
+                       case 'l':
+                               opts.list = 1;
+                       break;
+@@ -134,6 +163,9 @@ main(int argc, char *argv[])
+               ptest_list_free_all(head);
+       }
++      for (i = 0; i < ptest_exclude_num; i++)
++              ptest_list_remove(run, opts.exclude[i], 1);
++
+       rc = run_ptests(run, opts, argv[0], stdout, stderr);
+       ptest_list_free_all(run);
+diff --git a/utils.h b/utils.h
+index 8fa20a8bf621..ee85163ddfff 100644
+--- a/utils.h
++++ b/utils.h
+@@ -32,6 +32,7 @@
+ struct ptest_options {
+       char *directory;
++      char **exclude;
+       int list;
+       int timeout;
+       char **ptests;
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner/0007-WIP-Initial-LAVA-support.patch
new file mode 100644 (file)
index 0000000..28c9c09
--- /dev/null
@@ -0,0 +1,144 @@
+From 11b29ce444610a07067a89b38e9e85c2162bbf67 Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@linux.intel.com>
+Date: Mon, 15 Oct 2018 18:30:42 -0700
+Subject: [PATCH 7/7] [WIP] Initial LAVA support
+
+Linaro Automated Validation Architecture (LAVA) launches a test suite
+on the target but thereafter only observes stdout.
+
+LAVA knows that a test case has started or ended based on signals
+emitted to stdout:
+(setup)
+<LAVA_SIGNAL_STARTTC test_case_name>
+(teardown)
+<LAVA_SIGNAL_ENDTC test_case_name>
+<LAVA_SIGNAL_TESTCASE TEST_CASE_ID=test_case_name RESULT=pass|fail \
+  [[ MEASUREMENT=numeric_measurement ][ UNITS=units_string]]>
+
+It is valid to have a measurement without units, but not units without a measurement.
+
+Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com>
+---
+ flags.h | 10 ++++++++++
+ main.c  |  9 ++++++++-
+ utils.c | 15 +++++++++++++++
+ utils.h |  2 +-
+ 4 files changed, 34 insertions(+), 2 deletions(-)
+ create mode 100644 flags.h
+
+diff --git a/flags.h b/flags.h
+new file mode 100644
+index 000000000000..0dac2234e0b4
+--- /dev/null
++++ b/flags.h
+@@ -0,0 +1,10 @@
++/* SPDX-License-Identifier: GPL-2.0 */
++
++/* Flag bit definitions */
++
++#ifndef __FLAGS_H__
++#define __FLAGS_H__
++
++#define LAVA_SIGNAL_ENABLE    (0x0001)
++
++#endif                                /* __FLAGS_H__ */
+diff --git a/main.c b/main.c
+index 83600b7d1b31..92ced6926c3d 100644
+--- a/main.c
++++ b/main.c
+@@ -36,6 +36,7 @@
+ #endif
+ #include "utils.h"
++#include "flags.h"
+ #define DEFAULT_DIRECTORY "/usr/lib"
+ #define DEFAULT_TIMEOUT 300
+@@ -70,8 +71,9 @@ main(int argc, char *argv[])
+       opts.timeout = DEFAULT_TIMEOUT;
+       opts.ptests = NULL;
+       opts.xml_filename = NULL;
++      opts.flags = 0;
+-      while ((opt = getopt(argc, argv, "d:e:lt:x:h")) != -1) {
++      while ((opt = getopt(argc, argv, "d:e:lt:x:Lh")) != -1) {
+               switch (opt) {
+                       case 'd':
+                               free(opts.directory);
+@@ -118,6 +120,11 @@ main(int argc, char *argv[])
+                               opts.xml_filename = strdup(optarg);
+                               CHECK_ALLOCATION(opts.xml_filename, 1, 1);
+                       break;
++                      case 'L':
++                              // set LAVA signal mode
++                              opts.flags |= LAVA_SIGNAL_ENABLE;
++                              fprintf(stdout, "LAVA_SIGNAL_ENABLE == %d\n", opts.flags);
++                      break;
+                       default:
+                               print_usage(stdout, argv[0]);
+                               exit(1);
+diff --git a/utils.c b/utils.c
+index ed2eff7900c1..0fd1da6aec92 100644
+--- a/utils.c
++++ b/utils.c
+@@ -39,6 +39,7 @@
+ #include "ptest_list.h"
+ #include "utils.h"
++#include "flags.h"
+ #define GET_STIME_BUF_SIZE 1024
+ #define WAIT_CHILD_POLL_TIMEOUT_MS 200
+@@ -358,6 +359,7 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
+               fprintf(fp, "START: %s\n", progname);
+               PTEST_LIST_ITERATE_START(head, p);
+                       char *ptest_dir = strdup(p->run_ptest);
++                      char *ptest = strdup(p->ptest);
+                       if (ptest_dir == NULL) {
+                               rc = -1;
+                               break;
+@@ -376,6 +378,11 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
+                               int fds[2]; fds[0] = pipefd_stdout[0]; fds[1] = pipefd_stderr[0];
+                               FILE *fps[2]; fps[0] = fp; fps[1] = fp_stderr;
++                              char result[5]; // pass\0, fail\0, skip\0
++
++                              if (opts.flags & LAVA_SIGNAL_ENABLE) {
++                                      fprintf(stdout, "<LAVA_SIGNAL_STARTTC %s>\n", ptest);
++                              }
+                               fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE));
+                               fprintf(fp, "BEGIN: %s\n", ptest_dir);
+@@ -389,6 +396,14 @@ run_ptests(struct ptest_list *head, const struct ptest_options opts,
+                               fprintf(fp, "END: %s\n", ptest_dir);
+                               fprintf(fp, "%s\n", get_stime(stime, GET_STIME_BUF_SIZE));
++                              if (opts.flags & LAVA_SIGNAL_ENABLE) {
++                                      if (status)
++                                              sprintf(result, "fail");
++                                      else
++                                              sprintf(result, "pass");
++                                      fprintf(stdout, "<LAVA_SIGNAL_ENDTC %s>\n", ptest);
++                                      fprintf(stdout, "<LAVA_SIGNAL_TESTCASE TEST_CASE_ID=%s RESULT=%s>\n", ptest, result);
++                              }
+                       }
+               PTEST_LIST_ITERATE_END;
+               fprintf(fp, "STOP: %s\n", progname);
+diff --git a/utils.h b/utils.h
+index ee85163ddfff..06d4c100d151 100644
+--- a/utils.h
++++ b/utils.h
+@@ -37,9 +37,9 @@ struct ptest_options {
+       int timeout;
+       char **ptests;
+       char *xml_filename;
++      unsigned int flags;
+ };
+-
+ extern void check_allocation1(void *, size_t, char *, int, int);
+ extern struct ptest_list *get_available_ptests(const char *);
+ extern int print_ptests(struct ptest_list *, FILE *);
+-- 
+2.11.0
+
diff --git a/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.1.bbappend b/meta-agl-bsp/recipes-support/ptest-runner/ptest-runner_2.1.bbappend
new file mode 100644 (file)
index 0000000..000ab3d
--- /dev/null
@@ -0,0 +1,4 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0004-README.md-Update-to-my-current-email.patch file://0001-utils.c-Prefer-monotonic-clock-to-calculate-elapsed-.patch file://0002-Makefile-libcheck-now-requires-to-link-subunit.patch file://0003-Add-support-to-avoid-load-run-twice-a-run_ptest-scri.patch file://0005-main.c-Use-realpath-to-get-the-actual-directory-of-p.patch file://0006-main.c-Add-option-e-to-exclude-certain-tests-for-exe.patch file://0007-WIP-Initial-LAVA-support.patch"
+