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