aboutsummaryrefslogtreecommitdiff
path: root/rust_tools/rust_watch_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'rust_tools/rust_watch_test.py')
-rwxr-xr-xrust_tools/rust_watch_test.py304
1 files changed, 161 insertions, 143 deletions
diff --git a/rust_tools/rust_watch_test.py b/rust_tools/rust_watch_test.py
index 583a9125..1e6aec51 100755
--- a/rust_tools/rust_watch_test.py
+++ b/rust_tools/rust_watch_test.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-# Copyright 2020 The Chromium OS Authors. All rights reserved.
+# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -14,154 +14,172 @@ import unittest
import unittest.mock
from cros_utils import tiny_render
-
import rust_watch
class Test(unittest.TestCase):
- """Tests."""
- def _silence_logs(self):
- """Silences all log output until the end of the current test."""
- def should_log(_record):
- return 0
-
- logger = logging.root
- logger.addFilter(should_log)
- self.addCleanup(logger.removeFilter, should_log)
-
- def test_release_version_parsing(self):
- self.assertEqual(
- rust_watch.RustReleaseVersion.from_string('1.2.3'),
- rust_watch.RustReleaseVersion(1, 2, 3),
- )
-
- def test_release_version_json_round_trips(self):
- ver = rust_watch.RustReleaseVersion(1, 2, 3)
- self.assertEqual(rust_watch.RustReleaseVersion.from_json(ver.to_json()),
- ver)
-
- def test_state_json_round_trips(self):
- state = rust_watch.State(
- last_seen_release=rust_watch.RustReleaseVersion(1, 2, 3),
- last_gentoo_sha='abc123',
- )
-
- self.assertEqual(rust_watch.State.from_json(state.to_json()), state)
-
- @unittest.mock.patch.object(subprocess, 'run')
- @unittest.mock.patch.object(time, 'sleep')
- def test_update_git_repo_tries_again_on_failure(self, sleep_mock, run_mock):
- self._silence_logs()
-
- oh_no_error = ValueError('oh no')
-
- def check_returncode():
- raise oh_no_error
-
- run_call_count = 0
-
- def run_sideeffect(*_args, **_kwargs):
- nonlocal run_call_count
- run_call_count += 1
- result = unittest.mock.Mock()
- result.returncode = 1
- result.check_returncode = check_returncode
- return result
-
- run_mock.side_effect = run_sideeffect
-
- with self.assertRaises(ValueError) as raised:
- rust_watch.update_git_repo(pathlib.Path('/does/not/exist/at/all'))
-
- self.assertIs(raised.exception, oh_no_error)
- self.assertEqual(run_call_count, 5)
-
- sleep_timings = [unittest.mock.call(60 * i) for i in range(1, 5)]
- self.assertEqual(sleep_mock.mock_calls, sleep_timings)
-
- @unittest.mock.patch.object(subprocess, 'run')
- def test_get_new_gentoo_commits_functions(self, run_mock):
- returned = unittest.mock.Mock()
- returned.returncode = 0
- returned.stdout = '\n'.join((
- 'abc123 newer commit',
- 'abcdef and an older commit',
- ))
- run_mock.return_value = returned
- results = rust_watch.get_new_gentoo_commits(
- pathlib.Path('/does/not/exist/at/all'), 'defabc')
- self.assertEqual(results, [
- rust_watch.GitCommit('abcdef', 'and an older commit'),
- rust_watch.GitCommit('abc123', 'newer commit'),
- ])
-
- def test_compose_email_on_a_new_gentoo_commit(self):
- sha_a = 'a' * 40
- new_commit = rust_watch.maybe_compose_email(new_gentoo_commits=[
- rust_watch.GitCommit(
- sha=sha_a,
- subject='summary_a',
- ),
- ], )
-
- self.assertEqual(new_commit,
- ('[rust-watch] new rust ebuild commit detected', [
- 'commit:',
- tiny_render.UnorderedList([
- [
- tiny_render.Link(
- rust_watch.gentoo_sha_to_link(sha_a),
- sha_a[:12],
- ),
- ': summary_a',
- ],
- ])
- ]))
-
- def test_compose_email_composes_nothing_when_no_new_updates_exist(self):
- self.assertIsNone(rust_watch.maybe_compose_email(new_gentoo_commits=()))
-
- def test_compose_bug_creates_bugs_on_new_versions(self):
- title, body = rust_watch.maybe_compose_bug(
- old_state=rust_watch.State(
- last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
- last_gentoo_sha='',
- ),
- newest_release=rust_watch.RustReleaseVersion(1, 0, 1),
- )
- self.assertEqual(title, '[Rust] Update to 1.0.1')
- self.assertTrue(body.startswith('A new release has been detected;'))
-
- title, body = rust_watch.maybe_compose_bug(
- old_state=rust_watch.State(
- last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
- last_gentoo_sha='',
- ),
- newest_release=rust_watch.RustReleaseVersion(1, 1, 0),
- )
- self.assertEqual(title, '[Rust] Update to 1.1.0')
- self.assertTrue(body.startswith('A new release has been detected;'))
-
- title, body = rust_watch.maybe_compose_bug(
- old_state=rust_watch.State(
- last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
- last_gentoo_sha='',
- ),
- newest_release=rust_watch.RustReleaseVersion(2, 0, 0),
- )
- self.assertEqual(title, '[Rust] Update to 2.0.0')
- self.assertTrue(body.startswith('A new release has been detected;'))
-
- def test_compose_bug_does_nothing_when_no_new_updates_exist(self):
- self.assertIsNone(
- rust_watch.maybe_compose_bug(
+ """Tests."""
+
+ def _silence_logs(self):
+ """Silences all log output until the end of the current test."""
+
+ def should_log(_record):
+ return 0
+
+ logger = logging.root
+ logger.addFilter(should_log)
+ self.addCleanup(logger.removeFilter, should_log)
+
+ def test_release_version_parsing(self):
+ self.assertEqual(
+ rust_watch.RustReleaseVersion.from_string("1.2.3"),
+ rust_watch.RustReleaseVersion(1, 2, 3),
+ )
+
+ def test_release_version_json_round_trips(self):
+ ver = rust_watch.RustReleaseVersion(1, 2, 3)
+ self.assertEqual(
+ rust_watch.RustReleaseVersion.from_json(ver.to_json()), ver
+ )
+
+ def test_state_json_round_trips(self):
+ state = rust_watch.State(
+ last_seen_release=rust_watch.RustReleaseVersion(1, 2, 3),
+ last_gentoo_sha="abc123",
+ )
+
+ self.assertEqual(rust_watch.State.from_json(state.to_json()), state)
+
+ @unittest.mock.patch.object(subprocess, "run")
+ @unittest.mock.patch.object(time, "sleep")
+ def test_update_git_repo_tries_again_on_failure(self, sleep_mock, run_mock):
+ self._silence_logs()
+
+ oh_no_error = ValueError("oh no")
+
+ def check_returncode():
+ raise oh_no_error
+
+ run_call_count = 0
+
+ def run_sideeffect(*_args, **_kwargs):
+ nonlocal run_call_count
+ run_call_count += 1
+ result = unittest.mock.Mock()
+ result.returncode = 1
+ result.check_returncode = check_returncode
+ return result
+
+ run_mock.side_effect = run_sideeffect
+
+ with self.assertRaises(ValueError) as raised:
+ rust_watch.update_git_repo(pathlib.Path("/does/not/exist/at/all"))
+
+ self.assertIs(raised.exception, oh_no_error)
+ self.assertEqual(run_call_count, 5)
+
+ sleep_timings = [unittest.mock.call(60 * i) for i in range(1, 5)]
+ self.assertEqual(sleep_mock.mock_calls, sleep_timings)
+
+ @unittest.mock.patch.object(subprocess, "run")
+ def test_get_new_gentoo_commits_functions(self, run_mock):
+ returned = unittest.mock.Mock()
+ returned.returncode = 0
+ returned.stdout = "\n".join(
+ (
+ "abc123 newer commit",
+ "abcdef and an older commit",
+ )
+ )
+ run_mock.return_value = returned
+ results = rust_watch.get_new_gentoo_commits(
+ pathlib.Path("/does/not/exist/at/all"), "defabc"
+ )
+ self.assertEqual(
+ results,
+ [
+ rust_watch.GitCommit("abcdef", "and an older commit"),
+ rust_watch.GitCommit("abc123", "newer commit"),
+ ],
+ )
+
+ def test_compose_email_on_a_new_gentoo_commit(self):
+ sha_a = "a" * 40
+ new_commit = rust_watch.maybe_compose_email(
+ new_gentoo_commits=[
+ rust_watch.GitCommit(
+ sha=sha_a,
+ subject="summary_a",
+ ),
+ ],
+ )
+
+ self.assertEqual(
+ new_commit,
+ (
+ "[rust-watch] new rust ebuild commit detected",
+ [
+ "commit:",
+ tiny_render.UnorderedList(
+ [
+ [
+ tiny_render.Link(
+ rust_watch.gentoo_sha_to_link(sha_a),
+ sha_a[:12],
+ ),
+ ": summary_a",
+ ],
+ ]
+ ),
+ ],
+ ),
+ )
+
+ def test_compose_email_composes_nothing_when_no_new_updates_exist(self):
+ self.assertIsNone(rust_watch.maybe_compose_email(new_gentoo_commits=()))
+
+ def test_compose_bug_creates_bugs_on_new_versions(self):
+ title, body = rust_watch.maybe_compose_bug(
old_state=rust_watch.State(
last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
- last_gentoo_sha='',
+ last_gentoo_sha="",
),
- newest_release=rust_watch.RustReleaseVersion(1, 0, 0),
- ))
+ newest_release=rust_watch.RustReleaseVersion(1, 0, 1),
+ )
+ self.assertEqual(title, "[Rust] Update to 1.0.1")
+ self.assertTrue(body.startswith("A new release has been detected;"))
+ title, body = rust_watch.maybe_compose_bug(
+ old_state=rust_watch.State(
+ last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
+ last_gentoo_sha="",
+ ),
+ newest_release=rust_watch.RustReleaseVersion(1, 1, 0),
+ )
+ self.assertEqual(title, "[Rust] Update to 1.1.0")
+ self.assertTrue(body.startswith("A new release has been detected;"))
-if __name__ == '__main__':
- unittest.main()
+ title, body = rust_watch.maybe_compose_bug(
+ old_state=rust_watch.State(
+ last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
+ last_gentoo_sha="",
+ ),
+ newest_release=rust_watch.RustReleaseVersion(2, 0, 0),
+ )
+ self.assertEqual(title, "[Rust] Update to 2.0.0")
+ self.assertTrue(body.startswith("A new release has been detected;"))
+
+ def test_compose_bug_does_nothing_when_no_new_updates_exist(self):
+ self.assertIsNone(
+ rust_watch.maybe_compose_bug(
+ old_state=rust_watch.State(
+ last_seen_release=rust_watch.RustReleaseVersion(1, 0, 0),
+ last_gentoo_sha="",
+ ),
+ newest_release=rust_watch.RustReleaseVersion(1, 0, 0),
+ )
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()