1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env vpython3 2*6777b538SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors 3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 5*6777b538SAndroid Build Coastguard Worker 6*6777b538SAndroid Build Coastguard Workerimport logging 7*6777b538SAndroid Build Coastguard Workerimport os 8*6777b538SAndroid Build Coastguard Workerimport subprocess 9*6777b538SAndroid Build Coastguard Workerimport sys 10*6777b538SAndroid Build Coastguard Workerimport tempfile 11*6777b538SAndroid Build Coastguard Workerimport time 12*6777b538SAndroid Build Coastguard Workerimport unittest 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Workerimport mock 15*6777b538SAndroid Build Coastguard Workerfrom parameterized import parameterized 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Workerimport test_runner 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Workerclass TestRunnerTest(unittest.TestCase): 21*6777b538SAndroid Build Coastguard Worker def setUp(self): 22*6777b538SAndroid Build Coastguard Worker logging.disable(logging.CRITICAL) 23*6777b538SAndroid Build Coastguard Worker time.sleep = mock.Mock() 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker def tearDown(self): 26*6777b538SAndroid Build Coastguard Worker logging.disable(logging.NOTSET) 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 29*6777b538SAndroid Build Coastguard Worker 'dirname', 30*6777b538SAndroid Build Coastguard Worker return_value='chromium/src/build/lacros') 31*6777b538SAndroid Build Coastguard Worker def test_expand_filter_file(self, _): 32*6777b538SAndroid Build Coastguard Worker args = ['--some_flag="flag"'] 33*6777b538SAndroid Build Coastguard Worker test_runner._ExpandFilterFileIfNeeded('browser_tests', args) 34*6777b538SAndroid Build Coastguard Worker self.assertTrue(args[1].endswith( 35*6777b538SAndroid Build Coastguard Worker 'chromium/src/' 36*6777b538SAndroid Build Coastguard Worker 'testing/buildbot/filters/linux-lacros.browser_tests.filter')) 37*6777b538SAndroid Build Coastguard Worker self.assertTrue(args[1].startswith('--test-launcher-filter-file=')) 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker args = ['--some_flag="flag"'] 40*6777b538SAndroid Build Coastguard Worker test_runner._ExpandFilterFileIfNeeded('random_tests', args) 41*6777b538SAndroid Build Coastguard Worker self.assertEqual(len(args), 1) 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker args = ['--test-launcher-filter-file=new/filter'] 44*6777b538SAndroid Build Coastguard Worker test_runner._ExpandFilterFileIfNeeded('browser_tests', args) 45*6777b538SAndroid Build Coastguard Worker self.assertEqual(len(args), 1) 46*6777b538SAndroid Build Coastguard Worker self.assertTrue(args[0].endswith('new/filter')) 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker @parameterized.expand([ 49*6777b538SAndroid Build Coastguard Worker 'url_unittests', 50*6777b538SAndroid Build Coastguard Worker './url_unittests', 51*6777b538SAndroid Build Coastguard Worker 'out/release/url_unittests', 52*6777b538SAndroid Build Coastguard Worker './out/release/url_unittests', 53*6777b538SAndroid Build Coastguard Worker ]) 54*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 55*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 56*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 57*6777b538SAndroid Build Coastguard Worker # Tests that the test runner doesn't attempt to download ash-chrome if not 58*6777b538SAndroid Build Coastguard Worker # required. 59*6777b538SAndroid Build Coastguard Worker def test_do_not_require_ash_chrome(self, command, mock_popen, mock_download, 60*6777b538SAndroid Build Coastguard Worker _): 61*6777b538SAndroid Build Coastguard Worker args = ['script_name', 'test', command] 62*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 63*6777b538SAndroid Build Coastguard Worker test_runner.Main() 64*6777b538SAndroid Build Coastguard Worker self.assertEqual(1, mock_popen.call_count) 65*6777b538SAndroid Build Coastguard Worker mock_popen.assert_called_with([command]) 66*6777b538SAndroid Build Coastguard Worker self.assertFalse(mock_download.called) 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker @parameterized.expand([ 69*6777b538SAndroid Build Coastguard Worker 'browser_tests', 'components_browsertests', 'content_browsertests', 70*6777b538SAndroid Build Coastguard Worker 'lacros_chrome_browsertests', 71*6777b538SAndroid Build Coastguard Worker 'browser_tests --enable-pixel-output-in-tests' 72*6777b538SAndroid Build Coastguard Worker ]) 73*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os, 74*6777b538SAndroid Build Coastguard Worker 'listdir', 75*6777b538SAndroid Build Coastguard Worker return_value=['wayland-exo', 'wayland-exo.lock']) 76*6777b538SAndroid Build Coastguard Worker @mock.patch.object(tempfile, 77*6777b538SAndroid Build Coastguard Worker 'mkdtemp', 78*6777b538SAndroid Build Coastguard Worker side_effect=['/tmp/xdg', '/tmp/ash-data', '/tmp/unique']) 79*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.environ, 'copy', side_effect=[{}, {}]) 80*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 81*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 82*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'abspath', return_value='/a/b/filter') 83*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, 84*6777b538SAndroid Build Coastguard Worker '_GetLatestVersionOfAshChrome', 85*6777b538SAndroid Build Coastguard Worker return_value='793554') 86*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 87*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 88*6777b538SAndroid Build Coastguard Worker # Tests that the test runner downloads and spawns ash-chrome if ash-chrome is 89*6777b538SAndroid Build Coastguard Worker # required. 90*6777b538SAndroid Build Coastguard Worker def test_require_ash_chrome(self, command, mock_popen, mock_download, *_): 91*6777b538SAndroid Build Coastguard Worker command_parts = command.split() 92*6777b538SAndroid Build Coastguard Worker args = ['script_name', 'test'] 93*6777b538SAndroid Build Coastguard Worker args.extend(command_parts) 94*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 95*6777b538SAndroid Build Coastguard Worker test_runner.Main() 96*6777b538SAndroid Build Coastguard Worker mock_download.assert_called_with('793554') 97*6777b538SAndroid Build Coastguard Worker self.assertEqual(2, mock_popen.call_count) 98*6777b538SAndroid Build Coastguard Worker 99*6777b538SAndroid Build Coastguard Worker ash_chrome_args = mock_popen.call_args_list[0][0][0] 100*6777b538SAndroid Build Coastguard Worker self.assertTrue(ash_chrome_args[0].endswith( 101*6777b538SAndroid Build Coastguard Worker 'build/lacros/prebuilt_ash_chrome/793554/test_ash_chrome')) 102*6777b538SAndroid Build Coastguard Worker expected_ash_chrome_args = [ 103*6777b538SAndroid Build Coastguard Worker '--user-data-dir=/tmp/ash-data', 104*6777b538SAndroid Build Coastguard Worker '--enable-wayland-server', 105*6777b538SAndroid Build Coastguard Worker '--no-startup-window', 106*6777b538SAndroid Build Coastguard Worker '--disable-input-event-activation-protection', 107*6777b538SAndroid Build Coastguard Worker '--disable-lacros-keep-alive', 108*6777b538SAndroid Build Coastguard Worker '--disable-login-lacros-opening', 109*6777b538SAndroid Build Coastguard Worker '--enable-field-trial-config', 110*6777b538SAndroid Build Coastguard Worker '--enable-logging=stderr', 111*6777b538SAndroid Build Coastguard Worker '--enable-features=LacrosSupport,LacrosPrimary,LacrosOnly', 112*6777b538SAndroid Build Coastguard Worker '--ash-ready-file-path=/tmp/ash-data/ash_ready.txt', 113*6777b538SAndroid Build Coastguard Worker '--wayland-server-socket=wayland-exo', 114*6777b538SAndroid Build Coastguard Worker ] 115*6777b538SAndroid Build Coastguard Worker if '--enable-pixel-output-in-tests' not in command_parts: 116*6777b538SAndroid Build Coastguard Worker expected_ash_chrome_args.append('--disable-gl-drawing-for-tests') 117*6777b538SAndroid Build Coastguard Worker if command == 'lacros_chrome_browsertests': 118*6777b538SAndroid Build Coastguard Worker expected_ash_chrome_args.append( 119*6777b538SAndroid Build Coastguard Worker '--lacros-mojo-socket-for-testing=/tmp/ash-data/lacros.sock') 120*6777b538SAndroid Build Coastguard Worker self.assertListEqual(expected_ash_chrome_args, ash_chrome_args[1:]) 121*6777b538SAndroid Build Coastguard Worker ash_chrome_env = mock_popen.call_args_list[0][1].get('env', {}) 122*6777b538SAndroid Build Coastguard Worker self.assertDictEqual({'XDG_RUNTIME_DIR': '/tmp/xdg'}, ash_chrome_env) 123*6777b538SAndroid Build Coastguard Worker 124*6777b538SAndroid Build Coastguard Worker test_args = mock_popen.call_args_list[1][0][0] 125*6777b538SAndroid Build Coastguard Worker if command == 'lacros_chrome_browsertests': 126*6777b538SAndroid Build Coastguard Worker self.assertListEqual([ 127*6777b538SAndroid Build Coastguard Worker command, '--test-launcher-filter-file=/a/b/filter', 128*6777b538SAndroid Build Coastguard Worker '--lacros-mojo-socket-for-testing=/tmp/ash-data/lacros.sock', 129*6777b538SAndroid Build Coastguard Worker '--ash-chrome-path=' + ash_chrome_args[0], 130*6777b538SAndroid Build Coastguard Worker '--unique-ash-dir=/tmp/unique' 131*6777b538SAndroid Build Coastguard Worker ], test_args) 132*6777b538SAndroid Build Coastguard Worker else: 133*6777b538SAndroid Build Coastguard Worker self.assertListEqual(test_args[:len(command_parts)], command_parts) 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Worker test_env = mock_popen.call_args_list[1][1].get('env', {}) 136*6777b538SAndroid Build Coastguard Worker self.assertDictEqual( 137*6777b538SAndroid Build Coastguard Worker { 138*6777b538SAndroid Build Coastguard Worker 'WAYLAND_DISPLAY': 'wayland-exo', 139*6777b538SAndroid Build Coastguard Worker 'XDG_RUNTIME_DIR': '/tmp/xdg', 140*6777b538SAndroid Build Coastguard Worker 'EGL_PLATFORM': 'surfaceless' 141*6777b538SAndroid Build Coastguard Worker }, test_env) 142*6777b538SAndroid Build Coastguard Worker 143*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os, 144*6777b538SAndroid Build Coastguard Worker 'listdir', 145*6777b538SAndroid Build Coastguard Worker return_value=['wayland-exo', 'wayland-exo.lock']) 146*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 147*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 148*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, 149*6777b538SAndroid Build Coastguard Worker '_GetLatestVersionOfAshChrome', 150*6777b538SAndroid Build Coastguard Worker return_value='793554') 151*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 152*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 153*6777b538SAndroid Build Coastguard Worker # Tests that when a ash-chrome version is specified, that version is used 154*6777b538SAndroid Build Coastguard Worker # instead of the latest one. 155*6777b538SAndroid Build Coastguard Worker def test_specify_ash_chrome_version(self, mock_popen, mock_download, *_): 156*6777b538SAndroid Build Coastguard Worker args = [ 157*6777b538SAndroid Build Coastguard Worker 'script_name', 'test', 'browser_tests', '--ash-chrome-version', '781122' 158*6777b538SAndroid Build Coastguard Worker ] 159*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 160*6777b538SAndroid Build Coastguard Worker test_runner.Main() 161*6777b538SAndroid Build Coastguard Worker mock_download.assert_called_with('781122') 162*6777b538SAndroid Build Coastguard Worker 163*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os, 164*6777b538SAndroid Build Coastguard Worker 'listdir', 165*6777b538SAndroid Build Coastguard Worker return_value=['wayland-exo', 'wayland-exo.lock']) 166*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 167*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 168*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 169*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 170*6777b538SAndroid Build Coastguard Worker # Tests that if a ash-chrome version is specified, uses ash-chrome to run 171*6777b538SAndroid Build Coastguard Worker # tests anyway even if |_TARGETS_REQUIRE_ASH_CHROME| indicates an ash-chrome 172*6777b538SAndroid Build Coastguard Worker # is not required. 173*6777b538SAndroid Build Coastguard Worker def test_overrides_do_not_require_ash_chrome(self, mock_popen, mock_download, 174*6777b538SAndroid Build Coastguard Worker *_): 175*6777b538SAndroid Build Coastguard Worker args = [ 176*6777b538SAndroid Build Coastguard Worker 'script_name', 'test', './url_unittests', '--ash-chrome-version', 177*6777b538SAndroid Build Coastguard Worker '793554' 178*6777b538SAndroid Build Coastguard Worker ] 179*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 180*6777b538SAndroid Build Coastguard Worker test_runner.Main() 181*6777b538SAndroid Build Coastguard Worker mock_download.assert_called_with('793554') 182*6777b538SAndroid Build Coastguard Worker self.assertEqual(2, mock_popen.call_count) 183*6777b538SAndroid Build Coastguard Worker 184*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os, 185*6777b538SAndroid Build Coastguard Worker 'listdir', 186*6777b538SAndroid Build Coastguard Worker return_value=['wayland-exo', 'wayland-exo.lock']) 187*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 188*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 189*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_GetLatestVersionOfAshChrome') 190*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 191*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 192*6777b538SAndroid Build Coastguard Worker # Tests that when an ash-chrome path is specified, the test runner doesn't try 193*6777b538SAndroid Build Coastguard Worker # to download prebuilt ash-chrome. 194*6777b538SAndroid Build Coastguard Worker def test_specify_ash_chrome_path(self, mock_popen, mock_download, 195*6777b538SAndroid Build Coastguard Worker mock_get_latest_version, *_): 196*6777b538SAndroid Build Coastguard Worker args = [ 197*6777b538SAndroid Build Coastguard Worker 'script_name', 198*6777b538SAndroid Build Coastguard Worker 'test', 199*6777b538SAndroid Build Coastguard Worker 'browser_tests', 200*6777b538SAndroid Build Coastguard Worker '--ash-chrome-path', 201*6777b538SAndroid Build Coastguard Worker '/ash/test_ash_chrome', 202*6777b538SAndroid Build Coastguard Worker ] 203*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 204*6777b538SAndroid Build Coastguard Worker test_runner.Main() 205*6777b538SAndroid Build Coastguard Worker self.assertFalse(mock_get_latest_version.called) 206*6777b538SAndroid Build Coastguard Worker self.assertFalse(mock_download.called) 207*6777b538SAndroid Build Coastguard Worker 208*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 209*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 210*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 211*6777b538SAndroid Build Coastguard Worker # Tests that arguments not known to the test runner are forwarded to the 212*6777b538SAndroid Build Coastguard Worker # command that invokes tests. 213*6777b538SAndroid Build Coastguard Worker def test_command_arguments(self, mock_popen, mock_download, _): 214*6777b538SAndroid Build Coastguard Worker args = [ 215*6777b538SAndroid Build Coastguard Worker 'script_name', 'test', './url_unittests', '--gtest_filter=Suite.Test' 216*6777b538SAndroid Build Coastguard Worker ] 217*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 218*6777b538SAndroid Build Coastguard Worker test_runner.Main() 219*6777b538SAndroid Build Coastguard Worker mock_popen.assert_called_with( 220*6777b538SAndroid Build Coastguard Worker ['./url_unittests', '--gtest_filter=Suite.Test']) 221*6777b538SAndroid Build Coastguard Worker self.assertFalse(mock_download.called) 222*6777b538SAndroid Build Coastguard Worker 223*6777b538SAndroid Build Coastguard Worker @mock.patch.dict(os.environ, {'ASH_WRAPPER': 'gdb --args'}, clear=False) 224*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os, 225*6777b538SAndroid Build Coastguard Worker 'listdir', 226*6777b538SAndroid Build Coastguard Worker return_value=['wayland-exo', 'wayland-exo.lock']) 227*6777b538SAndroid Build Coastguard Worker @mock.patch.object(tempfile, 228*6777b538SAndroid Build Coastguard Worker 'mkdtemp', 229*6777b538SAndroid Build Coastguard Worker side_effect=['/tmp/xdg', '/tmp/ash-data', '/tmp/unique']) 230*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.environ, 'copy', side_effect=[{}, {}]) 231*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 232*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 233*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, 234*6777b538SAndroid Build Coastguard Worker '_GetLatestVersionOfAshChrome', 235*6777b538SAndroid Build Coastguard Worker return_value='793554') 236*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_DownloadAshChromeIfNecessary') 237*6777b538SAndroid Build Coastguard Worker @mock.patch.object(subprocess, 'Popen', return_value=mock.Mock()) 238*6777b538SAndroid Build Coastguard Worker # Tests that, when the ASH_WRAPPER environment variable is set, it forwards 239*6777b538SAndroid Build Coastguard Worker # the commands to the invocation of ash. 240*6777b538SAndroid Build Coastguard Worker def test_ash_wrapper(self, mock_popen, *_): 241*6777b538SAndroid Build Coastguard Worker args = [ 242*6777b538SAndroid Build Coastguard Worker 'script_name', 'test', './browser_tests', '--gtest_filter=Suite.Test' 243*6777b538SAndroid Build Coastguard Worker ] 244*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 245*6777b538SAndroid Build Coastguard Worker test_runner.Main() 246*6777b538SAndroid Build Coastguard Worker ash_args = mock_popen.call_args_list[0][0][0] 247*6777b538SAndroid Build Coastguard Worker self.assertTrue(ash_args[2].endswith('test_ash_chrome')) 248*6777b538SAndroid Build Coastguard Worker self.assertEqual(['gdb', '--args'], ash_args[:2]) 249*6777b538SAndroid Build Coastguard Worker 250*6777b538SAndroid Build Coastguard Worker 251*6777b538SAndroid Build Coastguard Worker # Test when ash is newer, test runner skips running tests and returns 0. 252*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 253*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile', return_value=True) 254*6777b538SAndroid Build Coastguard Worker @mock.patch.object(test_runner, '_FindLacrosMajorVersion', return_value=91) 255*6777b538SAndroid Build Coastguard Worker def test_version_skew_ash_newer(self, *_): 256*6777b538SAndroid Build Coastguard Worker args = [ 257*6777b538SAndroid Build Coastguard Worker 'script_name', 'test', './browser_tests', '--gtest_filter=Suite.Test', 258*6777b538SAndroid Build Coastguard Worker '--ash-chrome-path-override=\ 259*6777b538SAndroid Build Coastguard Workerlacros_version_skew_tests_v92.0.100.0/test_ash_chrome' 260*6777b538SAndroid Build Coastguard Worker ] 261*6777b538SAndroid Build Coastguard Worker with mock.patch.object(sys, 'argv', args): 262*6777b538SAndroid Build Coastguard Worker self.assertEqual(test_runner.Main(), 0) 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 265*6777b538SAndroid Build Coastguard Worker def test_lacros_version_from_chrome_version(self, *_): 266*6777b538SAndroid Build Coastguard Worker version_data = '''\ 267*6777b538SAndroid Build Coastguard WorkerMAJOR=95 268*6777b538SAndroid Build Coastguard WorkerMINOR=0 269*6777b538SAndroid Build Coastguard WorkerBUILD=4615 270*6777b538SAndroid Build Coastguard WorkerPATCH=0\ 271*6777b538SAndroid Build Coastguard Worker''' 272*6777b538SAndroid Build Coastguard Worker open_lib = '__builtin__.open' 273*6777b538SAndroid Build Coastguard Worker if sys.version_info[0] >= 3: 274*6777b538SAndroid Build Coastguard Worker open_lib = 'builtins.open' 275*6777b538SAndroid Build Coastguard Worker with mock.patch(open_lib, 276*6777b538SAndroid Build Coastguard Worker mock.mock_open(read_data=version_data)) as mock_file: 277*6777b538SAndroid Build Coastguard Worker version = test_runner._FindLacrosMajorVersion() 278*6777b538SAndroid Build Coastguard Worker self.assertEqual(95, version) 279*6777b538SAndroid Build Coastguard Worker 280*6777b538SAndroid Build Coastguard Worker @mock.patch.object(os.path, 'exists', return_value=True) 281*6777b538SAndroid Build Coastguard Worker def test_lacros_version_from_metadata(self, *_): 282*6777b538SAndroid Build Coastguard Worker metadata_json = ''' 283*6777b538SAndroid Build Coastguard Worker{ 284*6777b538SAndroid Build Coastguard Worker "content": { 285*6777b538SAndroid Build Coastguard Worker "version": "92.1.4389.2" 286*6777b538SAndroid Build Coastguard Worker }, 287*6777b538SAndroid Build Coastguard Worker "metadata_version": 1 288*6777b538SAndroid Build Coastguard Worker} 289*6777b538SAndroid Build Coastguard Worker ''' 290*6777b538SAndroid Build Coastguard Worker open_lib = '__builtin__.open' 291*6777b538SAndroid Build Coastguard Worker if sys.version_info[0] >= 3: 292*6777b538SAndroid Build Coastguard Worker open_lib = 'builtins.open' 293*6777b538SAndroid Build Coastguard Worker with mock.patch(open_lib, 294*6777b538SAndroid Build Coastguard Worker mock.mock_open(read_data=metadata_json)) as mock_file: 295*6777b538SAndroid Build Coastguard Worker version = test_runner._FindLacrosMajorVersionFromMetadata() 296*6777b538SAndroid Build Coastguard Worker self.assertEqual(92, version) 297*6777b538SAndroid Build Coastguard Worker mock_file.assert_called_with('metadata.json', 'r') 298*6777b538SAndroid Build Coastguard Worker 299*6777b538SAndroid Build Coastguard Worker 300*6777b538SAndroid Build Coastguard Workerif __name__ == '__main__': 301*6777b538SAndroid Build Coastguard Worker unittest.main() 302