xref: /aosp_15_r20/external/toolchain-utils/cros_utils/git_utils_test.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li#!/usr/bin/env python3
2*760c253cSXin Li# Copyright 2024 The ChromiumOS Authors
3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be
4*760c253cSXin Li# found in the LICENSE file.
5*760c253cSXin Li"""Tests for git_utils."""
6*760c253cSXin Li
7*760c253cSXin Liimport unittest
8*760c253cSXin Li
9*760c253cSXin Lifrom cros_utils import git_utils
10*760c253cSXin Li
11*760c253cSXin Li
12*760c253cSXin Li# pylint: disable=protected-access
13*760c253cSXin Li
14*760c253cSXin LiGERRIT_OUTPUT_WITH_ONE_CL = r"""
15*760c253cSXin LiEnumerating objects: 4, done.
16*760c253cSXin LiCounting objects: 100% (4/4), done.
17*760c253cSXin LiDelta compression using up to 128 threads
18*760c253cSXin LiCompressing objects: 100% (2/2), done.
19*760c253cSXin LiWriting objects: 100% (3/3), 320 bytes | 106.00 KiB/s, done.
20*760c253cSXin LiTotal 3 (delta 1), reused 1 (delta 0), pack-reused 0 (from 0)
21*760c253cSXin Liremote: Resolving deltas: 100% (1/1)
22*760c253cSXin Liremote: Processing changes: refs: 1, new: 1, done
23*760c253cSXin Liremote:
24*760c253cSXin Liremote: SUCCESS
25*760c253cSXin Liremote:
26*760c253cSXin Liremote:   https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/5375204 DO NOT COMMIT [WIP] [NEW]
27*760c253cSXin Liremote:
28*760c253cSXin LiTo https://chromium.googlesource.com/chromiumos/third_party/toolchain-utils
29*760c253cSXin Li * [new reference]     HEAD -> refs/for/main
30*760c253cSXin Li"""
31*760c253cSXin Li
32*760c253cSXin LiGERRIT_OUTPUT_WITH_TWO_CLS = r"""
33*760c253cSXin LiEnumerating objects: 4, done.
34*760c253cSXin LiCounting objects: 100% (4/4), done.
35*760c253cSXin LiDelta compression using up to 128 threads
36*760c253cSXin LiCompressing objects: 100% (2/2), done.
37*760c253cSXin LiWriting objects: 100% (3/3), 320 bytes | 106.00 KiB/s, done.
38*760c253cSXin LiTotal 3 (delta 1), reused 1 (delta 0), pack-reused 0 (from 0)
39*760c253cSXin Liremote: Resolving deltas: 100% (1/1)
40*760c253cSXin Liremote: Processing changes: refs: 1, new: 1, done
41*760c253cSXin Liremote:
42*760c253cSXin Liremote: SUCCESS
43*760c253cSXin Liremote:
44*760c253cSXin Liremote:   https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/5375204 DO NOT COMMIT [WIP] [NEW]
45*760c253cSXin Liremote:   https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/5375205 DO NOT COMMIT [WIP] [NEW]
46*760c253cSXin Liremote:
47*760c253cSXin LiTo https://chromium.googlesource.com/chromiumos/third_party/toolchain-utils
48*760c253cSXin Li * [new reference]     HEAD -> refs/for/main
49*760c253cSXin Li"""
50*760c253cSXin Li
51*760c253cSXin Li
52*760c253cSXin LiGERRIT_OUTPUT_WITH_INTERNAL_CL = r"""
53*760c253cSXin LiUpload project manifest-internal/ to remote branch refs/heads/main:
54*760c253cSXin Li  branch DO-NOT-COMMIT ( 1 commit, Tue Apr 16 08:51:25 2024 -0600):
55*760c253cSXin Li         456aadd0 DO NOT COMMIT
56*760c253cSXin Lito https://chrome-internal-review.googlesource.com (y/N)? <--yes>
57*760c253cSXin LiEnumerating objects: 5, done.
58*760c253cSXin LiCounting objects: 100% (5/5), done.
59*760c253cSXin LiDelta compression using up to 128 threads
60*760c253cSXin LiCompressing objects: 100% (3/3), done.
61*760c253cSXin LiWriting objects: 100% (3/3), 334 bytes | 334.00 KiB/s, done.
62*760c253cSXin LiTotal 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
63*760c253cSXin Liremote: Resolving deltas: 100% (2/2)
64*760c253cSXin Liremote: Waiting for private key checker: 1/1 objects left
65*760c253cSXin Liremote: Processing changes: refs: 1, new: 1, done
66*760c253cSXin Liremote:
67*760c253cSXin Liremote: SUCCESS
68*760c253cSXin Liremote:
69*760c253cSXin Liremote:   https://chrome-internal-review.googlesource.com/c/chromeos/manifest-internal/+/7190037 DO NOT COMMIT [NEW]
70*760c253cSXin Liremote:
71*760c253cSXin LiTo https://chrome-internal-review.googlesource.com/chromeos/manifest-internal
72*760c253cSXin Li * [new reference]         DO-NOT-COMMIT -> refs/for/main
73*760c253cSXin Li
74*760c253cSXin Li----------------------------------------------------------------------
75*760c253cSXin Li[OK    ] manifest-internal/ DO-NOT-COMMIT
76*760c253cSXin Li"""
77*760c253cSXin Li
78*760c253cSXin Li
79*760c253cSXin Liclass Test(unittest.TestCase):
80*760c253cSXin Li    """Tests for git_utils."""
81*760c253cSXin Li
82*760c253cSXin Li    def test_cl_parsing_complains_if_no_output(self):
83*760c253cSXin Li        with self.assertRaisesRegex(ValueError, ".*; found 0"):
84*760c253cSXin Li            git_utils._parse_cls_from_upload_output("")
85*760c253cSXin Li
86*760c253cSXin Li    def test_cl_parsing_works_with_one_cl(self):
87*760c253cSXin Li        self.assertEqual(
88*760c253cSXin Li            git_utils._parse_cls_from_upload_output(GERRIT_OUTPUT_WITH_ONE_CL),
89*760c253cSXin Li            [5375204],
90*760c253cSXin Li        )
91*760c253cSXin Li
92*760c253cSXin Li    def test_cl_parsing_works_with_two_cls(self):
93*760c253cSXin Li        self.assertEqual(
94*760c253cSXin Li            git_utils._parse_cls_from_upload_output(GERRIT_OUTPUT_WITH_TWO_CLS),
95*760c253cSXin Li            [5375204, 5375205],
96*760c253cSXin Li        )
97*760c253cSXin Li
98*760c253cSXin Li    def test_cl_parsing_works_with_internal_cl(self):
99*760c253cSXin Li        self.assertEqual(
100*760c253cSXin Li            git_utils._parse_cls_from_upload_output(
101*760c253cSXin Li                GERRIT_OUTPUT_WITH_INTERNAL_CL
102*760c253cSXin Li            ),
103*760c253cSXin Li            [7190037],
104*760c253cSXin Li        )
105*760c253cSXin Li
106*760c253cSXin Li
107*760c253cSXin Liif __name__ == "__main__":
108*760c253cSXin Li    unittest.main()
109