Bug 1552855 - [mozlog] Add new optional field to test actions for expected intermittents. r=jgraham

Added a new optional field on the test_end and test_status actions called expected_intermittents
which accepts a List of expected intermittent statuses. The default is None. As it is an optional
field, upon landing of D25081, it will only show if there is an expected intermittent.

A test was added to check that expected_intermittents are logged.

Differential Revision: https://phabricator.services.mozilla.com/D31809

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Nikki S 2019-05-21 14:17:29 +00:00
parent 846e7d0d9b
commit 1a21f1c47b
2 changed files with 20 additions and 3 deletions

View File

@ -354,7 +354,9 @@ class StructuredLogger(object):
SubStatus("expected", default="PASS"),
Unicode("message", default=None, optional=True),
Unicode("stack", default=None, optional=True),
Dict(Any, "extra", default=None, optional=True))
Dict(Any, "extra", default=None, optional=True),
List(SubStatus, "expected_intermittent", default=None,
optional=True))
def test_status(self, data):
"""
Log a test_status message indicating a subtest result. Tests that
@ -385,7 +387,9 @@ class StructuredLogger(object):
Status("expected", default="OK"),
Unicode("message", default=None, optional=True),
Unicode("stack", default=None, optional=True),
Dict(Any, "extra", default=None, optional=True))
Dict(Any, "extra", default=None, optional=True),
List(Status, "expected_intermittent", default=None,
optional=True))
def test_end(self, data):
"""
Log a test_end message indicating that a test completed. For tests

View File

@ -239,6 +239,19 @@ class TestStructuredLog(BaseStructuredTest):
self.logger.test_end("test1", "OK")
self.logger.suite_end()
def test_status_expected_intermittent(self):
self.logger.suite_start([])
self.logger.test_start("test1")
self.logger.test_status("test1", "subtest name", "fail", expected_intermittent=["FAIL"])
self.assert_log_equals({"action": "test_status",
"subtest": "subtest name",
"status": "FAIL",
"expected": "PASS",
"expected_intermittent": ["FAIL"],
"test": "test1"})
self.logger.test_end("test1", "OK")
self.logger.suite_end()
def test_status_not_started(self):
self.logger.test_status("test_UNKNOWN", "subtest", "PASS")
self.assertTrue(self.pop_last_item()["message"].startswith(
@ -561,7 +574,7 @@ class TestTypeConversions(BaseStructuredTest):
self.assertRaises(TypeError, self.logger.test_status, subtest="subtest2",
status="FAIL", expected="PASS")
self.assertRaises(TypeError, self.logger.test_status, "test1", "subtest1",
"PASS", "FAIL", "message", "stack", {}, "unexpected")
"PASS", "FAIL", "message", "stack", {}, [], "unexpected")
self.assertRaises(TypeError, self.logger.test_status,
"test1", test="test2")
self.logger.suite_end()