| Index: appengine/swarming/server/task_scheduler_test.py
|
| diff --git a/appengine/swarming/server/task_scheduler_test.py b/appengine/swarming/server/task_scheduler_test.py
|
| index 886a6e49e3db68fd39f18cf71644657165647256..dce4a6ecffd9e50748d7dfb60318d9662cb1f6b6 100755
|
| --- a/appengine/swarming/server/task_scheduler_test.py
|
| +++ b/appengine/swarming/server/task_scheduler_test.py
|
| @@ -47,32 +47,6 @@ from proto import config_pb2
|
| # pylint: disable=W0212,W0612
|
|
|
|
|
| -def _gen_request(properties=None, **kwargs):
|
| - """Creates a TaskRequest."""
|
| - props = {
|
| - 'command': [u'command1'],
|
| - 'dimensions': {u'pool': u'default'},
|
| - 'env': {},
|
| - 'execution_timeout_secs': 24*60*60,
|
| - 'io_timeout_secs': None,
|
| - }
|
| - props.update(properties or {})
|
| - now = utils.utcnow()
|
| - args = {
|
| - 'created_ts': now,
|
| - 'name': 'Request name',
|
| - 'priority': 50,
|
| - 'properties': task_request.TaskProperties(**props),
|
| - 'expiration_ts': now + datetime.timedelta(seconds=60),
|
| - 'tags': [u'tag:1'],
|
| - 'user': 'Jesus',
|
| - }
|
| - args.update(kwargs)
|
| - ret = task_request.TaskRequest(**args)
|
| - task_request.init_new_request(ret, True, None)
|
| - return ret
|
| -
|
| -
|
| def get_results(request_key):
|
| """Fetches all task results for a specified TaskRequest ndb.Key.
|
|
|
| @@ -90,37 +64,6 @@ def get_results(request_key):
|
| return result_summary, q.fetch()
|
|
|
|
|
| -def _quick_schedule(dims):
|
| - """Schedules a task."""
|
| - request = _gen_request(properties={'dimensions': dims})
|
| - task_request.init_new_request(request, True, None)
|
| - return task_scheduler.schedule_request(request, None)
|
| -
|
| -
|
| -def _register_bot(bot_dimensions):
|
| - """Registers the bot so the task queues knows there's a worker than can run
|
| - the task.
|
| - """
|
| - bot_management.bot_event(
|
| - 'bot_connected', bot_dimensions[u'id'][0], '1.2.3.4', 'joe@localhost',
|
| - bot_dimensions, {'state': 'real'}, '1234', False, None, None)
|
| - task_queues.assert_bot(bot_dimensions)
|
| -
|
| -
|
| -def _quick_reap():
|
| - """Reaps a task."""
|
| - _quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'})
|
| - bot_dimensions = {
|
| - u'id': [u'localhost'],
|
| - u'os': [u'Windows-3.1.1'],
|
| - u'pool': [u'default'],
|
| - }
|
| - _register_bot(bot_dimensions)
|
| - reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| - bot_dimensions, 'abc', None)
|
| - return run_result
|
| -
|
| -
|
| class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def setUp(self):
|
| super(TaskSchedulerApiTest, self).setUp()
|
| @@ -167,6 +110,61 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.mock(pubsub, 'publish', pubsub_publish)
|
| return calls
|
|
|
| + def _gen_request(self, properties=None, **kwargs):
|
| + """Creates a TaskRequest."""
|
| + props = {
|
| + 'command': [u'command1'],
|
| + 'dimensions': {u'pool': u'default'},
|
| + 'env': {},
|
| + 'execution_timeout_secs': 24*60*60,
|
| + 'io_timeout_secs': None,
|
| + }
|
| + props.update(properties or {})
|
| + now = utils.utcnow()
|
| + args = {
|
| + 'created_ts': now,
|
| + 'name': 'Request name',
|
| + 'priority': 50,
|
| + 'properties': task_request.TaskProperties(**props),
|
| + 'expiration_ts': now + datetime.timedelta(seconds=60),
|
| + 'tags': [u'tag:1'],
|
| + 'user': 'Jesus',
|
| + }
|
| + args.update(kwargs)
|
| + ret = task_request.TaskRequest(**args)
|
| + task_request.init_new_request(ret, True, None)
|
| + return ret
|
| +
|
| + def _quick_schedule(self, dims, nb_task=0):
|
| + """Schedules a task."""
|
| + request = self._gen_request(properties={'dimensions': dims})
|
| + result_summary = task_scheduler.schedule_request(request, None)
|
| + self.assertEqual(nb_task, self.execute_tasks())
|
| + return result_summary
|
| +
|
| + def _register_bot(self, bot_dimensions, nb_task=0):
|
| + """Registers the bot so the task queues knows there's a worker than can run
|
| + the task.
|
| + """
|
| + bot_management.bot_event(
|
| + 'bot_connected', bot_dimensions[u'id'][0], '1.2.3.4', 'joe@localhost',
|
| + bot_dimensions, {'state': 'real'}, '1234', False, None, None)
|
| + task_queues.assert_bot(bot_dimensions)
|
| + self.assertEqual(nb_task, self.execute_tasks())
|
| +
|
| + def _quick_reap(self, nb_task=0):
|
| + """Reaps a task."""
|
| + self._quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'})
|
| + bot_dimensions = {
|
| + u'id': [u'localhost'],
|
| + u'os': [u'Windows-3.1.1'],
|
| + u'pool': [u'default'],
|
| + }
|
| + self._register_bot(bot_dimensions, nb_task=nb_task)
|
| + reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| + bot_dimensions, 'abc', None)
|
| + return run_result
|
| +
|
| def test_all_apis_are_tested(self):
|
| # Ensures there's a test for each public API.
|
| # TODO(maruel): Remove this once coverage is asserted.
|
| @@ -178,7 +176,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertFalse(missing)
|
|
|
| def test_bot_reap_task(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -190,7 +188,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| actual_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(request, actual_request)
|
| @@ -198,7 +196,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
|
|
|
| def test_bot_reap_task_not_enough_time(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -210,7 +208,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| actual_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', datetime.datetime(1969, 1, 1))
|
| self.failIf(actual_request)
|
| @@ -218,7 +216,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.failUnless(task_to_run.TaskToRun.query().get().queue_number)
|
|
|
| def test_bot_reap_task_enough_time(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -230,7 +228,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| actual_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', datetime.datetime(3000, 1, 1))
|
| self.assertEqual(request, actual_request)
|
| @@ -286,7 +284,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| def _task_ran_successfully(self):
|
| """Runs a task successfully and returns the task_id."""
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| 'idempotent': True,
|
| @@ -299,7 +297,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| actual_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(request, actual_request)
|
| @@ -323,8 +321,8 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| performance_stats=None))
|
| return unicode(run_result.task_id)
|
|
|
| - def _task_deduped(self, new_ts, deduped_from, task_id, nb_queues, now=None):
|
| - request = _gen_request(
|
| + def _task_deduped(self, new_ts, deduped_from, task_id, nb_task=0, now=None):
|
| + request = self._gen_request(
|
| name='yay',
|
| user='Raoul',
|
| properties={
|
| @@ -340,11 +338,10 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'pool': [u'default'],
|
| }
|
| self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions, nb_task=nb_task)
|
| actual_request_2, _, run_result_2 = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(None, actual_request_2)
|
| - self.assertEqual(nb_queues, self.execute_tasks())
|
| result_summary_duped, run_results_duped = get_results(request.key)
|
| expected = {
|
| 'abandoned_ts': None,
|
| @@ -393,7 +390,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| # Second task is deduped against first task.
|
| new_ts = self.mock_now(self.now, config.settings().reusable_task_age_secs-1)
|
| - self._task_deduped(new_ts, task_id, '1d8dc670a0008a10', 0)
|
| + self._task_deduped(new_ts, task_id, '1d8dc670a0008a10')
|
|
|
| def test_task_idempotent_old(self):
|
| # First task is idempotent.
|
| @@ -401,7 +398,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| # Second task is scheduled, first task is too old to be reused.
|
| new_ts = self.mock_now(self.now, config.settings().reusable_task_age_secs)
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| name='yay',
|
| user='Raoul',
|
| properties={
|
| @@ -419,12 +416,12 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| # Second task is deduped against first task.
|
| new_ts = self.mock_now(self.now, config.settings().reusable_task_age_secs-1)
|
| - self._task_deduped(new_ts, task_id, '1d8dc670a0008a10', 0)
|
| + self._task_deduped(new_ts, task_id, '1d8dc670a0008a10')
|
|
|
| # Third task is scheduled, second task is not dedupable, first task is too
|
| # old.
|
| new_ts = self.mock_now(self.now, config.settings().reusable_task_age_secs)
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| name='yay',
|
| user='Jesus',
|
| properties={
|
| @@ -457,12 +454,12 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| # Third task is deduped against second task. That ensures ordering works
|
| # correctly.
|
| third_ts = self.mock_now(self.now, 20)
|
| - self._task_deduped(third_ts, task_id, '1d69ba3ea8008b10', 0, second_ts)
|
| + self._task_deduped(third_ts, task_id, '1d69ba3ea8008b10', now=second_ts)
|
|
|
| def test_task_parent_children(self):
|
| # Parent task creates a child task.
|
| parent_id = self._task_ran_successfully()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| parent_task_id=parent_id,
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| @@ -480,7 +477,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(expected, parent_res_summary_key.get().children_task_ids)
|
|
|
| def test_task_parent_isolated(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'command': [],
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| @@ -498,7 +495,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| actual_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(request, actual_request)
|
| @@ -522,7 +519,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| performance_stats=None))
|
|
|
| parent_id = run_result.task_id
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| parent_task_id=parent_id,
|
| properties={
|
| 'dimensions':{u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| @@ -543,7 +540,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| # TODO(maruel): Split in more focused tests.
|
| created_ts = self.now
|
| self.mock_now(created_ts)
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -599,7 +596,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(request, reaped_request)
|
| @@ -786,7 +783,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(expected, [t.to_dict() for t in run_results])
|
|
|
| def test_exit_code_failure(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -797,7 +794,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(request, reaped_request)
|
| @@ -883,7 +880,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def test_schedule_request(self):
|
| # It is tested indirectly in the other functions.
|
| self.assertTrue(
|
| - _quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'}))
|
| + self._quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'}))
|
|
|
| def mock_dim_acls(self, mapping):
|
| self.mock(config, 'settings', lambda: config_pb2.SettingsCfg(
|
| @@ -895,22 +892,22 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| def test_schedule_request_forbidden_dim(self):
|
| self.mock_dim_acls({u'pool:bad': u'noone'})
|
| - _quick_schedule({u'pool': u'good'})
|
| + self._quick_schedule({u'pool': u'good'})
|
| with self.assertRaises(auth.AuthorizationError):
|
| - _quick_schedule({u'pool': u'bad'})
|
| + self._quick_schedule({u'pool': u'bad'})
|
|
|
| def test_schedule_request_forbidden_dim_via_star(self):
|
| self.mock_dim_acls({u'abc:*': u'noone'})
|
| - _quick_schedule({u'pool': u'default'})
|
| + self._quick_schedule({u'pool': u'default'})
|
| with self.assertRaises(auth.AuthorizationError):
|
| - _quick_schedule({u'pool': u'default', u'abc': u'blah'})
|
| + self._quick_schedule({u'pool': u'default', u'abc': u'blah'})
|
|
|
| def test_schedule_request_id_without_pool(self):
|
| self.mock_dim_acls({u'pool:good': u'mocked'})
|
| with self.assertRaises(auth.AuthorizationError):
|
| - _quick_schedule({u'id': u'abc'})
|
| + self._quick_schedule({u'id': u'abc'})
|
| auth_testing.mock_is_admin(self)
|
| - _quick_schedule({u'id': u'abc'})
|
| + self._quick_schedule({u'id': u'abc'})
|
|
|
| def test_schedule_request_id_and_pool(self):
|
| self.mock_dim_acls({u'pool:good': u'mocked'})
|
| @@ -922,13 +919,13 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| return False
|
| self.mock(auth, 'is_group_member', mocked_is_group_member)
|
|
|
| - _quick_schedule({u'id': u'abc', u'pool': u'unknown'})
|
| - _quick_schedule({u'id': u'abc', u'pool': u'good'})
|
| + self._quick_schedule({u'id': u'abc', u'pool': u'unknown'})
|
| + self._quick_schedule({u'id': u'abc', u'pool': u'good'})
|
| with self.assertRaises(auth.AuthorizationError):
|
| - _quick_schedule({u'id': u'abc', u'pool': u'bad'})
|
| + self._quick_schedule({u'id': u'abc', u'pool': u'bad'})
|
|
|
| def test_bot_update_task(self):
|
| - run_result = _quick_reap()
|
| + run_result = self._quick_reap()
|
| self.assertEqual(
|
| task_result.State.RUNNING,
|
| task_scheduler.bot_update_task(
|
| @@ -962,7 +959,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual('hihey', run_result.key.get().get_output())
|
|
|
| def test_bot_update_task_new_overwrite(self):
|
| - run_result = _quick_reap()
|
| + run_result = self._quick_reap()
|
| self.assertEqual(
|
| task_result.State.RUNNING,
|
| task_scheduler.bot_update_task(
|
| @@ -996,7 +993,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual('hhey', run_result.key.get().get_output())
|
|
|
| def test_bot_update_exception(self):
|
| - run_result = _quick_reap()
|
| + run_result = self._quick_reap()
|
| def r(*_):
|
| raise datastore_utils.CommitError('Sorry!')
|
|
|
| @@ -1019,7 +1016,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| def test_bot_update_pubsub_error(self):
|
| pub_sub_calls = self.mock_pub_sub()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| },
|
| @@ -1032,11 +1029,10 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| _, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual('localhost', run_result.bot_id)
|
| - self.assertEqual(1, self.execute_tasks())
|
|
|
| # Attempt to terminate the task with success, but make PubSub call fail.
|
| self.publish_successful = False
|
| @@ -1055,7 +1051,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| cost_usd=0.1,
|
| outputs_ref=None,
|
| performance_stats=None))
|
| - self.assertEqual(0, self.execute_tasks())
|
| + self.assertEqual(1, self.execute_tasks(status=500))
|
|
|
| # Bot retries bot_update, now PubSub works and notification is sent.
|
| self.publish_successful = True
|
| @@ -1075,10 +1071,10 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| outputs_ref=None,
|
| performance_stats=None))
|
| self.assertEqual(0, self.execute_tasks())
|
| - self.assertEqual(2, len(pub_sub_calls)) # notification is sent
|
| + self.assertEqual(1, len(pub_sub_calls)) # notification is sent
|
|
|
| def _bot_update_timeouts(self, hard, io):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -1089,7 +1085,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(
|
| @@ -1176,7 +1172,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def test_bot_kill_task(self):
|
| pub_sub_calls = self.mock_pub_sub()
|
| dimensions = {u'os': u'Windows-3.1.1', u'pool': u'default'}
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={'dimensions': dimensions},
|
| pubsub_topic='projects/abc/topics/def')
|
| task_request.init_new_request(request, True, None)
|
| @@ -1186,7 +1182,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(1, self.execute_tasks())
|
| @@ -1256,7 +1252,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(2, len(pub_sub_calls)) # RUNNING -> BOT_DIED
|
|
|
| def test_bot_kill_task_wrong_bot(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| })
|
| @@ -1267,7 +1263,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| expected = (
|
| @@ -1277,7 +1273,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| expected, task_scheduler.bot_kill_task(run_result.key, 'bot1'))
|
|
|
| def test_cancel_task(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| },
|
| @@ -1294,7 +1290,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(1, len(pub_sub_calls)) # sent completion notification
|
|
|
| def test_cancel_task_running(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| },
|
| @@ -1307,7 +1303,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| reaped_request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| ok, was_running = task_scheduler.cancel_task(request, result_summary.key)
|
| @@ -1319,7 +1315,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| self.assertEqual(1, len(pub_sub_calls)) # PENDING -> RUNNING
|
|
|
| def test_cron_abort_expired_task_to_run(self):
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| },
|
| @@ -1374,7 +1370,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def test_cron_abort_expired_task_to_run_retry(self):
|
| pub_sub_calls = self.mock_pub_sub()
|
| now = utils.utcnow()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| 'idempotent': True,
|
| @@ -1392,7 +1388,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(1, self.execute_tasks())
|
| @@ -1456,7 +1452,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| # Test first retry, then success.
|
| now = utils.utcnow()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| 'idempotent': True,
|
| @@ -1473,7 +1469,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(
|
| @@ -1551,7 +1547,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| now_2 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 2)
|
| bot_dimensions_second = bot_dimensions.copy()
|
| bot_dimensions_second[u'id'] = [u'localhost-second']
|
| - _register_bot(bot_dimensions_second)
|
| + self._register_bot(bot_dimensions_second)
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions_second, 'abc', None)
|
| self.assertEqual(1, self.execute_tasks())
|
| @@ -1617,7 +1613,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def test_cron_handle_bot_died_same_bot_denied(self):
|
| # Test first retry, then success.
|
| now = utils.utcnow()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| 'idempotent': True,
|
| @@ -1632,7 +1628,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(1, run_result.try_number)
|
| @@ -1711,7 +1707,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| def test_cron_handle_bot_died_second(self):
|
| # Test two tries internal_failure's leading to a BOT_DIED status.
|
| now = utils.utcnow()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| 'idempotent': True,
|
| @@ -1726,7 +1722,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(1, run_result.try_number)
|
| @@ -1737,7 +1733,8 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| # It must be a different bot.
|
| bot_dimensions_second = bot_dimensions.copy()
|
| bot_dimensions_second[u'id'] = [u'localhost-second']
|
| - _register_bot(bot_dimensions_second)
|
| + self._register_bot(bot_dimensions_second)
|
| + # No task to run because the task dimensions were already seen.
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions_second, 'abc', None)
|
| now_2 = self.mock_now(self.now + 2 * task_result.BOT_PING_TOLERANCE, 3)
|
| @@ -1784,7 +1781,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
|
|
| def test_cron_handle_bot_died_ignored_expired(self):
|
| now = utils.utcnow()
|
| - request = _gen_request(
|
| + request = self._gen_request(
|
| properties={
|
| 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
|
| },
|
| @@ -1798,7 +1795,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
|
| u'os': [u'Windows', u'Windows-3.1.1'],
|
| u'pool': [u'default'],
|
| }
|
| - _register_bot(bot_dimensions)
|
| + self._register_bot(bot_dimensions)
|
| _request, _, run_result = task_scheduler.bot_reap_task(
|
| bot_dimensions, 'abc', None)
|
| self.assertEqual(1, run_result.try_number)
|
|
|