def test_parse_args_from_json(self): json_args = { 'test_cases': ['test1'], 'restart': 'true', 'xcode_parallelization': True, 'shards': 2 } cmd = [ '--shards', '1', '--platform', 'iPhone X', '--version', '13.2.2', '--args-json', json.dumps(json_args), # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ] # shards should be 2, since json arg takes precedence over cmd line runner = run.Runner() runner.parse_args(cmd) # Empty array self.assertEquals(len(runner.args.env_var), 0) self.assertTrue(runner.args.xcode_parallelization) self.assertTrue(runner.args.restart) self.assertEquals(runner.args.shards, 2)
def test_merge_test_cases(self): """Tests test cases are merges in --test-cases and --args-json.""" cmd = [ '--app', './foo-Runner.app', '--xcode-path', 'some/Xcode.app', '--gtest_filter', 'TestClass3.TestCase4:TestClass4.TestCase5', '--test-cases', 'TestClass1.TestCase2', '--args-json', '{"test_cases": ["TestClass2.TestCase3"]}', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir', ] runner = run.Runner() runner.parse_args(cmd) runner.resolve_test_cases() expected_test_cases = [ 'TestClass1.TestCase2', 'TestClass3.TestCase4', 'TestClass4.TestCase5', 'TestClass2.TestCase3' ] self.assertEqual(runner.args.test_cases, expected_test_cases)
def test_parser_error_sharding_environment(self, _): cmd = [ '--app', './foo-Runner.app', '--xcode-path', 'some/Xcode.app', '--test-cases', 'SomeClass.SomeTestCase', '--gtest_filter', 'TestClass1.TestCase2:TestClass2.TestCase3', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir', ] runner = run.Runner() with self.assertRaises(SystemExit) as ctx: runner.parse_args(cmd) self.assertTrue( re.match( 'Specifying test cases is not supported in multiple swarming ' 'shards environment.', ctx.message)) self.assertEqual(ctx.exception.code, 2)
def test_parse_args_ok(self): cmd = [ '--app', './foo-Runner.app', '--host-app', './bar.app', '--runtime-cache-prefix', 'some/dir', '--xcode-path', 'some/Xcode.app', '--gtest_repeat', '2', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir', ] runner = run.Runner() runner.parse_args(cmd) self.assertTrue(runner.args.app == './foo-Runner.app') self.assertTrue(runner.args.runtime_cache_prefix == 'some/dir') self.assertTrue(runner.args.xcode_path == 'some/Xcode.app') self.assertTrue(runner.args.gtest_repeat == 2)
def setUp(self): super(RunnerInstallXcodeTest, self).setUp() self.runner = run.Runner() self.mock(self.runner, 'parse_args', lambda _: None) self.runner.args = mock.MagicMock() # Make run() choose xcodebuild_runner.SimulatorParallelTestRunner as tr. self.runner.args.xcode_parallelization = True # Used in run.Runner.install_xcode(). self.runner.args.mac_toolchain_cmd = 'mac_toolchain' self.runner.args.xcode_path = 'test/xcode/path' self.runner.args.xcode_build_version = 'testXcodeVersion' self.runner.args.runtime_cache_prefix = 'test/runtime-ios-' self.runner.args.version = '14.4'
def test_parse_args_ok(self): cmd = [ '--app', './foo-Runner.app', '--host-app', './bar.app', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ] runner = run.Runner() runner.parse_args(cmd) self.assertTrue(runner.args.app == './foo-Runner.app')
def test_parse_args_xcodebuild_device_runner_requirements(self): """ xcodebuild_device_runner requires both platform and version """ test_cases = [ { 'error': 2, 'cmd': [ '--xcodebuild-device-runner', '--platform', 'iPhone X', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ] }, { 'error': 2, 'cmd': [ '--xcodebuild-device-runner', '--version', '13.2.2', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ] } ] runner = run.Runner() for test_case in test_cases: with self.assertRaises(SystemExit) as ctx: runner.parse_args(test_case['cmd']) self.assertTrue( re.match( '--xcodebuild-device-runner also requires ' 'both *', ctx.message)) self.assertEqual(ctx.exception.code, test_case['error'])
def setUp(self): self.src_dir = tempfile.mkdtemp() self.dest_dir = tempfile.mkdtemp() self.secrets_dir = tempfile.mkdtemp() self.src_file = os.path.join(self.src_dir, "template.j2") self.dest_file = os.path.join(self.dest_dir, "output.cfg") with open(self.src_file, "w") as fd: fd.write(TEMPLATE) with open(os.path.join(self.secrets_dir, "foo"), "w") as fd: fd.write("FOO") with open(os.path.join(self.secrets_dir, "baz"), "w") as fd: fd.write("NOT FINAL BAZ") os.environ["JINJA_VAR_bar"] = "BAR" os.environ["JINJA_VAR_baz"] = "BAZ" self.runner = run.Runner(self.src_file, self.dest_file, self.secrets_dir, False)
def setUp(self): self.src_dir = tempfile.mkdtemp() self.dest_dir = tempfile.mkdtemp() self.secrets_dir = tempfile.mkdtemp() self.src_file = os.path.join(self.src_dir, 'template.j2') self.dest_file = os.path.join(self.dest_dir, 'output.cfg') with open(self.src_file, 'w') as fd: fd.write(TEMPLATE) with open(os.path.join(self.secrets_dir, 'foo'), 'w') as fd: fd.write('FOO') with open(os.path.join(self.secrets_dir, 'baz'), 'w') as fd: fd.write('NOT FINAL BAZ') os.environ['JINJA_VAR_bar'] = 'BAR' os.environ['JINJA_VAR_baz'] = 'BAZ' self.runner = run.Runner(self.src_file, self.dest_file, self.secrets_dir, False)
def test_gtest_filter_arg(self): cmd = [ '--app', './foo-Runner.app', '--xcode-path', 'some/Xcode.app', '--gtest_filter', 'TestClass1.TestCase2:TestClass2.TestCase3', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir', ] runner = run.Runner() runner.parse_args(cmd) runner.resolve_test_cases() expected_test_cases = ['TestClass1.TestCase2', 'TestClass2.TestCase3'] self.assertEqual(runner.args.test_cases, expected_test_cases)
def test_parse_args_iossim_platform_version(self): """ iossim, platforma and version should all be set. missing iossim """ test_cases = [ { 'error': 2, 'cmd': [ '--platform', 'iPhone X', '--version', '13.2.2', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ], }, { 'error': 2, 'cmd': [ '--iossim', 'path/to/iossim', '--version', '13.2.2', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ], }, { 'error': 2, 'cmd': [ '--iossim', 'path/to/iossim', '--platform', 'iPhone X', # Required '--xcode-build-version', '123abc', '--out-dir', 'some/dir' ], }, ] runner = run.Runner() for test_case in test_cases: with self.assertRaises(SystemExit) as ctx: runner.parse_args(test_case['cmd']) self.assertTrue( re.match('must specify all or none of *', ctx.message)) self.assertEqual(ctx.exception.code, test_case['error'])
#!/usr/bin/python2 import sys from os.path import join import qdom, run, apps from basedirs import get_default_config config = get_default_config() args = sys.argv[1:] if not args: raise Exception("Syntax: runsels.py [APP | SELECTIONS] [ARGS]") app_or_sels = args[0] app_args = args[1:] app_mgr = apps.AppMgr(config) app_path = app_mgr.lookup_app(app_or_sels, missing_ok=True) sels_path = join(app_path, "selections.xml") if app_path is not None else app_or_sels with open(sels_path, 'rb') as stream: sels = qdom.parse(stream) runner = run.Runner(config) runner.execute_selections(sels, app_args)
import run as shared runner = shared.Runner() runner.setup() if __name__ == '__main__': runner.train()