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