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

Unified Diff: appengine/swarming/server/task_scheduler_test.py

Issue 2926713004: Add support for repeated keys in TaskRequest. (Closed)
Patch Set: rebase Created 3 years, 6 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/server/task_scheduler.py ('k') | appengine/swarming/server/task_to_run.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 17c2f11fa2e02692a6fe1ef1940a18073b3bd5d8..562cc38882616a5c7fb6b11042a8280154a3c6b0 100755
--- a/appengine/swarming/server/task_scheduler_test.py
+++ b/appengine/swarming/server/task_scheduler_test.py
@@ -106,13 +106,12 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
"""Creates a TaskRequest."""
props = {
'command': [u'command1'],
- 'dimensions': {u'pool': u'default'},
+ 'dimensions_flat': [u'pool:default'],
'env': {},
'execution_timeout_secs': 24*60*60,
'io_timeout_secs': None,
}
props.update(properties or {})
- props['dimensions_dict'] = props.pop('dimensions')
now = utils.utcnow()
args = {
'created_ts': now,
@@ -133,7 +132,8 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
nb_task is 1 if a GAE task queue rebuild-task-cache was enqueued.
"""
- request = self._gen_request(properties={'dimensions': dims})
+ self.assertIsInstance(dims, list)
+ request = self._gen_request(properties={'dimensions_flat': dims})
result_summary = task_scheduler.schedule_request(request, None)
self.assertEqual(nb_task, self.execute_tasks())
return result_summary
@@ -150,7 +150,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def _quick_reap(self, nb_task=1):
"""Reaps a task."""
- self._quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'})
+ self._quick_schedule([u'os:Windows-3.1.1', u'pool:default'])
bot_dimensions = {
u'id': [u'localhost'],
u'os': [u'Windows-3.1.1'],
@@ -174,7 +174,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_bot_reap_task(self):
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
@@ -194,7 +194,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_bot_reap_task_not_enough_time(self):
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
@@ -214,7 +214,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_bot_reap_task_enough_time(self):
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
@@ -278,20 +278,18 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
'topic': 'projects/abc/topics/def',
}], calls)
- def _task_ran_successfully(self, nb_task=1):
+ def _task_ran_successfully(self, dimensions_flat=None, nb_task=1):
"""Runs a task successfully and returns the task_id."""
+ dimensions_flat = dimensions_flat or [u'os:Windows-3.1.1', u'pool:default']
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- 'idempotent': True,
- })
+ properties={'dimensions_flat': dimensions_flat, 'idempotent': True})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
bot_dimensions = {
u'foo': [u'bar'],
u'id': [u'localhost'],
u'os': [u'Windows', u'Windows-3.1.1'],
- u'pool': [u'default'],
+ u'pool': [u'default', u'testing'],
}
self._register_bot(bot_dimensions, nb_task=nb_task)
actual_request, _, run_result = task_scheduler.bot_reap_task(
@@ -322,7 +320,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
name='yay',
user='Raoul',
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
})
task_request.init_new_request(request, True, None)
@@ -331,7 +329,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
u'foo': [u'bar'],
u'id': [u'localhost'],
u'os': [u'Windows', u'Windows-3.1.1'],
- u'pool': [u'default'],
+ u'pool': [u'default', u'testing'],
}
self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
self._register_bot(bot_dimensions, nb_task=nb_task)
@@ -380,6 +378,10 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
self.assertEqual(expected, result_summary_duped.to_dict())
self.assertEqual([], run_results_duped)
+ def test_task_two_pools(self):
+ self._task_ran_successfully(
+ dimensions_flat=[u'pool:default', u'pool:testing'])
+
def test_task_idempotent(self):
# First task is idempotent.
task_id = self._task_ran_successfully()
@@ -398,7 +400,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
name='yay',
user='Raoul',
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
})
task_request.init_new_request(request, True, None)
@@ -422,7 +424,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
name='yay',
user='Jesus',
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
})
task_request.init_new_request(request, True, None)
@@ -460,7 +462,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
request = self._gen_request(
parent_task_id=parent_id,
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
result_summary = task_scheduler.schedule_request(request, None)
@@ -478,7 +480,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
request = self._gen_request(
properties={
'command': [],
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'inputs_ref': {
'isolated': '1' * 40,
'isolatedserver': 'http://localhost:1',
@@ -520,7 +522,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
request = self._gen_request(
parent_task_id=parent_id,
properties={
- 'dimensions':{u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
result_summary = task_scheduler.schedule_request(request, None)
@@ -540,7 +542,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
self.mock_now(created_ts)
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
@@ -783,7 +785,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_exit_code_failure(self):
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
_result_summary = task_scheduler.schedule_request(request, None)
@@ -878,7 +880,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_schedule_request(self):
# It is tested indirectly in the other functions.
self.assertTrue(
- self._quick_schedule({u'os': u'Windows-3.1.1', u'pool': u'default'}))
+ self._quick_schedule([u'os:Windows-3.1.1', u'pool:default']))
def mock_dim_acls(self, mapping):
self.mock(config, 'settings', lambda: config_pb2.SettingsCfg(
@@ -890,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'})
- self._quick_schedule({u'pool': u'good'})
+ self._quick_schedule([u'pool:good'])
with self.assertRaises(auth.AuthorizationError):
- self._quick_schedule({u'pool': u'bad'})
+ self._quick_schedule([u'pool:bad'])
def test_schedule_request_forbidden_dim_via_star(self):
self.mock_dim_acls({u'abc:*': u'noone'})
- self._quick_schedule({u'pool': u'default'})
+ self._quick_schedule([u'pool:default'])
with self.assertRaises(auth.AuthorizationError):
- self._quick_schedule({u'pool': u'default', u'abc': u'blah'})
+ self._quick_schedule([u'abc:blah', u'pool:default'])
def test_schedule_request_id_without_pool(self):
self.mock_dim_acls({u'pool:good': u'mocked'})
with self.assertRaises(auth.AuthorizationError):
- self._quick_schedule({u'id': u'abc'})
+ self._quick_schedule([u'id:abc'])
auth_testing.mock_is_admin(self)
- self._quick_schedule({u'id': u'abc'}, nb_task=0)
+ self._quick_schedule([u'id:abc'], nb_task=0)
def test_schedule_request_id_and_pool(self):
self.mock_dim_acls({u'pool:good': u'mocked'})
@@ -917,10 +919,10 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
return False
self.mock(auth, 'is_group_member', mocked_is_group_member)
- self._quick_schedule({u'id': u'abc', u'pool': u'unknown'}, nb_task=0)
- self._quick_schedule({u'id': u'abc', u'pool': u'good'}, nb_task=0)
+ self._quick_schedule([u'id:abc', u'pool:unknown'], nb_task=0)
+ self._quick_schedule([u'id:abc', u'pool:good'], nb_task=0)
with self.assertRaises(auth.AuthorizationError):
- self._quick_schedule({u'id': u'abc', u'pool': u'bad'})
+ self._quick_schedule([u'id:abc', u'pool:bad'])
def test_bot_update_task(self):
run_result = self._quick_reap(nb_task=0)
@@ -1016,7 +1018,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
pub_sub_calls = self.mock_pub_sub()
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
},
pubsub_topic='projects/abc/topics/def')
task_request.init_new_request(request, True, None)
@@ -1074,7 +1076,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def _bot_update_timeouts(self, hard, io):
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
})
task_request.init_new_request(request, True, None)
result_summary = task_scheduler.schedule_request(request, None)
@@ -1169,9 +1171,8 @@ 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 = self._gen_request(
- properties={'dimensions': dimensions},
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']},
pubsub_topic='projects/abc/topics/def')
task_request.init_new_request(request, True, None)
result_summary = task_scheduler.schedule_request(request, None)
@@ -1251,9 +1252,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_bot_kill_task_wrong_bot(self):
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- })
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']})
task_request.init_new_request(request, True, None)
result_summary = task_scheduler.schedule_request(request, None)
bot_dimensions = {
@@ -1272,9 +1271,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_cancel_task(self):
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- },
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']},
pubsub_topic='projects/abc/topics/def')
pub_sub_calls = self.mock_pub_sub()
task_request.init_new_request(request, True, None)
@@ -1289,9 +1286,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_cancel_task_running(self):
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- },
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']},
pubsub_topic='projects/abc/topics/def')
pub_sub_calls = self.mock_pub_sub()
task_request.init_new_request(request, True, None)
@@ -1314,10 +1309,8 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_cron_abort_expired_task_to_run(self):
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- },
- pubsub_topic='projects/abc/topics/def')
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']},
+ pubsub_topic='projects/abc/topics/def')
task_request.init_new_request(request, True, None)
pub_sub_calls = self.mock_pub_sub()
result_summary = task_scheduler.schedule_request(request, None)
@@ -1370,7 +1363,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
now = utils.utcnow()
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
},
created_ts=now,
@@ -1452,7 +1445,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
now = utils.utcnow()
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
},
created_ts=now,
@@ -1614,7 +1607,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
now = utils.utcnow()
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
},
created_ts=now,
@@ -1708,7 +1701,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
now = utils.utcnow()
request = self._gen_request(
properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
+ 'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default'],
'idempotent': True,
},
created_ts=now,
@@ -1781,9 +1774,7 @@ class TaskSchedulerApiTest(test_env_handlers.AppTestBase):
def test_cron_handle_bot_died_ignored_expired(self):
now = utils.utcnow()
request = self._gen_request(
- properties={
- 'dimensions': {u'os': u'Windows-3.1.1', u'pool': u'default'},
- },
+ properties={'dimensions_flat': [u'os:Windows-3.1.1', u'pool:default']},
created_ts=now,
expiration_ts=now+datetime.timedelta(seconds=600))
task_request.init_new_request(request, True, None)
« no previous file with comments | « appengine/swarming/server/task_scheduler.py ('k') | appengine/swarming/server/task_to_run.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698