blob: e03ef678b083af25c427b979337c55e7c97d3213 [file] [log] [blame]
# Copyright 2017 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Module containing unit tests for build_failure_message."""
from chromite.lib import build_failure_message
from chromite.lib import constants
from chromite.lib import cros_test_lib
from chromite.lib import failure_message_lib
from chromite.lib import failure_message_lib_unittest
from chromite.lib import patch_unittest
failure_message_helper = failure_message_lib_unittest.FailureMessageHelper()
class BuildFailureMessageTests(cros_test_lib.MockTestCase):
"""Tests for BuildFailureMessage."""
def ConstructBuildFailureMessage(
self,
message_summary="message_summary",
failure_messages=None,
internal=True,
reason="reason",
builder="builder",
):
return build_failure_message.BuildFailureMessage(
message_summary, failure_messages, internal, reason, builder
)
def setUp(self) -> None:
self._patch_factory = patch_unittest.MockPatchFactory()
def _GetBuildFailureMessageWithMixedMsgs(self):
failure_messages = (
failure_message_helper.GetBuildFailureMessageWithMixedMsgs()
)
build_failure = self.ConstructBuildFailureMessage(
failure_messages=failure_messages
)
return build_failure
def testBuildFailureMessageToStr(self) -> None:
"""Test BuildFailureMessageToStr."""
build_failure = self._GetBuildFailureMessageWithMixedMsgs()
self.assertIsNotNone(build_failure.BuildFailureMessageToStr())
def testMatchesExceptionCategoriesOnMixedFailuresReturnsFalse(self) -> None:
"""Test MatchesExceptionCategories on mixed failures returns False."""
build_failure = self._GetBuildFailureMessageWithMixedMsgs()
self.assertFalse(
build_failure.MatchesExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
def testMatchesExceptionCategoriesOnBuildFailuresReturnsTrue(self) -> None:
"""Test MatchesExceptionCategories on build failures returns True."""
failure_messages = [
failure_message_helper.GetBuildScriptFailureMessage(),
failure_message_helper.GetPackageBuildFailureMessage(),
]
build_failure = self.ConstructBuildFailureMessage(
failure_messages=failure_messages
)
self.assertTrue(
build_failure.MatchesExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
def testMatchesExceptionCategoriesOnCompoundFailuresReturnsTrue(
self,
) -> None:
"""Test MatchesExceptionCategories on CompoundFailures returns True."""
f_1 = failure_message_helper.GetBuildScriptFailureMessage(
failure_id=1, outer_failure_id=3
)
f_2 = failure_message_helper.GetPackageBuildFailureMessage(
failure_id=2, outer_failure_id=3
)
f_3 = failure_message_helper.GetStageFailureMessage(failure_id=3)
f_4 = failure_message_helper.GetBuildScriptFailureMessage(failure_id=4)
failures = (
failure_message_lib.FailureMessageManager.ReconstructMessages(
[f_1, f_2, f_3, f_4]
)
)
build_failure = self.ConstructBuildFailureMessage(
failure_messages=failures
)
self.assertTrue(
build_failure.MatchesExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
def testMatchesExceptionCategoriesOnCompoundFailuresReturnsFalse(
self,
) -> None:
"""Test MatchesExceptionCategories on CompoundFailures returns False."""
f_1 = failure_message_helper.GetStageFailureMessage(
failure_id=1, outer_failure_id=3
)
f_2 = failure_message_helper.GetPackageBuildFailureMessage(
failure_id=2, outer_failure_id=3
)
f_3 = failure_message_helper.GetStageFailureMessage(failure_id=3)
f_4 = failure_message_helper.GetBuildScriptFailureMessage(failure_id=4)
failures = (
failure_message_lib.FailureMessageManager.ReconstructMessages(
[f_1, f_2, f_3, f_4]
)
)
build_failure = self.ConstructBuildFailureMessage(
failure_messages=failures
)
self.assertFalse(
build_failure.MatchesExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
def testHasExceptionCategoriesOnMixedFailures(self) -> None:
"""Test HasExceptionCategories on mixed failures."""
build_failure = self._GetBuildFailureMessageWithMixedMsgs()
self.assertTrue(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
self.assertTrue(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_UNKNOWN}
)
)
self.assertFalse(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_INFRA}
)
)
self.assertFalse(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_LAB}
)
)
def tesHasExceptionCategoriesOnCompoundFailures(self) -> None:
"""Test HasExceptionCategories on CompoundFailures."""
f_1 = failure_message_helper.GetBuildScriptFailureMessage(
failure_id=1, outer_failure_id=3
)
f_2 = failure_message_helper.GetPackageBuildFailureMessage(
failure_id=2, outer_failure_id=3
)
f_3 = failure_message_helper.GetStageFailureMessage(failure_id=3)
failures = (
failure_message_lib.FailureMessageManager.ReconstructMessages(
[f_1, f_2, f_3]
)
)
build_failure = self.ConstructBuildFailureMessage(
failure_messages=failures
)
self.assertTrue(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_BUILD}
)
)
self.assertTrue(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_UNKNOWN}
)
)
self.assertFalse(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_INFRA}
)
)
self.assertFalse(
build_failure.HasExceptionCategories(
{constants.EXCEPTION_CATEGORY_LAB}
)
)
def _GetMockChanges(self):
mock_change_1 = self._patch_factory.MockPatch(
project="chromiumos/overlays/chromiumos-overlay"
)
mock_change_2 = self._patch_factory.MockPatch(
project="chromiumos/overlays/chromiumos-overlay"
)
mock_change_3 = self._patch_factory.MockPatch(
project="chromiumos/chromite"
)
mock_change_4 = self._patch_factory.MockPatch(
project="chromeos/chromeos-admin"
)
return [mock_change_1, mock_change_2, mock_change_3, mock_change_4]
def _CreateBuildFailure(self):
f_1 = failure_message_helper.GetPackageBuildFailureMessage(failure_id=1)
f_2 = failure_message_helper.GetPackageBuildFailureMessage(failure_id=2)
f_3 = failure_message_helper.GetPackageBuildFailureMessage(failure_id=3)
failures = (
failure_message_lib.FailureMessageManager.ReconstructMessages(
[f_1, f_2, f_3]
)
)
return self.ConstructBuildFailureMessage(failure_messages=failures)