| # Copyright (C) 2023 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Unit test for repo_logging module.""" |
| import unittest |
| from unittest import mock |
| |
| from error import RepoExitError |
| from repo_logging import RepoLogger |
| |
| |
| class TestRepoLogger(unittest.TestCase): |
| @mock.patch.object(RepoLogger, "error") |
| def test_log_aggregated_errors_logs_aggregated_errors(self, mock_error): |
| """Test if log_aggregated_errors logs a list of aggregated errors.""" |
| logger = RepoLogger(__name__) |
| logger.log_aggregated_errors( |
| RepoExitError( |
| aggregate_errors=[ |
| Exception("foo"), |
| Exception("bar"), |
| Exception("baz"), |
| Exception("hello"), |
| Exception("world"), |
| Exception("test"), |
| ] |
| ) |
| ) |
| |
| mock_error.assert_has_calls( |
| [ |
| mock.call("=" * 80), |
| mock.call( |
| "Repo command failed due to the following `%s` errors:", |
| "RepoExitError", |
| ), |
| mock.call("foo\nbar\nbaz\nhello\nworld"), |
| mock.call("+%d additional errors...", 1), |
| ] |
| ) |
| |
| @mock.patch.object(RepoLogger, "error") |
| def test_log_aggregated_errors_logs_single_error(self, mock_error): |
| """Test if log_aggregated_errors logs empty aggregated_errors.""" |
| logger = RepoLogger(__name__) |
| logger.log_aggregated_errors(RepoExitError()) |
| |
| mock_error.assert_has_calls( |
| [ |
| mock.call("=" * 80), |
| mock.call("Repo command failed: %s", "RepoExitError"), |
| ] |
| ) |