| #!/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() |