aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/nightly_revert_checker_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_tools/nightly_revert_checker_test.py')
-rwxr-xr-xllvm_tools/nightly_revert_checker_test.py158
1 files changed, 158 insertions, 0 deletions
diff --git a/llvm_tools/nightly_revert_checker_test.py b/llvm_tools/nightly_revert_checker_test.py
new file mode 100755
index 00000000..68338a59
--- /dev/null
+++ b/llvm_tools/nightly_revert_checker_test.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Copyright 2020 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Tests for nightly_revert_checker."""
+
+from __future__ import print_function
+
+import io
+import unittest
+
+import cros_utils.tiny_render as tiny_render
+import nightly_revert_checker
+import revert_checker
+
+# pylint: disable=protected-access
+
+
+class Test(unittest.TestCase):
+ """Tests for nightly_revert_checker."""
+
+ def test_email_rendering_works_for_singular_revert(self):
+
+ def prettify_sha(sha: str) -> tiny_render.Piece:
+ return 'pretty_' + sha
+
+ def get_sha_description(sha: str) -> tiny_render.Piece:
+ return 'subject_' + sha
+
+ email = nightly_revert_checker._generate_revert_email(
+ repository_name='${repo}',
+ friendly_name='${name}',
+ sha='${sha}',
+ prettify_sha=prettify_sha,
+ get_sha_description=get_sha_description,
+ new_reverts=[
+ revert_checker.Revert(
+ sha='${revert_sha}', reverted_sha='${reverted_sha}')
+ ])
+
+ expected_email = nightly_revert_checker._Email(
+ subject='[revert-checker/${repo}] new revert discovered across ${name}',
+ body=[
+ 'It looks like there may be a new revert across ${name} (',
+ 'pretty_${sha}',
+ ').',
+ tiny_render.line_break,
+ tiny_render.line_break,
+ 'That is:',
+ tiny_render.UnorderedList([[
+ 'pretty_${revert_sha}',
+ ' (appears to revert ',
+ 'pretty_${reverted_sha}',
+ '): ',
+ 'subject_${revert_sha}',
+ ]]),
+ tiny_render.line_break,
+ 'PTAL and consider reverting them locally.',
+ ])
+
+ self.assertEqual(email, expected_email)
+
+ def test_email_rendering_works_for_multiple_reverts(self):
+
+ def prettify_sha(sha: str) -> tiny_render.Piece:
+ return 'pretty_' + sha
+
+ def get_sha_description(sha: str) -> tiny_render.Piece:
+ return 'subject_' + sha
+
+ email = nightly_revert_checker._generate_revert_email(
+ repository_name='${repo}',
+ friendly_name='${name}',
+ sha='${sha}',
+ prettify_sha=prettify_sha,
+ get_sha_description=get_sha_description,
+ new_reverts=[
+ revert_checker.Revert(
+ sha='${revert_sha1}', reverted_sha='${reverted_sha1}'),
+ revert_checker.Revert(
+ sha='${revert_sha2}', reverted_sha='${reverted_sha2}'),
+ # Keep this out-of-order to check that we sort based on SHAs
+ revert_checker.Revert(
+ sha='${revert_sha0}', reverted_sha='${reverted_sha0}'),
+ ])
+
+ expected_email = nightly_revert_checker._Email(
+ subject='[revert-checker/${repo}] new reverts discovered across '
+ '${name}',
+ body=[
+ 'It looks like there may be new reverts across ${name} (',
+ 'pretty_${sha}',
+ ').',
+ tiny_render.line_break,
+ tiny_render.line_break,
+ 'These are:',
+ tiny_render.UnorderedList([
+ [
+ 'pretty_${revert_sha0}',
+ ' (appears to revert ',
+ 'pretty_${reverted_sha0}',
+ '): ',
+ 'subject_${revert_sha0}',
+ ],
+ [
+ 'pretty_${revert_sha1}',
+ ' (appears to revert ',
+ 'pretty_${reverted_sha1}',
+ '): ',
+ 'subject_${revert_sha1}',
+ ],
+ [
+ 'pretty_${revert_sha2}',
+ ' (appears to revert ',
+ 'pretty_${reverted_sha2}',
+ '): ',
+ 'subject_${revert_sha2}',
+ ],
+ ]),
+ tiny_render.line_break,
+ 'PTAL and consider reverting them locally.',
+ ])
+
+ self.assertEqual(email, expected_email)
+
+ def test_llvm_ebuild_parsing_appears_to_function(self):
+ llvm_ebuild = io.StringIO('\n'.join((
+ 'foo',
+ '#LLVM_HASH="123"',
+ 'LLVM_HASH="123" # comment',
+ 'LLVM_NEXT_HASH="456"',
+ )))
+
+ shas = nightly_revert_checker._parse_llvm_ebuild_for_shas(llvm_ebuild)
+ self.assertEqual(shas, [
+ ('llvm', '123'),
+ ('llvm-next', '456'),
+ ])
+
+ def test_llvm_ebuild_parsing_fails_if_both_hashes_arent_present(self):
+ bad_bodies = [
+ '',
+ 'LLVM_HASH="123" # comment',
+ 'LLVM_NEXT_HASH="123" # comment',
+ 'LLVM_NEXT_HASH="123" # comment\n#LLVM_HASH="123"',
+ ]
+
+ for bad in bad_bodies:
+ with self.assertRaises(ValueError) as e:
+ nightly_revert_checker._parse_llvm_ebuild_for_shas(io.StringIO(bad))
+
+ self.assertIn('Failed to detect SHAs', str(e.exception))
+
+
+if __name__ == '__main__':
+ unittest.main()