xref: /aosp_15_r20/external/angle/build/fuchsia/update_sdk_test.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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