diff options
Diffstat (limited to 'llvm_tools/nightly_revert_checker_test.py')
-rwxr-xr-x | llvm_tools/nightly_revert_checker_test.py | 158 |
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() |