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)
Example #2
0
  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)
Example #3
0
  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)
Example #4
0
  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)
Example #6
0
    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')