Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: appengine/swarming/swarming_bot/bot_code/task_runner_test.py

Issue 1949613002: task_runner: always use run_isolated (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: rebased Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/swarming/swarming_bot/bot_code/task_runner.py ('k') | client/run_isolated.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/swarming/swarming_bot/bot_code/task_runner_test.py
diff --git a/appengine/swarming/swarming_bot/bot_code/task_runner_test.py b/appengine/swarming/swarming_bot/bot_code/task_runner_test.py
index 24fdc3f27e7f9fd3b1f03272a3a8eabb35a2fe33..ad7c828cf0657ea6caef99982082bbc9778582c4 100755
--- a/appengine/swarming/swarming_bot/bot_code/task_runner_test.py
+++ b/appengine/swarming/swarming_bot/bot_code/task_runner_test.py
@@ -8,8 +8,8 @@ import base64
import json
import logging
import os
+import re
import signal
-import shutil
import sys
import tempfile
import time
@@ -121,20 +121,24 @@ class TestTaskRunner(TestTaskRunnerBase):
super(TestTaskRunner, self).setUp()
self.mock(time, 'time', lambda: 1000000000.)
- def get_check_final(self, exit_code=0, output='hi\n', outputs_ref=None):
+ def get_check_final(self, exit_code=0, output_re=r'^hi\n$', outputs_ref=None):
def check_final(kwargs):
- # It makes the diffing easier.
+ # Ignore these values.
+ kwargs['data'].pop('bot_overhead', None)
+ kwargs['data'].pop('duration', None)
+
+ output = ''
if 'output' in kwargs['data']:
- kwargs['data']['output'] = base64.b64decode(kwargs['data']['output'])
+ output = base64.b64decode(kwargs['data'].pop('output'))
+ self.assertTrue(re.match(output_re, output))
+
expected = {
'data': {
'cost_usd': 10.,
- 'duration': 0.,
'exit_code': exit_code,
'hard_timeout': False,
'id': 'localhost',
'io_timeout': False,
- 'output': output,
'output_chunk_start': 0,
'task_id': 23,
},
@@ -328,17 +332,14 @@ class TestTaskRunner(TestTaskRunnerBase):
self.assertEqual(expected, self._run_command(task_details))
def test_run_command_os_error(self):
- # This runs the command for real.
- # OS specific error, fix expectation for other OSes.
- output = (
- 'Command "executable_that_shouldnt_be_on_your_system '
- 'thus_raising_OSError" failed to start.\n'
- 'Error: [Error 2] The system cannot find the file specified'
- ) if sys.platform == 'win32' else (
- 'Command "executable_that_shouldnt_be_on_your_system '
- 'thus_raising_OSError" failed to start.\n'
- 'Error: [Errno 2] No such file or directory')
- self.requests(cost_usd=10., exit_code=1, output=output)
+ self.requests(
+ cost_usd=10.,
+ exit_code=1,
+ output_re=(
+ # This is a beginning of run_isolate.py's output if binary is not
+ # found.
+ r'^<The executable does not exist or a dependent library is '
+ r'missing>'))
task_details = task_runner.TaskDetails(
{
'bot_id': 'localhost',
@@ -367,8 +368,7 @@ class TestTaskRunner(TestTaskRunnerBase):
# Method should have "self" as first argument - pylint: disable=E0213
class Popen(object):
"""Mocks the process so we can control how data is returned."""
- def __init__(self2, cmd, cwd, env, stdout, stderr, stdin, detached):
- self.assertEqual(task_details.command, cmd)
+ def __init__(self2, _cmd, cwd, env, stdout, stderr, stdin, detached):
self.assertEqual(self.work_dir, cwd)
expected_env = os.environ.copy()
expected_env['foo'] = 'bar'
@@ -568,16 +568,21 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
def get_check_final(
self, hard_timeout=False, io_timeout=False, exit_code=None,
- output='hi\n'):
+ output_re='^hi\n$'):
def check_final(kwargs):
+ kwargs['data'].pop('bot_overhead', None)
if hard_timeout or io_timeout:
self.assertLess(self.SHORT_TIME_OUT, kwargs['data'].pop('cost_usd'))
self.assertLess(self.SHORT_TIME_OUT, kwargs['data'].pop('duration'))
else:
self.assertLess(0., kwargs['data'].pop('cost_usd'))
self.assertLess(0., kwargs['data'].pop('duration'))
- # It makes the diffing easier.
- kwargs['data']['output'] = base64.b64decode(kwargs['data']['output'])
+
+ output = ''
+ if 'output' in kwargs['data']:
+ output = base64.b64decode(kwargs['data'].pop('output'))
+ self.assertTrue(re.match(output_re, output))
+
self.assertEqual(
{
'data': {
@@ -585,7 +590,6 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
'hard_timeout': hard_timeout,
'id': 'localhost',
'io_timeout': io_timeout,
- 'output': output,
'output_chunk_start': 0,
'task_id': 23,
},
@@ -623,7 +627,9 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
u'must_signal_internal_failure': None,
u'version': task_runner.OUT_VERSION,
}
- self.assertEqual(expected, self._run_command(task_details))
+ actual = self._run_command(task_details)
+ actual.pop('bot_overhead', None)
+ self.assertEqual(expected, actual)
def test_io(self):
# Actually 0xc000013a
@@ -644,7 +650,7 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
self.requests(
hard_timeout=True,
exit_code=0,
- output='hi\ngot signal %d\nbye\n' % task_runner.SIG_BREAK_OR_TERM)
+ output_re='^hi\ngot signal %d\nbye\n$' % task_runner.SIG_BREAK_OR_TERM)
task_details = self.get_task_details(
self.SCRIPT_SIGNAL, hard_timeout=self.SHORT_TIME_OUT)
# Returns 0 because the process cleaned up itself.
@@ -660,7 +666,7 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
def test_io_signal(self):
self.requests(
io_timeout=True, exit_code=0,
- output='hi\ngot signal %d\nbye\n' % task_runner.SIG_BREAK_OR_TERM)
+ output_re='^hi\ngot signal %d\nbye\n$' % task_runner.SIG_BREAK_OR_TERM)
task_details = self.get_task_details(
self.SCRIPT_SIGNAL, io_timeout=self.SHORT_TIME_OUT)
# Returns 0 because the process cleaned up itself.
@@ -709,7 +715,7 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
exit_code = 1 if sys.platform == 'win32' else -signal.SIGKILL
self.requests(
hard_timeout=True, exit_code=exit_code,
- output='hi\ngot signal %d\nbye\n' % task_runner.SIG_BREAK_OR_TERM)
+ output_re='^hi\ngot signal %d\nbye\n$' % task_runner.SIG_BREAK_OR_TERM)
task_details = self.get_task_details(
self.SCRIPT_SIGNAL_HANG, hard_timeout=self.SHORT_TIME_OUT,
grace_period=self.SHORT_TIME_OUT)
@@ -727,7 +733,7 @@ class TestTaskRunnerNoTimeMock(TestTaskRunnerBase):
exit_code = 1 if sys.platform == 'win32' else -signal.SIGKILL
self.requests(
io_timeout=True, exit_code=exit_code,
- output='hi\ngot signal %d\nbye\n' % task_runner.SIG_BREAK_OR_TERM)
+ output_re='^hi\ngot signal %d\nbye\n$' % task_runner.SIG_BREAK_OR_TERM)
task_details = self.get_task_details(
self.SCRIPT_SIGNAL_HANG, io_timeout=self.SHORT_TIME_OUT,
grace_period=self.SHORT_TIME_OUT)
@@ -1039,13 +1045,6 @@ class TaskRunnerSmoke(unittest.TestCase):
task_runner_log = os.path.join(self.root_dir, 'logs', 'task_runner.log')
with open(task_runner_log, 'rb') as f:
logging.info('task_runner.log:\n---\n%s---', f.read())
- expected = {
- u'exit_code': 0,
- u'hard_timeout': False,
- u'io_timeout': False,
- u'must_signal_internal_failure': None,
- u'version': task_runner.OUT_VERSION,
- }
self.assertEqual([], self._server.get_events())
tasks = self._server.get_tasks()
for task in tasks.itervalues():
@@ -1074,6 +1073,7 @@ class TaskRunnerSmoke(unittest.TestCase):
'4e019f31778ba7191f965469dc673280386bbd60-cacert.pem',
'work',
'logs',
+ 'isolated',
# TODO(maruel): Move inside work.
'task_runner_in.json',
'task_runner_out.json',
« no previous file with comments | « appengine/swarming/swarming_bot/bot_code/task_runner.py ('k') | client/run_isolated.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698