blob: 7557da2b89c0a24fa99825dd79cbb3cfd32c5a0c [file] [log] [blame]
# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for cbuildbot_alerts."""
import logging
import sys
from chromite.cbuildbot import cbuildbot_alerts
from chromite.lib import cros_test_lib
class CrosloggingTest(cros_test_lib.OutputTestCase):
"""Test logging works as expected."""
def setUp(self) -> None:
self.logger = logging.getLogger()
sh = logging.StreamHandler(sys.stdout)
self.logger.addHandler(sh)
# pylint: disable=protected-access
cbuildbot_alerts._buildbot_markers_enabled = False
def AssertLogContainsMsg(self, msg, functor, *args, **kwargs) -> None:
"""Asserts that calling functor logs a line that contains msg.
Args:
msg: The message to look for.
functor: A function taking no arguments to test.
*args, **kwargs: passthrough arguments to AssertLogContainsMsg.
"""
with self.OutputCapturer():
functor()
self.AssertOutputContainsLine(msg, *args, **kwargs)
def testNotice(self) -> None:
"""Test logging.notice works and is between INFO and WARNING."""
msg = "notice message"
self.logger.setLevel(logging.INFO)
self.AssertLogContainsMsg(msg, lambda: logging.notice(msg))
self.logger.setLevel(logging.WARNING)
self.AssertLogContainsMsg(msg, lambda: logging.notice(msg), invert=True)
def testPrintBuildbotFunctionsNoMarker(self) -> None:
# pylint: disable-next=line-too-long
"""PrintBuildbot* without markers should not be recognized by buildbot."""
self.AssertLogContainsMsg(
"@@@STEP_LINK@",
lambda: cbuildbot_alerts.PrintBuildbotLink("name", "url"),
check_stderr=True,
invert=True,
)
self.AssertLogContainsMsg(
"@@@@STEP_TEXT@",
lambda: cbuildbot_alerts.PrintBuildbotStepText("text"),
check_stderr=True,
invert=True,
)
self.AssertLogContainsMsg(
"@@@STEP_WARNINGS@@@",
cbuildbot_alerts.PrintBuildbotStepWarnings,
check_stderr=True,
invert=True,
)
self.AssertLogContainsMsg(
"@@@STEP_FAILURE@@@",
cbuildbot_alerts.PrintBuildbotStepFailure,
check_stderr=True,
invert=True,
)
self.AssertLogContainsMsg(
"@@@BUILD_STEP",
lambda: cbuildbot_alerts.PrintBuildbotStepName("name"),
check_stderr=True,
invert=True,
)
self.AssertLogContainsMsg(
"@@@SET_BUILD_PROPERTY",
lambda: cbuildbot_alerts.PrintKitchenSetBuildProperty(
"name", {"a": "value"}
),
check_stderr=True,
invert=True,
)
def testPrintBuildbotFunctionsWithMarker(self) -> None:
"""PrintBuildbot* with markers should be recognized by buildbot."""
cbuildbot_alerts.EnableBuildbotMarkers()
self.AssertLogContainsMsg(
"@@@STEP_LINK@name@url@@@",
lambda: cbuildbot_alerts.PrintBuildbotLink("name", "url"),
check_stderr=True,
)
self.AssertLogContainsMsg(
"@@@STEP_TEXT@text@@@",
lambda: cbuildbot_alerts.PrintBuildbotStepText("text"),
check_stderr=True,
)
self.AssertLogContainsMsg(
"@@@STEP_WARNINGS@@@",
cbuildbot_alerts.PrintBuildbotStepWarnings,
check_stderr=True,
)
self.AssertLogContainsMsg(
"@@@STEP_FAILURE@@@",
cbuildbot_alerts.PrintBuildbotStepFailure,
check_stderr=True,
)
self.AssertLogContainsMsg(
"@@@BUILD_STEP@name@@@",
lambda: cbuildbot_alerts.PrintBuildbotStepName("name"),
check_stderr=True,
)
self.AssertLogContainsMsg(
'@@@SET_BUILD_PROPERTY@name@"value"@@@',
lambda: cbuildbot_alerts.PrintKitchenSetBuildProperty(
"name", "value"
),
check_stderr=True,
)