| #!/usr/bin/env python3 | |
| # Copyright 2024 The ChromiumOS Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """Tests for cros_cls.""" | |
| import unittest | |
| import cros_cls | |
| class TestChangeListURL(unittest.TestCase): | |
| """ChangeListURL tests.""" | |
| def test_parsing_long_form_url(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse( | |
| "chromium-review.googlesource.com/c/chromiumos/overlays/" | |
| "chromiumos-overlay/+/123456", | |
| ), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| def test_parsing_long_form_internal_url(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse( | |
| "chrome-internal-review.googlesource.com/c/chromeos/" | |
| "manifest-internal/+/654321" | |
| ), | |
| cros_cls.ChangeListURL(cl_id=654321, patch_set=None, internal=True), | |
| ) | |
| def test_parsing_short_internal_url(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/i/654321"), | |
| cros_cls.ChangeListURL(cl_id=654321, patch_set=None, internal=True), | |
| ) | |
| def test_parsing_discards_http(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("http://crrev.com/c/123456"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| def test_parsing_discards_https(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("https://crrev.com/c/123456"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| def test_parsing_detects_patch_sets(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=14), | |
| ) | |
| def test_parsing_is_okay_with_trailing_slash(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14/"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=14), | |
| ) | |
| def test_parsing_is_okay_with_valid_trailing_junk(self): | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456?foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/?foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14/foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=14), | |
| ) | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14?foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=14), | |
| ) | |
| # While these aren't well-formed, Gerrit handles them without issue. | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456&foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=None), | |
| ) | |
| self.assertEqual( | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14&foo=bar"), | |
| cros_cls.ChangeListURL(cl_id=123456, patch_set=14), | |
| ) | |
| def test_parsing_raises_on_invalid_trailing_jumk(self): | |
| with self.assertRaises(ValueError): | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456foo=bar") | |
| with self.assertRaises(ValueError): | |
| cros_cls.ChangeListURL.parse("crrev.com/c/123456/14foo=bar") | |
| def test_str_functions_properly(self): | |
| self.assertEqual( | |
| str( | |
| cros_cls.ChangeListURL( | |
| cl_id=1234, | |
| patch_set=2, | |
| ) | |
| ), | |
| "https://crrev.com/c/1234/2", | |
| ) | |
| self.assertEqual( | |
| str( | |
| cros_cls.ChangeListURL( | |
| cl_id=1234, | |
| patch_set=None, | |
| ) | |
| ), | |
| "https://crrev.com/c/1234", | |
| ) | |
| self.assertEqual( | |
| str( | |
| cros_cls.ChangeListURL( | |
| cl_id=1234, | |
| patch_set=2, | |
| internal=True, | |
| ) | |
| ), | |
| "https://crrev.com/i/1234/2", | |
| ) | |
| class Test(unittest.TestCase): | |
| """General tests for cros_cls.""" | |
| def test_release_builder_parsing_works(self): | |
| self.assertEqual( | |
| cros_cls.parse_release_from_builder_artifacts_link( | |
| "gs://chromeos-image-archive/amd64-generic-asan-cq/" | |
| "R122-15711.0.0-59730-8761718482083052481" | |
| ), | |
| "R122-15711.0.0", | |
| ) | |
| self.assertEqual( | |
| cros_cls.parse_release_from_builder_artifacts_link( | |
| "gs://chromeos-image-archive/amd64-generic-asan-cq/" | |
| "R122-15711.0.0-59730-8761718482083052481/some/trailing/" | |
| "stuff.zip" | |
| ), | |
| "R122-15711.0.0", | |
| ) | |
| if __name__ == "__main__": | |
| unittest.main() |