xref: /aosp_15_r20/external/toolchain-utils/llvm_tools/cros_cls_test.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1#!/usr/bin/env python3
2# Copyright 2024 The ChromiumOS Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for cros_cls."""
7
8import unittest
9
10import cros_cls
11
12
13class TestChangeListURL(unittest.TestCase):
14    """ChangeListURL tests."""
15
16    def test_parsing_long_form_url(self):
17        self.assertEqual(
18            cros_cls.ChangeListURL.parse(
19                "chromium-review.googlesource.com/c/chromiumos/overlays/"
20                "chromiumos-overlay/+/123456",
21            ),
22            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
23        )
24
25    def test_parsing_long_form_internal_url(self):
26        self.assertEqual(
27            cros_cls.ChangeListURL.parse(
28                "chrome-internal-review.googlesource.com/c/chromeos/"
29                "manifest-internal/+/654321"
30            ),
31            cros_cls.ChangeListURL(cl_id=654321, patch_set=None, internal=True),
32        )
33
34    def test_parsing_short_internal_url(self):
35        self.assertEqual(
36            cros_cls.ChangeListURL.parse("crrev.com/i/654321"),
37            cros_cls.ChangeListURL(cl_id=654321, patch_set=None, internal=True),
38        )
39
40    def test_parsing_discards_http(self):
41        self.assertEqual(
42            cros_cls.ChangeListURL.parse("http://crrev.com/c/123456"),
43            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
44        )
45
46    def test_parsing_discards_https(self):
47        self.assertEqual(
48            cros_cls.ChangeListURL.parse("https://crrev.com/c/123456"),
49            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
50        )
51
52    def test_parsing_detects_patch_sets(self):
53        self.assertEqual(
54            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14"),
55            cros_cls.ChangeListURL(cl_id=123456, patch_set=14),
56        )
57
58    def test_parsing_is_okay_with_trailing_slash(self):
59        self.assertEqual(
60            cros_cls.ChangeListURL.parse("crrev.com/c/123456/"),
61            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
62        )
63        self.assertEqual(
64            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14/"),
65            cros_cls.ChangeListURL(cl_id=123456, patch_set=14),
66        )
67
68    def test_parsing_is_okay_with_valid_trailing_junk(self):
69        self.assertEqual(
70            cros_cls.ChangeListURL.parse("crrev.com/c/123456?foo=bar"),
71            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
72        )
73        self.assertEqual(
74            cros_cls.ChangeListURL.parse("crrev.com/c/123456/?foo=bar"),
75            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
76        )
77        self.assertEqual(
78            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14/foo=bar"),
79            cros_cls.ChangeListURL(cl_id=123456, patch_set=14),
80        )
81        self.assertEqual(
82            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14?foo=bar"),
83            cros_cls.ChangeListURL(cl_id=123456, patch_set=14),
84        )
85
86        # While these aren't well-formed, Gerrit handles them without issue.
87        self.assertEqual(
88            cros_cls.ChangeListURL.parse("crrev.com/c/123456&foo=bar"),
89            cros_cls.ChangeListURL(cl_id=123456, patch_set=None),
90        )
91        self.assertEqual(
92            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14&foo=bar"),
93            cros_cls.ChangeListURL(cl_id=123456, patch_set=14),
94        )
95
96    def test_parsing_raises_on_invalid_trailing_jumk(self):
97        with self.assertRaises(ValueError):
98            cros_cls.ChangeListURL.parse("crrev.com/c/123456foo=bar")
99
100        with self.assertRaises(ValueError):
101            cros_cls.ChangeListURL.parse("crrev.com/c/123456/14foo=bar")
102
103    def test_str_functions_properly(self):
104        self.assertEqual(
105            str(
106                cros_cls.ChangeListURL(
107                    cl_id=1234,
108                    patch_set=2,
109                )
110            ),
111            "https://crrev.com/c/1234/2",
112        )
113
114        self.assertEqual(
115            str(
116                cros_cls.ChangeListURL(
117                    cl_id=1234,
118                    patch_set=None,
119                )
120            ),
121            "https://crrev.com/c/1234",
122        )
123
124        self.assertEqual(
125            str(
126                cros_cls.ChangeListURL(
127                    cl_id=1234,
128                    patch_set=2,
129                    internal=True,
130                )
131            ),
132            "https://crrev.com/i/1234/2",
133        )
134
135
136class Test(unittest.TestCase):
137    """General tests for cros_cls."""
138
139    def test_release_builder_parsing_works(self):
140        self.assertEqual(
141            cros_cls.parse_release_from_builder_artifacts_link(
142                "gs://chromeos-image-archive/amd64-generic-asan-cq/"
143                "R122-15711.0.0-59730-8761718482083052481"
144            ),
145            "R122-15711.0.0",
146        )
147        self.assertEqual(
148            cros_cls.parse_release_from_builder_artifacts_link(
149                "gs://chromeos-image-archive/amd64-generic-asan-cq/"
150                "R122-15711.0.0-59730-8761718482083052481/some/trailing/"
151                "stuff.zip"
152            ),
153            "R122-15711.0.0",
154        )
155
156
157if __name__ == "__main__":
158    unittest.main()
159