1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/env vpython3 2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2022 The Chromium Authors 3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker 6*8975f5c5SAndroid Build Coastguard Workerimport argparse 7*8975f5c5SAndroid Build Coastguard Workerimport os 8*8975f5c5SAndroid Build Coastguard Workerimport sys 9*8975f5c5SAndroid Build Coastguard Workerimport unittest 10*8975f5c5SAndroid Build Coastguard Workerfrom unittest import mock 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Workerfrom parameterized import parameterized 13*8975f5c5SAndroid Build Coastguard Workerfrom subprocess import CompletedProcess 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Workerfrom update_sdk import _GetHostArch 16*8975f5c5SAndroid Build Coastguard Workerfrom update_sdk import GetSDKOverrideGCSPath 17*8975f5c5SAndroid Build Coastguard Workerfrom update_sdk import main as update_sdk_main 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Workersys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 20*8975f5c5SAndroid Build Coastguard Worker 'test'))) 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Workerfrom common import SDK_ROOT 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Worker 25*8975f5c5SAndroid Build Coastguard Worker@mock.patch('platform.machine') 26*8975f5c5SAndroid Build Coastguard Workerclass TestGetHostArch(unittest.TestCase): 27*8975f5c5SAndroid Build Coastguard Worker @parameterized.expand([('x86_64', 'amd64'), ('AMD64', 'amd64'), 28*8975f5c5SAndroid Build Coastguard Worker ('aarch64', 'arm64')]) 29*8975f5c5SAndroid Build Coastguard Worker def testSupportedArchs(self, mock_machine, arch, expected): 30*8975f5c5SAndroid Build Coastguard Worker mock_machine.return_value = arch 31*8975f5c5SAndroid Build Coastguard Worker self.assertEqual(_GetHostArch(), expected) 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker def testUnsupportedArch(self, mock_machine): 34*8975f5c5SAndroid Build Coastguard Worker mock_machine.return_value = 'bad_arch' 35*8975f5c5SAndroid Build Coastguard Worker with self.assertRaises(Exception): 36*8975f5c5SAndroid Build Coastguard Worker _GetHostArch() 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker 39*8975f5c5SAndroid Build Coastguard Worker@mock.patch('builtins.open') 40*8975f5c5SAndroid Build Coastguard Worker@mock.patch('os.path.isfile') 41*8975f5c5SAndroid Build Coastguard Workerclass TestGetSDKOverrideGCSPath(unittest.TestCase): 42*8975f5c5SAndroid Build Coastguard Worker def testDefaultPath(self, mock_isfile, mock_open): 43*8975f5c5SAndroid Build Coastguard Worker mock_isfile.return_value = False 44*8975f5c5SAndroid Build Coastguard Worker 45*8975f5c5SAndroid Build Coastguard Worker with mock.patch('os.path.dirname', return_value='./'): 46*8975f5c5SAndroid Build Coastguard Worker GetSDKOverrideGCSPath() 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker mock_isfile.assert_called_with('./sdk_override.txt') 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker def testRead(self, mock_isfile, mock_open): 51*8975f5c5SAndroid Build Coastguard Worker fake_path = '\n\ngs://fuchsia-artifacts/development/abc123/sdk\n\n' 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker mock_isfile.return_value = True 54*8975f5c5SAndroid Build Coastguard Worker mock_open.side_effect = mock.mock_open(read_data=fake_path) 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker actual = GetSDKOverrideGCSPath() 57*8975f5c5SAndroid Build Coastguard Worker self.assertEqual(actual, 'gs://fuchsia-artifacts/development/abc123/sdk') 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker@mock.patch('update_sdk._GetHostArch', return_value='amd64') 61*8975f5c5SAndroid Build Coastguard Worker@mock.patch('update_sdk.get_host_os', return_value='linux') 62*8975f5c5SAndroid Build Coastguard Worker@mock.patch('subprocess.run', 63*8975f5c5SAndroid Build Coastguard Worker return_value=CompletedProcess(args=['/bin'], returncode=0)) 64*8975f5c5SAndroid Build Coastguard Worker@mock.patch('os.utime', return_value=None) 65*8975f5c5SAndroid Build Coastguard Worker@mock.patch('update_sdk.make_clean_directory') 66*8975f5c5SAndroid Build Coastguard Worker@mock.patch('update_sdk.DownloadAndUnpackFromCloudStorage') 67*8975f5c5SAndroid Build Coastguard Workerclass TestGetTarballPath(unittest.TestCase): 68*8975f5c5SAndroid Build Coastguard Worker 69*8975f5c5SAndroid Build Coastguard Worker def setUp(self): 70*8975f5c5SAndroid Build Coastguard Worker os.environ['FUCHSIA_SDK_OVERRIDE'] = 'gs://bucket/sdk' 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker def tearDown(self): 73*8975f5c5SAndroid Build Coastguard Worker del os.environ['FUCHSIA_SDK_OVERRIDE'] 74*8975f5c5SAndroid Build Coastguard Worker 75*8975f5c5SAndroid Build Coastguard Worker @mock.patch('argparse.ArgumentParser.parse_args', 76*8975f5c5SAndroid Build Coastguard Worker return_value=argparse.Namespace(version='1.1.1.1', 77*8975f5c5SAndroid Build Coastguard Worker verbose=False, 78*8975f5c5SAndroid Build Coastguard Worker file='core')) 79*8975f5c5SAndroid Build Coastguard Worker def testGetTarballPath(self, mock_arg, mock_download, *_): 80*8975f5c5SAndroid Build Coastguard Worker update_sdk_main() 81*8975f5c5SAndroid Build Coastguard Worker mock_download.assert_called_with('gs://bucket/sdk/linux-amd64/core.tar.gz', 82*8975f5c5SAndroid Build Coastguard Worker SDK_ROOT) 83*8975f5c5SAndroid Build Coastguard Worker 84*8975f5c5SAndroid Build Coastguard Worker @mock.patch('argparse.ArgumentParser.parse_args', 85*8975f5c5SAndroid Build Coastguard Worker return_value=argparse.Namespace(version='1.1.1.1', 86*8975f5c5SAndroid Build Coastguard Worker verbose=False, 87*8975f5c5SAndroid Build Coastguard Worker file='google')) 88*8975f5c5SAndroid Build Coastguard Worker def testOverrideFile(self, mock_arg, mock_download, *_): 89*8975f5c5SAndroid Build Coastguard Worker update_sdk_main() 90*8975f5c5SAndroid Build Coastguard Worker mock_download.assert_called_with( 91*8975f5c5SAndroid Build Coastguard Worker 'gs://bucket/sdk/linux-amd64/google.tar.gz', SDK_ROOT) 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Worker 94*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__': 95*8975f5c5SAndroid Build Coastguard Worker unittest.main() 96