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