You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
8.1 KiB
Python
246 lines
8.1 KiB
Python
#!/usr/bin/env python3
|
|
# Copyright 2024 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, ROOT_DIR)
|
|
|
|
import roll_downstream_gcs_deps
|
|
|
|
|
|
class CopyPackageTest(unittest.TestCase):
|
|
|
|
def testNoDepsToRoll(self):
|
|
with self.assertRaises(Exception):
|
|
roll_downstream_gcs_deps.copy_packages('', '', ['foo'], ['foo'])
|
|
|
|
with self.assertRaises(Exception):
|
|
roll_downstream_gcs_deps.copy_packages('deps = {"foo": ""}',
|
|
'deps = {}', ['foo'],
|
|
['foo'])
|
|
|
|
with self.assertRaises(Exception):
|
|
roll_downstream_gcs_deps.copy_packages('deps = {"foo": ""}',
|
|
'deps = {"bar": ""}',
|
|
['foo'], ['baz'])
|
|
|
|
def testNoGCSDeps(self):
|
|
source_deps = '''
|
|
deps = {
|
|
"foo": {
|
|
'dep_type': 'unknown',
|
|
'objects': [
|
|
{
|
|
'object_name': 'foo-v2.tar.xz',
|
|
'sha256sum': '1111111111111111111111111111111111111111111111111111111111111111',
|
|
'size_bytes': 101,
|
|
'generation': 901,
|
|
},
|
|
]
|
|
},
|
|
}
|
|
'''
|
|
destination_deps = '''
|
|
deps = {
|
|
"foo": {
|
|
'dep_type': 'unknown',
|
|
'objects': [
|
|
{
|
|
'object_name': 'foo.tar.xz',
|
|
'sha256sum': '0000000000000000000000000000000000000000000000000000000000000000',
|
|
'size_bytes': 100,
|
|
'generation': 900,
|
|
},
|
|
]
|
|
},
|
|
}
|
|
'''
|
|
with self.assertRaises(Exception):
|
|
roll_downstream_gcs_deps.copy_packages(source_deps,
|
|
destination_deps, ['foo'],
|
|
['foo'])
|
|
|
|
def testObjectInLineUpdate(self):
|
|
source_deps = '''
|
|
deps = {
|
|
"foo": {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'foo',
|
|
'condition': 'deps source condition',
|
|
'objects': [
|
|
{
|
|
'object_name': 'foo-v2.tar.xz',
|
|
'sha256sum': '1111111111111111111111111111111111111111111111111111111111111111',
|
|
'size_bytes': 101,
|
|
'generation': 901,
|
|
'condition': 'host_os == "linux" and non_git_source and new',
|
|
},
|
|
]
|
|
},
|
|
}
|
|
'''
|
|
destination_deps = '''
|
|
deps = {
|
|
"other": "preserved",
|
|
"foo": {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'foo',
|
|
'condition': 'deps dest condition',
|
|
'objects': [
|
|
{
|
|
'object_name': 'foo.tar.xz',
|
|
'sha256sum': '0000000000000000000000000000000000000000000000000000000000000000',
|
|
'size_bytes': 100,
|
|
'generation': 900,
|
|
'condition': 'host_os == "linux" and non_git_source',
|
|
},
|
|
]
|
|
},
|
|
"another": "preserved",
|
|
}
|
|
'''
|
|
expected_deps = '''
|
|
deps = {
|
|
"other": "preserved",
|
|
"foo": {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'foo',
|
|
'condition': 'deps dest condition',
|
|
'objects': [
|
|
{
|
|
'object_name': 'foo-v2.tar.xz',
|
|
'sha256sum': '1111111111111111111111111111111111111111111111111111111111111111',
|
|
'size_bytes': 101,
|
|
'generation': 901,
|
|
'condition': 'host_os == "linux" and non_git_source and new',
|
|
},
|
|
]
|
|
},
|
|
"another": "preserved",
|
|
}
|
|
'''
|
|
result = roll_downstream_gcs_deps.copy_packages(source_deps,
|
|
destination_deps,
|
|
['foo'], ['foo'])
|
|
self.assertEqual(result, expected_deps)
|
|
|
|
def testGCSRustPackageNewPlatform(self):
|
|
source_deps = '''
|
|
deps = {
|
|
'src/third_party/rust-toolchain': {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'chromium-browser-clang',
|
|
'objects': [
|
|
{
|
|
'object_name': 'Linux_x64/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '560c02da5300f40441992ef639d83cee96cae3584c3d398704fdb2f02e475bbf',
|
|
'size_bytes': 152024840,
|
|
'generation': 1722663990116408,
|
|
'condition': 'host_os == "linux" and non_git_source',
|
|
},
|
|
{
|
|
'object_name': 'Mac/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '9f39154b4337438fd170e729ed2ae4c978b22f11708d683c28265bd096df17a5',
|
|
'size_bytes': 144459260,
|
|
'generation': 1722663991651609,
|
|
'condition': 'host_os == "mac" and host_cpu == "x64"',
|
|
},
|
|
{
|
|
'object_name': 'Mac_arm64/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '4b89cf125ffa39e8fc74f01ec3beeb632fd3069478d8c6cc4fcae506b4917151',
|
|
'size_bytes': 135571272,
|
|
'generation': 1722663993205996,
|
|
'condition': 'host_os == "mac" and host_cpu == "arm64"',
|
|
},
|
|
{
|
|
'object_name': 'Win/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '3f6a1a87695902062a6575632552b9f2cbbbcda1907fe3232f49b8ea29baecf5',
|
|
'size_bytes': 208844028,
|
|
'generation': 1722663994756449,
|
|
'condition': 'host_os == "win"',
|
|
},
|
|
],
|
|
},
|
|
}
|
|
'''
|
|
destination_deps = '''
|
|
deps = {
|
|
'third_party/rust-toolchain': {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'chromium-browser-clang',
|
|
'objects': [
|
|
{
|
|
'object_name': 'Linux_x64/rust-toolchain-0000000000000000000000000000000000000000-0.tar.xz',
|
|
'sha256sum': '0000000000000000000000000000000000000000000000000000000000000000',
|
|
'size_bytes': 123,
|
|
'generation': 987,
|
|
'condition': 'other condition',
|
|
},
|
|
],
|
|
},
|
|
}
|
|
'''
|
|
expected_deps = '''
|
|
deps = {
|
|
'third_party/rust-toolchain': {
|
|
'dep_type': 'gcs',
|
|
'bucket': 'chromium-browser-clang',
|
|
'objects': [
|
|
{
|
|
'object_name': 'Linux_x64/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '560c02da5300f40441992ef639d83cee96cae3584c3d398704fdb2f02e475bbf',
|
|
'size_bytes': 152024840,
|
|
'generation': 1722663990116408,
|
|
'condition': 'host_os == "linux" and non_git_source',
|
|
},
|
|
{
|
|
'object_name': 'Mac/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '9f39154b4337438fd170e729ed2ae4c978b22f11708d683c28265bd096df17a5',
|
|
'size_bytes': 144459260,
|
|
'generation': 1722663991651609,
|
|
'condition': 'host_os == "mac" and host_cpu == "x64"',
|
|
},
|
|
{
|
|
'object_name': 'Mac_arm64/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '4b89cf125ffa39e8fc74f01ec3beeb632fd3069478d8c6cc4fcae506b4917151',
|
|
'size_bytes': 135571272,
|
|
'generation': 1722663993205996,
|
|
'condition': 'host_os == "mac" and host_cpu == "arm64"',
|
|
},
|
|
{
|
|
'object_name': 'Win/rust-toolchain-595316b4006932405a63862d8fe65f71a6356293-3-llvmorg-20-init-1009-g7088a5ed.tar.xz',
|
|
'sha256sum': '3f6a1a87695902062a6575632552b9f2cbbbcda1907fe3232f49b8ea29baecf5',
|
|
'size_bytes': 208844028,
|
|
'generation': 1722663994756449,
|
|
'condition': 'host_os == "win"',
|
|
},
|
|
],
|
|
},
|
|
}
|
|
'''
|
|
result = roll_downstream_gcs_deps.copy_packages(
|
|
source_deps, destination_deps, ['src/third_party/rust-toolchain'],
|
|
['third_party/rust-toolchain'])
|
|
self.assertEqual(result, expected_deps)
|
|
|
|
with self.assertRaises(Exception):
|
|
# no destination_package match, so expect a failure.
|
|
roll_downstream_gcs_deps.copy_packages(
|
|
source_deps, destination_deps,
|
|
['src/third_party/rust-toolchain'],
|
|
['src/third_party/rust-toolchain'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
level = logging.DEBUG if '-v' in sys.argv else logging.FATAL
|
|
logging.basicConfig(level=level,
|
|
format='%(asctime).19s %(levelname)s %(filename)s:'
|
|
'%(lineno)s %(message)s')
|
|
unittest.main()
|