[igt-dev] [PATCH i-g-t 3/3] runner: Add --dmesg-warn-level switch

Arkadiusz Hiler
2019-04-01T06:47:13Z

This switch allows users to select which dmesg log level is treated as
warning resulting in overriding the test results to
dmesg-fail/dmesg-warn.

Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
.../0/dmesg.txt | 7 ++
.../0/err.txt | 3 +
.../0/journal.txt | 2 +
.../0/out.txt | 3 +
.../README.txt | 8 ++
.../endtime.txt | 1 +
.../joblist.txt | 1 +
.../metadata.txt | 13 +++
.../reference.json | 73 +++++++++++++++
.../starttime.txt | 1 +
.../uname.txt | 1 +
.../dmesg-warn-level-piglit-style/0/dmesg.txt | 6 ++
.../dmesg-warn-level-piglit-style/0/err.txt | 3 +
.../0/journal.txt | 2 +
.../dmesg-warn-level-piglit-style/0/out.txt | 3 +
.../dmesg-warn-level-piglit-style/README.txt | 7 ++
.../dmesg-warn-level-piglit-style/endtime.txt | 1 +
.../dmesg-warn-level-piglit-style/joblist.txt | 1 +
.../metadata.txt | 13 +++
.../reference.json | 73 +++++++++++++++
.../starttime.txt | 1 +
.../dmesg-warn-level-piglit-style/uname.txt | 1 +
.../dmesg-warn-level/0/dmesg.txt | 6 ++
.../dmesg-warn-level/0/err.txt | 3 +
.../dmesg-warn-level/0/journal.txt | 2 +
.../dmesg-warn-level/0/out.txt | 3 +
.../dmesg-warn-level/README.txt | 4 +
.../dmesg-warn-level/endtime.txt | 1 +
.../dmesg-warn-level/joblist.txt | 1 +
.../dmesg-warn-level/metadata.txt | 13 +++
.../dmesg-warn-level/reference.json | 73 +++++++++++++++
.../dmesg-warn-level/starttime.txt | 1 +
.../dmesg-warn-level/uname.txt | 1 +
runner/resultgen.c | 4 +-
runner/runner_json_tests.c | 3 +
runner/runner_tests.c | 90 +++++++++++++++++++
runner/settings.c | 30 ++++++-
runner/settings.h | 1 +
38 files changed, 457 insertions(+), 3 deletions(-)
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/dmesg.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/err.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/journal.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/out.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/README.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/endtime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/joblist.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/metadata.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/reference.json
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/starttime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-one-piglit-style/uname.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/0/dmesg.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/0/err.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/0/journal.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/0/out.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/README.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/endtime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/joblist.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/metadata.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/reference.json
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/starttime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level-piglit-style/uname.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/0/dmesg.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/0/err.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/0/journal.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/0/out.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/README.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/endtime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/joblist.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/metadata.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/reference.json
create mode 100644 runner/json_tests_data/dmesg-warn-level/starttime.txt
create mode 100644 runner/json_tests_data/dmesg-warn-level/uname.txt

diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/dmesg.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/dmesg.txt
new file mode 100644
index 00000000..e44a24fc
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/dmesg.txt
@@ -0,0 +1,7 @@
+15,952,3216186095097,-;[IGT] successtest: executing
+15,953,3216186101115,-;[IGT] successtest: starting subtest first-subtest
+6,951,3216186095083,-;drm_ KERN_INFO, disregerd
+7,952,3216186095097,-;drm_ KERN_DEBUG disregard
+4,953,3216186101159,-;drm_ KERN_WARNING disregard
+1,953,3216186101159,-;drm_ KERN_ALERT should trip a warning
+15,955,3216186101160,-;[IGT] successtest: exiting, ret=0
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/err.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/err.txt
new file mode 100644
index 00000000..e18c00e9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/err.txt
@@ -0,0 +1,3 @@
+Starting subtest: first-subtest
+This is a warning line
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/journal.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/journal.txt
new file mode 100644
index 00000000..86a30e07
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/journal.txt
@@ -0,0 +1,2 @@
+first-subtest
+exit:0 (0.014s)
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/out.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/out.txt
new file mode 100644
index 00000000..5946bf31
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/0/out.txt
@@ -0,0 +1,3 @@
+IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: first-subtest
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/README.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/README.txt
new file mode 100644
index 00000000..d3b29f3e
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/README.txt
@@ -0,0 +1,8 @@
+When --demsg-warn-level is set to 6 also KERN_INFO level messages should be
+treated as warnings triggering a result change to dmesg-warn/dmesg-fail.
+
+This makes sure that the piglit-style-dmesg does not clash with
+dmesg-warn-level. All the messages are prefixed with drm_ to fit the filters.
+
+We set the --dmesg-warn-level to 1 to make sure that the setting works in this
+direction too.
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/endtime.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/endtime.txt
new file mode 100644
index 00000000..635f6ae9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/endtime.txt
@@ -0,0 +1 @@
+1539953735.172373
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/joblist.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/joblist.txt
new file mode 100644
index 00000000..81f914a7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/joblist.txt
@@ -0,0 +1 @@
+successtest first-subtest
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/metadata.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/metadata.txt
new file mode 100644
index 00000000..172c0708
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : normal-run
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 0
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 1
+dmesg_warn_level : 1
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/reference.json b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/reference.json
new file mode 100644
index 00000000..011024db
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/reference.json
@@ -0,0 +1,73 @@
+{
+ "__type__":"TestrunResult",
+ "results_version":10,
+ "name":"normal-run",
+ "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+ "time_elapsed":{
+ "__type__":"TimeAttribute",
+ "start":1539953735.1110389,
+ "end":1539953735.1723731
+ },
+ "tests":{
+ "igt@successtest@first-subtest":{
+ "out":"Starting subtest: first-subtest\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "igt-version":"IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+ "result":"dmesg-warn",
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.0
+ },
+ "err":"Starting subtest: first-subtest\nThis is a warning line\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "dmesg":"<7> [3216186.095097] [IGT] successtest: executing\n<7> [3216186.101115] [IGT] successtest: starting subtest first-subtest\n<6> [3216186.095083] drm_ KERN_INFO, disregerd\n<7> [3216186.095097] drm_ KERN_DEBUG disregard\n<4> [3216186.101159] drm_ KERN_WARNING disregard\n<1> [3216186.101159] drm_ KERN_ALERT should trip a warning\n<7> [3216186.101160] [IGT] successtest: exiting, ret=0\n",
+ "dmesg-warnings":"<1> [3216186.101159] drm_ KERN_ALERT should trip a warning\n"
+ }
+ },
+ "totals":{
+ "":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "root":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "igt@successtest":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ }
+ },
+ "runtimes":{
+ "igt@successtest":{
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.014
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/starttime.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/starttime.txt
new file mode 100644
index 00000000..ae038f18
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/starttime.txt
@@ -0,0 +1 @@
+1539953735.111039
diff --git a/runner/json_tests_data/dmesg-warn-level-one-piglit-style/uname.txt b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-one-piglit-style/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/0/dmesg.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/dmesg.txt
new file mode 100644
index 00000000..546a29ff
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/dmesg.txt
@@ -0,0 +1,6 @@
+15,952,3216186095097,-;[IGT] successtest: executing
+15,953,3216186101115,-;[IGT] successtest: starting subtest first-subtest
+6,951,3216186095083,-;drm_ KERN_INFO, should be a warning here too
+7,952,3216186095097,-;drm_ KERN_DEBUG, should not be a warning
+4,953,3216186101159,-;drm_ A proper KERN_WARNING
+15,955,3216186101160,-;[IGT] successtest: exiting, ret=0
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/0/err.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/err.txt
new file mode 100644
index 00000000..e18c00e9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/err.txt
@@ -0,0 +1,3 @@
+Starting subtest: first-subtest
+This is a warning line
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/0/journal.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/journal.txt
new file mode 100644
index 00000000..86a30e07
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/journal.txt
@@ -0,0 +1,2 @@
+first-subtest
+exit:0 (0.014s)
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/0/out.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/out.txt
new file mode 100644
index 00000000..5946bf31
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/0/out.txt
@@ -0,0 +1,3 @@
+IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: first-subtest
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/README.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/README.txt
new file mode 100644
index 00000000..f8420d76
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/README.txt
@@ -0,0 +1,7 @@
+When --demsg-warn-level is set to 6 also KERN_INFO level messages should be
+treated as warnings triggering a result change to dmesg-warn/dmesg-fail.
+
+This makes sure that the piglit-style-dmesg does not clash with
+dmesg-warn-level. All the messages are prefixed with drm_ to fit the filters.
+
+IGT messages were artifically bumped to KERN_DEBUG to not pollute the warnings.
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/endtime.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/endtime.txt
new file mode 100644
index 00000000..635f6ae9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/endtime.txt
@@ -0,0 +1 @@
+1539953735.172373
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/joblist.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/joblist.txt
new file mode 100644
index 00000000..81f914a7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/joblist.txt
@@ -0,0 +1 @@
+successtest first-subtest
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/metadata.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/metadata.txt
new file mode 100644
index 00000000..b05377a9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : normal-run
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 0
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 1
+dmesg_warn_level : 6
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/reference.json b/runner/json_tests_data/dmesg-warn-level-piglit-style/reference.json
new file mode 100644
index 00000000..5d1c00ea
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/reference.json
@@ -0,0 +1,73 @@
+{
+ "__type__":"TestrunResult",
+ "results_version":10,
+ "name":"normal-run",
+ "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+ "time_elapsed":{
+ "__type__":"TimeAttribute",
+ "start":1539953735.1110389,
+ "end":1539953735.1723731
+ },
+ "tests":{
+ "igt@successtest@first-subtest":{
+ "out":"Starting subtest: first-subtest\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "igt-version":"IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+ "result":"dmesg-warn",
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.0
+ },
+ "err":"Starting subtest: first-subtest\nThis is a warning line\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "dmesg":"<7> [3216186.095097] [IGT] successtest: executing\n<7> [3216186.101115] [IGT] successtest: starting subtest first-subtest\n<6> [3216186.095083] drm_ KERN_INFO, should be a warning here too\n<7> [3216186.095097] drm_ KERN_DEBUG, should not be a warning\n<4> [3216186.101159] drm_ A proper KERN_WARNING\n<7> [3216186.101160] [IGT] successtest: exiting, ret=0\n",
+ "dmesg-warnings":"<6> [3216186.095083] drm_ KERN_INFO, should be a warning here too\n<4> [3216186.101159] drm_ A proper KERN_WARNING\n"
+ }
+ },
+ "totals":{
+ "":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "root":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "igt@successtest":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ }
+ },
+ "runtimes":{
+ "igt@successtest":{
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.014
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/starttime.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/starttime.txt
new file mode 100644
index 00000000..ae038f18
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/starttime.txt
@@ -0,0 +1 @@
+1539953735.111039
diff --git a/runner/json_tests_data/dmesg-warn-level-piglit-style/uname.txt b/runner/json_tests_data/dmesg-warn-level-piglit-style/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level-piglit-style/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/json_tests_data/dmesg-warn-level/0/dmesg.txt b/runner/json_tests_data/dmesg-warn-level/0/dmesg.txt
new file mode 100644
index 00000000..16ef1210
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/0/dmesg.txt
@@ -0,0 +1,6 @@
+15,952,3216186095097,-;[IGT] successtest: executing
+15,953,3216186101115,-;[IGT] successtest: starting subtest first-subtest
+6,951,3216186095083,-;KERN_INFO, should be a warning here too
+7,952,3216186095097,-;KERN_DEBUG, should not be a warning
+4,953,3216186101159,-;A proper KERN_WARNING
+15,955,3216186101160,-;[IGT] successtest: exiting, ret=0
diff --git a/runner/json_tests_data/dmesg-warn-level/0/err.txt b/runner/json_tests_data/dmesg-warn-level/0/err.txt
new file mode 100644
index 00000000..e18c00e9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/0/err.txt
@@ -0,0 +1,3 @@
+Starting subtest: first-subtest
+This is a warning line
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level/0/journal.txt b/runner/json_tests_data/dmesg-warn-level/0/journal.txt
new file mode 100644
index 00000000..86a30e07
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/0/journal.txt
@@ -0,0 +1,2 @@
+first-subtest
+exit:0 (0.014s)
diff --git a/runner/json_tests_data/dmesg-warn-level/0/out.txt b/runner/json_tests_data/dmesg-warn-level/0/out.txt
new file mode 100644
index 00000000..5946bf31
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/0/out.txt
@@ -0,0 +1,3 @@
+IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)
+Starting subtest: first-subtest
+Subtest first-subtest: SUCCESS (0.000s)
diff --git a/runner/json_tests_data/dmesg-warn-level/README.txt b/runner/json_tests_data/dmesg-warn-level/README.txt
new file mode 100644
index 00000000..f481130d
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/README.txt
@@ -0,0 +1,4 @@
+When --demsg-warn-level is set to 6 also KERN_INFO level messages should be
+treated as warnings triggering a result change to dmesg-warn/dmesg-fail.
+
+IGT messages were artifically bumped to KERN_DEBUG to not pollute the warnings.
diff --git a/runner/json_tests_data/dmesg-warn-level/endtime.txt b/runner/json_tests_data/dmesg-warn-level/endtime.txt
new file mode 100644
index 00000000..635f6ae9
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/endtime.txt
@@ -0,0 +1 @@
+1539953735.172373
diff --git a/runner/json_tests_data/dmesg-warn-level/joblist.txt b/runner/json_tests_data/dmesg-warn-level/joblist.txt
new file mode 100644
index 00000000..81f914a7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/joblist.txt
@@ -0,0 +1 @@
+successtest first-subtest
diff --git a/runner/json_tests_data/dmesg-warn-level/metadata.txt b/runner/json_tests_data/dmesg-warn-level/metadata.txt
new file mode 100644
index 00000000..7597a4eb
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/metadata.txt
@@ -0,0 +1,13 @@
+abort_mask : 0
+name : normal-run
+dry_run : 0
+sync : 0
+log_level : 0
+overwrite : 0
+multiple_mode : 0
+inactivity_timeout : 0
+use_watchdog : 0
+piglit_style_dmesg : 0
+dmesg_warn_level : 6
+test_root : /path/does/not/exist
+results_path : /path/does/not/exist
diff --git a/runner/json_tests_data/dmesg-warn-level/reference.json b/runner/json_tests_data/dmesg-warn-level/reference.json
new file mode 100644
index 00000000..32fb571b
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/reference.json
@@ -0,0 +1,73 @@
+{
+ "__type__":"TestrunResult",
+ "results_version":10,
+ "name":"normal-run",
+ "uname":"Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64",
+ "time_elapsed":{
+ "__type__":"TimeAttribute",
+ "start":1539953735.1110389,
+ "end":1539953735.1723731
+ },
+ "tests":{
+ "igt@successtest@first-subtest":{
+ "out":"Starting subtest: first-subtest\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "igt-version":"IGT-Version: 1.23-g0c763bfd (x86_64) (Linux: 4.18.0-1-amd64 x86_64)",
+ "result":"dmesg-warn",
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.0
+ },
+ "err":"Starting subtest: first-subtest\nThis is a warning line\nSubtest first-subtest: SUCCESS (0.000s)\n",
+ "dmesg":"<7> [3216186.095097] [IGT] successtest: executing\n<7> [3216186.101115] [IGT] successtest: starting subtest first-subtest\n<6> [3216186.095083] KERN_INFO, should be a warning here too\n<7> [3216186.095097] KERN_DEBUG, should not be a warning\n<4> [3216186.101159] A proper KERN_WARNING\n<7> [3216186.101160] [IGT] successtest: exiting, ret=0\n",
+ "dmesg-warnings":"<6> [3216186.095083] KERN_INFO, should be a warning here too\n<4> [3216186.101159] A proper KERN_WARNING\n"
+ }
+ },
+ "totals":{
+ "":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "root":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ },
+ "igt@successtest":{
+ "crash":0,
+ "pass":0,
+ "dmesg-fail":0,
+ "dmesg-warn":1,
+ "skip":0,
+ "incomplete":0,
+ "timeout":0,
+ "notrun":0,
+ "fail":0,
+ "warn":0
+ }
+ },
+ "runtimes":{
+ "igt@successtest":{
+ "time":{
+ "__type__":"TimeAttribute",
+ "start":0.0,
+ "end":0.014
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/runner/json_tests_data/dmesg-warn-level/starttime.txt b/runner/json_tests_data/dmesg-warn-level/starttime.txt
new file mode 100644
index 00000000..ae038f18
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/starttime.txt
@@ -0,0 +1 @@
+1539953735.111039
diff --git a/runner/json_tests_data/dmesg-warn-level/uname.txt b/runner/json_tests_data/dmesg-warn-level/uname.txt
new file mode 100644
index 00000000..a7aef6f7
--- /dev/null
+++ b/runner/json_tests_data/dmesg-warn-level/uname.txt
@@ -0,0 +1 @@
+Linux hostname 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
diff --git a/runner/resultgen.c b/runner/resultgen.c
index 40d1cfcc..2d21cba7 100644
--- a/runner/resultgen.c
+++ b/runner/resultgen.c
@@ -670,12 +670,12 @@ static bool fill_from_dmesg(int fd,
}

if (settings->piglit_style_dmesg) {
- if ((flags & 0x07) <= 5 && continuation != 'c' &&
+ if ((flags & 0x07) <= settings->dmesg_warn_level && continuation != 'c' &&
regexec(&re, message, (size_t)0, NULL, 0) != REG_NOMATCH) {
append_line(&warnings, &warningslen, formatted);
}
} else {
- if ((flags & 0x07) <= 4 && continuation != 'c' &&
+ if ((flags & 0x07) <= settings->dmesg_warn_level && continuation != 'c' &&
regexec(&re, message, (size_t)0, NULL, 0) == REG_NOMATCH) {
append_line(&warnings, &warningslen, formatted);
}
diff --git a/runner/runner_json_tests.c b/runner/runner_json_tests.c
index 09a93189..7c9540d1 100644
--- a/runner/runner_json_tests.c
+++ b/runner/runner_json_tests.c
@@ -159,6 +159,9 @@ static const char *dirnames[] = {
"dmesg-escapes",
"notrun-results",
"notrun-results-multiple-mode",
+ "dmesg-warn-level",
+ "dmesg-warn-level-piglit-style",
+ "dmesg-warn-level-one-piglit-style"
};

igt_main
diff --git a/runner/runner_tests.c b/runner/runner_tests.c
index 06725536..f2b5ffa7 100644
--- a/runner/runner_tests.c
+++ b/runner/runner_tests.c
@@ -155,6 +155,7 @@ static void assert_settings_equal(struct settings *one, struct settings *two)
igt_assert_eqstr(one->test_root, two->test_root);
igt_assert_eqstr(one->results_path, two->results_path);
igt_assert_eq(one->piglit_style_dmesg, two->piglit_style_dmesg);
+ igt_assert_eq(one->dmesg_warn_level, two->dmesg_warn_level);
}

static void assert_job_list_equal(struct job_list *one, struct job_list *two)
@@ -223,7 +224,9 @@ igt_main
igt_assert(!settings.use_watchdog);
igt_assert(strstr(settings.test_root, "test-root-dir") != NULL);
igt_assert(strstr(settings.results_path, "path-to-results") != NULL);
+
igt_assert(!settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 4);
}

igt_subtest_group {
@@ -389,7 +392,36 @@ igt_main
igt_assert(settings.use_watchdog);
igt_assert(strstr(settings.test_root, "test-root-dir") != NULL);
igt_assert(strstr(settings.results_path, "path-to-results") != NULL);
+
igt_assert(settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 5);
+ }
+
+ igt_subtest("dmesg-warn-level-overwrittable-with-piglit-style") {
+ const char *argv[] = { "runner",
+ "--piglit-style-dmesg",
+ "--dmesg-warn-level=3",
+ "test-root-dir",
+ "path-to-results",
+ };
+
+ igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, &settings));
+
+ igt_assert(settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 3);
+ }
+
+ igt_subtest("dmesg-warn-level-overwrittable") {
+ const char *argv[] = { "runner",
+ "--dmesg-warn-level=3",
+ "test-root-dir",
+ "path-to-results",
+ };
+
+ igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, &settings));
+
+ igt_assert(!settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 3);
}

igt_subtest("invalid-option") {
@@ -1092,6 +1124,64 @@ igt_main
}
}

+ igt_subtest_group {
+ igt_subtest("metadata-read-old-style-infer-dmesg-warn-piglit-style")
+ {
+ char metadata[] = "piglit_style_dmesg : 1\n";
+ FILE *f = fmemopen(metadata, strlen(metadata), "r");
+ igt_assert(f);
+
+ igt_assert(read_settings_from_file(&settings, f));
+
+ igt_assert(settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 5);
+
+ fclose(f);
+ }
+
+ igt_subtest("metadata-read-overrides-dmesg-warn-piglit-style")
+ {
+ char metadata[] = "piglit_style_dmesg : 1\ndmesg_warn_level : 3";
+ FILE *f = fmemopen(metadata, strlen(metadata), "r");
+ igt_assert(f);
+
+ igt_assert(read_settings_from_file(&settings, f));
+
+ igt_assert(settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 3);
+
+ fclose(f);
+ }
+
+ igt_subtest("metadata-read-old-style-infer-dmesg-warn-default")
+ {
+ char metadata[] = "piglit_style_dmesg : 0\n";
+ FILE *f = fmemopen(metadata, strlen(metadata), "r");
+ igt_assert(f);
+
+ igt_assert(read_settings_from_file(&settings, f));
+
+ igt_assert(!settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 4);
+
+ fclose(f);
+ }
+
+ igt_subtest("metadata-read-overrides-dmesg-warn-default")
+ {
+ char metadata[] = "piglit_style_dmesg : 0\ndmesg_warn_level : 3";
+ FILE *f = fmemopen(metadata, strlen(metadata), "r");
+ igt_assert(f);
+
+ igt_assert(read_settings_from_file(&settings, f));
+
+ igt_assert(!settings.piglit_style_dmesg);
+ igt_assert_eq(settings.dmesg_warn_level, 3);
+
+ fclose(f);
+ }
+ }
+
igt_subtest_group {
struct job_list list;
int dirfd = -1, subdirfd = -1, fd = -1;
diff --git a/runner/settings.c b/runner/settings.c
index 20b21378..82e564a7 100644
--- a/runner/settings.c
+++ b/runner/settings.c
@@ -17,6 +17,7 @@ enum {
OPT_TEST_LIST,
OPT_IGNORE_MISSING,
OPT_PIGLIT_DMESG,
+ OPT_DMESG_WARN_LEVEL,
OPT_OVERALL_TIMEOUT,
OPT_HELP = 'h',
OPT_NAME = 'n',
@@ -159,12 +160,18 @@ static const char *usage_str =
" --use-watchdog Use hardware watchdog for lethal enforcement of the\n"
" above timeout. Killing the test process is still\n"
" attempted at timeout trigger.\n"
+ " --demsg-warn-level <level>\n"
+ " Messages with log level equal or lower (more serious)\n"
+ " to the given one will override the test result to\n"
+ " dmesg-warn/dmesg-fail, assuming they go through filtering.\n"
+ " Defaults to 4 (KERN_WARNING).\n"
" --piglit-style-dmesg Filter dmesg like piglit does. Piglit considers matches\n"
" against a short filter list to mean the test result\n"
" should be changed to dmesg-warn/dmesg-fail. Without\n"
" this option everything except matches against a\n"
" (longer) filter list means the test result should\n"
- " change.\n"
+ " change. KERN_NOTICE dmesg level is treated as warn,\n"
+ " unless overridden with --dmesg-wan-level.\n"
" [test_root] Directory that contains the IGT tests. The environment\n"
" variable IGT_TEST_ROOT will be used if set, overriding\n"
" this option if given.\n"
@@ -270,6 +277,7 @@ bool parse_options(int argc, char **argv,
{"overall-timeout", required_argument, NULL, OPT_OVERALL_TIMEOUT},
{"use-watchdog", no_argument, NULL, OPT_WATCHDOG},
{"piglit-style-dmesg", no_argument, NULL, OPT_PIGLIT_DMESG},
+ {"dmesg-warn-level", required_argument, NULL, OPT_DMESG_WARN_LEVEL},
{ 0, 0, 0, 0},
};

@@ -277,6 +285,8 @@ bool parse_options(int argc, char **argv,

optind = 1;

+ settings->dmesg_warn_level = -1;
+
while ((c = getopt_long(argc, argv, "hn:dt:x:sl:om", long_options, NULL)) != -1) {
switch (c) {
case OPT_HELP:
@@ -332,6 +342,11 @@ bool parse_options(int argc, char **argv,
break;
case OPT_PIGLIT_DMESG:
settings->piglit_style_dmesg = true;
+ if (settings->dmesg_warn_level < 0)
+ settings->dmesg_warn_level = 5; /* KERN_NOTICE */
+ break;
+ case OPT_DMESG_WARN_LEVEL:
+ settings->dmesg_warn_level = atoi(optarg);
break;
case '?':
usage(NULL, stderr);
@@ -342,6 +357,9 @@ bool parse_options(int argc, char **argv,
}
}

+ if (settings->dmesg_warn_level < 0)
+ settings->dmesg_warn_level = 4; /* KERN_WARN */
+
switch (argc - optind) {
case 2:
settings->test_root = absolute_path(argv[optind]);
@@ -525,6 +543,7 @@ bool serialize_settings(struct settings *settings)
SERIALIZE_LINE(f, settings, overall_timeout, "%d");
SERIALIZE_LINE(f, settings, use_watchdog, "%d");
SERIALIZE_LINE(f, settings, piglit_style_dmesg, "%d");
+ SERIALIZE_LINE(f, settings, dmesg_warn_level, "%d");
SERIALIZE_LINE(f, settings, test_root, "%s");
SERIALIZE_LINE(f, settings, results_path, "%s");

@@ -553,6 +572,7 @@ bool read_settings_from_file(struct settings *settings, FILE *f)

char *name = NULL, *val = NULL;

+ settings->dmesg_warn_level = -1;

while (fscanf(f, "%ms : %ms", &name, &val) == 2) {
int numval = atoi(val);
@@ -568,6 +588,7 @@ bool read_settings_from_file(struct settings *settings, FILE *f)
PARSE_LINE(settings, name, val, overall_timeout, numval);
PARSE_LINE(settings, name, val, use_watchdog, numval);
PARSE_LINE(settings, name, val, piglit_style_dmesg, numval);
+ PARSE_LINE(settings, name, val, dmesg_warn_level, numval);
PARSE_LINE(settings, name, val, test_root, val ? strdup(val) : NULL);
PARSE_LINE(settings, name, val, results_path, val ? strdup(val) : NULL);

@@ -578,6 +599,13 @@ bool read_settings_from_file(struct settings *settings, FILE *f)
name = val = NULL;
}

+ if (settings->dmesg_warn_level < 0) {
+ if (settings->piglit_style_dmesg)
+ settings->dmesg_warn_level = 5;
+ else
+ settings->dmesg_warn_level = 4;
+ }
+
free(name);
free(val);

diff --git a/runner/settings.h b/runner/settings.h
index ae90897c..672a3af8 100644
--- a/runner/settings.h
+++ b/runner/settings.h
@@ -42,6 +42,7 @@ struct settings {
char *test_root;
char *results_path;
bool piglit_style_dmesg;
+ int dmesg_warn_level;
};

/**
--
2.20.1