Source code

Revision control

Copy as Markdown

Other Tools

# mypy: allow-untyped-defs
import sys
from os.path import dirname, join
from unittest import mock
import pytest
sys.path.insert(0, join(dirname(__file__), "..", "..", ".."))
from mozlog import structuredlog
from wptrunner.browsers import base
class MozLogTestHandler(object):
def __init__(self):
self.items = []
def __call__(self, data):
self.items.append(data)
@pytest.mark.skipif(
sys.platform == "win32",
reason="Relies on echo, which isn't an executable on Windows",
)
def test_logging_immediate_exit():
logger = structuredlog.StructuredLogger("test")
handler = MozLogTestHandler()
logger.add_handler(handler)
class CustomException(Exception):
pass
with mock.patch.object(base, "wait_for_service", side_effect=CustomException):
browser = base.WebDriverBrowser(
logger, webdriver_binary="echo", webdriver_args=["sample output"]
)
try:
with pytest.raises(CustomException):
browser.start(group_metadata={})
finally:
# Ensure the `echo` process actually exits
browser._proc.wait()
process_output_actions = [
data for data in handler.items if data["action"] == "process_output"
]
assert len(process_output_actions) == 1
assert process_output_actions[0]["data"] == "sample output"