[Piglit] [PATCH] framework/dmesg.py: add a filtering mechanism
Dylan Baker
baker.dylan.c at gmail.com
Tue May 6 20:00:20 PDT 2014
On Tuesday, May 06, 2014 01:18:23 PM Thomas Wood wrote:
> Only update the test status if at least one of the lines in the dmesg
> output matches the given regular expression.
>
> v2: Style changes suggested by Ilia Mirkin and Dylan Baker
> Add a framework test for dmesg filtering
>
> Signed-off-by: Thomas Wood <thomas.wood at intel.com>
> ---
> framework/dmesg.py | 9 +++++++++
> framework/tests/dmesg_tests.py | 42
> +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 48
> insertions(+), 3 deletions(-)
>
> diff --git a/framework/dmesg.py b/framework/dmesg.py
> index 3af8496..6590c1f 100644
> --- a/framework/dmesg.py
> +++ b/framework/dmesg.py
> @@ -53,6 +53,7 @@ class LinuxDmesg(object):
> """ Create a dmesg instance """
> self._last_message = None
> self._new_messages = []
> + self.regex = None
>
> # Populate self.dmesg initially, otherwise the first test will
> always # be full of dmesg crud.
> @@ -101,6 +102,14 @@ class LinuxDmesg(object):
> # if update_dmesg() found new entries replace the results of the
> test # and subtests
> if self._new_messages:
> +
> + if self.regex:
> + for line in self._new_messages:
> + if self.regex.search(line):
> + break
> + else:
> + return result
> +
> result['result'] = replace(result['result'])
>
> # Replace any subtests
> diff --git a/framework/tests/dmesg_tests.py b/framework/tests/dmesg_tests.py
> index f713320..ce3d2af 100644
> --- a/framework/tests/dmesg_tests.py
> +++ b/framework/tests/dmesg_tests.py
> @@ -23,6 +23,7 @@
> import os
> import sys
> import subprocess
> +import re
> import nose.tools as nt
> from nose.plugins.skip import SkipTest
> from framework.dmesg import DummyDmesg, LinuxDmesg, get_dmesg, DmesgError
> @@ -164,16 +165,19 @@ def test_dmesg_wrap_complete():
>
> def test_update_result_replace():
> """ Generates tests for update_result """
> - dmesg = _get_dmesg()
>
> - for res in ['pass', 'fail', 'crash', 'warn', 'skip', 'notrun']:
> + def create_test_result(res):
> result = TestResult()
> result['result'] = res
> result['subtest'] = {}
> result['subtest']['test'] = res
> + return result
>
> + dmesg = _get_dmesg()
> +
> + for res in ['pass', 'fail', 'crash', 'warn', 'skip', 'notrun']:
> _write_dev_kmesg()
> - new_result = dmesg.update_result(result)
> + new_result = dmesg.update_result(create_test_result(res))
>
> # Create a yieldable and set the description for useful per-test
> names yieldable = check_update_result
> @@ -183,6 +187,38 @@ def test_update_result_replace():
> yieldable.description = "Test update_result subtest:
> {0}".format(res) yield yieldable, new_result['subtest']['test'], res
>
> + # check that the status is not updated when Dmesg.regex is set and
> does + # not match the dmesg output
> + dmesg.regex = re.compile("(?!)")
> + _write_dev_kmesg()
> + new_result = dmesg.update_result(create_test_result(res))
> +
> + yieldable = check_equal_result
> + yieldable.description = ("Test update_result with non-matching
> regex: " + "{0}".format(res))
> + yield yieldable, new_result['result'], res
> +
> + # check that the status is updated when Dmesg.regex is set and
> matches + # the dmesg output
> + dmesg.regex = re.compile("piglit.*test")
> + _write_dev_kmesg()
> + new_result = dmesg.update_result(create_test_result(res))
> +
> + yieldable = check_update_result
> + yieldable.description = ("Test update_result with matching regex: "
> + "{0} ".format(res))
> + yield yieldable, new_result['result'], res
> +
> +def check_equal_result(result, status):
> + """ Tests that the result and status are equal
> +
> + Dmesg.update_results() should not change the status if Dmesg.regex is
> set + and the dmesg output did not match it.
> +
> + """
> +
> + nt.assert_equal(result, status, msg="status should not have changed "
> + "from {} to {}".format(status,
> result))
>
> def check_update_result(result, status):
> """ Tests that update result replaces results correctly
Looks good to me,
Reviewed-by: Dylan Baker <baker.dylan.c at gmail.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20140506/76d6b236/attachment-0001.sig>
More information about the Piglit
mailing list