def test_run_and_wait_none_env(self): """Test RemoteProcessRunner.run_and_wait() with a None env.""" process_result = new_process.ProcessResult(['command', '123'], 0, b'output', 60.0, False) self.mock.stub().RunAndWait.return_value = ( untrusted_runner_pb2.RunAndWaitResponse( result=remote_process.process_result_to_proto(process_result))) runner = remote_process_host.RemoteProcessRunner( '/executable', ['-default_arg']) result = runner.run_and_wait() result = remote_process_host.process_result_from_proto(result) request = self.mock.stub().RunAndWait.call_args[0][0] self.assertEqual('/executable', request.executable_path) self.assertEqual(['-default_arg'], request.default_args) self.assertEqual([], request.additional_args) self.assertFalse(request.HasField('timeout')) self.assertFalse(request.terminate_before_kill) self.assertFalse(request.HasField('terminate_wait_time')) self.assertFalse(request.HasField('input_data')) self.assertFalse(request.popen_args.HasField('bufsize')) self.assertFalse(request.popen_args.HasField('executable')) self.assertFalse(request.popen_args.HasField('shell')) self.assertFalse(request.popen_args.HasField('cwd')) self.assertEqual({}, request.popen_args.env) self.assertFalse(request.popen_args.env_is_set) self.assertEqual(result.command, process_result.command) self.assertEqual(result.return_code, process_result.return_code) self.assertEqual(result.output, process_result.output) self.assertEqual(result.time_executed, process_result.time_executed) self.assertEqual(result.timed_out, process_result.timed_out)
def test_run_and_wait(self): """Tests remote run_and_wait.""" expected_output = subprocess.check_output(['ls', '/']) runner = remote_process_host.RemoteProcessRunner('/bin/ls') result = runner.run_and_wait(cwd='/') self.assertEqual(result.return_code, 0) self.assertEqual(result.output, expected_output)
def test_large_message(self): """Tests that large messages work.""" expected_output = 'A' * 1024 * 1024 * 5 + '\n' runner = remote_process_host.RemoteProcessRunner('/usr/bin/python') result = runner.run_and_wait( additional_args=['-c', 'print "A"*5*1024*1024']) self.assertEqual(result.return_code, 0) self.assertEqual(result.output, expected_output)
def test_reset_environment(self): """Test resetting environment.""" environment.set_value('ASAN_OPTIONS', 'saved_options') untrusted_env.reset_environment() environment.set_value('ASAN_OPTIONS', 'replaced') untrusted_env.reset_environment() runner = remote_process_host.RemoteProcessRunner('/bin/sh', ['-c']) result = runner.run_and_wait(['echo $ASAN_OPTIONS']) self.assertEqual(result.output, 'saved_options\n')
def test_run_and_wait(self): """Test RemoteProcessRunner.run_and_wait().""" process_result = new_process.ProcessResult(['command', '123'], 0, b'output', 60.0, False) self.mock.stub().RunAndWait.return_value = ( untrusted_runner_pb2.RunAndWaitResponse( result=remote_process.process_result_to_proto(process_result))) runner = remote_process_host.RemoteProcessRunner( '/executable', ['-default_arg']) result = runner.run_and_wait(['-additional_arg'], 100.0, True, 10.0, b'input', shell=True, env={'ASAN_OPTIONS': 'asan_options'}, cwd='/', max_stdout_len=1337) result = remote_process_host.process_result_from_proto(result) request = self.mock.stub().RunAndWait.call_args[0][0] self.assertEqual('/executable', request.executable_path) self.assertEqual(['-default_arg'], request.default_args) self.assertEqual(['-additional_arg'], request.additional_args) self.assertEqual(100.0, request.timeout) self.assertTrue(request.terminate_before_kill) self.assertEqual(10.0, request.terminate_wait_time) self.assertEqual(b'input', request.input_data) self.assertFalse(request.popen_args.HasField('bufsize')) self.assertFalse(request.popen_args.HasField('executable')) self.assertTrue(request.popen_args.shell) self.assertEqual('/', request.popen_args.cwd) self.assertEqual({'ASAN_OPTIONS': 'asan_options'}, request.popen_args.env) self.assertTrue(request.popen_args.env_is_set) self.assertEqual(1337, request.max_stdout_len) self.assertEqual(result.command, process_result.command) self.assertEqual(result.return_code, process_result.return_code) self.assertEqual(result.output, process_result.output) self.assertEqual(result.time_executed, process_result.time_executed) self.assertEqual(result.timed_out, process_result.timed_out)
def test_run_process_env(self): """Test environment passing when running processes.""" environment.set_value('ASAN_OPTIONS', 'host_value') runner = remote_process_host.RemoteProcessRunner('/bin/sh', ['-c']) result = runner.run_and_wait(['echo $ASAN_OPTIONS']) self.assertEqual(result.output, 'host_value\n') result = runner.run_and_wait(['echo $ASAN_OPTIONS $UBSAN_OPTIONS'], env={ 'UBSAN_OPTIONS': 'ubsan', 'NOT_PASSED': 'blah' }) self.assertEqual(result.output, 'ubsan\n') _, _, output = process_handler.run_process( '/bin/sh -c \'echo $ASAN_OPTIONS $MSAN_OPTIONS\'', testcase_run=True, env_copy={ 'MSAN_OPTIONS': 'msan', 'NOT_PASSED': 'blah' }) self.assertEqual(output, 'host_value msan')