diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-21 14:51:33 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-21 14:51:33 +0000 |
commit | 1430da15e99541183a2d740f7cc6b8b3c42e8cf2 (patch) | |
tree | 73936aba47fe1dc71e9cc05af9747036e935608c /llvm_tools/nightly_revert_checker_test.py | |
parent | b75f321fc8978b92ce3db6886ccb966768f0c7a8 (diff) | |
parent | 4e4201457e5f51a132101c611c79ccff9f713c8b (diff) | |
download | toolchain-utils-1430da15e99541183a2d740f7cc6b8b3c42e8cf2.tar.gz |
Snap for 7478067 from 4e4201457e5f51a132101c611c79ccff9f713c8b to mainline-extservices-releaseandroid-mainline-12.0.0_r9android-mainline-12.0.0_r87android-mainline-12.0.0_r72android-mainline-12.0.0_r44android-mainline-12.0.0_r27android-mainline-12.0.0_r117android-mainline-12.0.0_r102android12-mainline-extservices-release
Change-Id: I42e654e28c12d7f20bdac244d1fca60a3d6aa862
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() |