| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2017 The LUCI Authors. All rights reserved. | 2 # Copyright 2017 The LUCI Authors. All rights reserved. |
| 3 # Use of this source code is governed under the Apache License, Version 2.0 | 3 # Use of this source code is governed under the Apache License, Version 2.0 |
| 4 # that can be found in the LICENSE file. | 4 # that can be found in the LICENSE file. |
| 5 | 5 |
| 6 import datetime | 6 import datetime |
| 7 import hashlib | 7 import hashlib |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import sys | 10 import sys |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 bot_management.bot_event( | 39 bot_management.bot_event( |
| 40 'bot_connected', u'bot1', '1.2.3.4', 'bot1', bot_dimensions, {}, | 40 'bot_connected', u'bot1', '1.2.3.4', 'bot1', bot_dimensions, {}, |
| 41 '1234', False, None, None) | 41 '1234', False, None, None) |
| 42 task_queues.assert_bot(bot_dimensions) | 42 task_queues.assert_bot(bot_dimensions) |
| 43 | 43 |
| 44 | 44 |
| 45 def _gen_request(properties=None): | 45 def _gen_request(properties=None): |
| 46 """Creates a TaskRequest that expires in 24h.""" | 46 """Creates a TaskRequest that expires in 24h.""" |
| 47 props = { | 47 props = { |
| 48 'command': [u'command1'], | 48 'command': [u'command1'], |
| 49 'dimensions': { | 49 'dimensions_flat': [ |
| 50 u'cpu': u'x86-64', | 50 u'cpu:x86-64', |
| 51 u'os': u'Ubuntu-16.04', | 51 u'os:Ubuntu-16.04', |
| 52 u'pool': u'default', | 52 u'pool:default', |
| 53 }, | 53 ], |
| 54 'env': {}, | 54 'env': {}, |
| 55 'execution_timeout_secs': 24*60*60, | 55 'execution_timeout_secs': 24*60*60, |
| 56 'io_timeout_secs': None, | 56 'io_timeout_secs': None, |
| 57 } | 57 } |
| 58 props.update(properties or {}) | 58 props.update(properties or {}) |
| 59 props['dimensions_dict'] = props.pop('dimensions') | |
| 60 now = utils.utcnow() | 59 now = utils.utcnow() |
| 61 args = { | 60 args = { |
| 62 'created_ts': now, | 61 'created_ts': now, |
| 63 'name': 'Request name', | 62 'name': 'Request name', |
| 64 'priority': 50, | 63 'priority': 50, |
| 65 'properties': task_request.TaskProperties(**props), | 64 'properties': task_request.TaskProperties(**props), |
| 66 'expiration_ts': now + datetime.timedelta(seconds=60), | 65 'expiration_ts': now + datetime.timedelta(seconds=60), |
| 67 'tags': [u'tag:1'], | 66 'tags': [u'tag:1'], |
| 68 'user': 'Jesus', | 67 'user': 'Jesus', |
| 69 } | 68 } |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 _assert_bot() | 230 _assert_bot() |
| 232 self.assert_count(1, task_queues.BotDimensions) | 231 self.assert_count(1, task_queues.BotDimensions) |
| 233 self.assert_count(1, task_queues.BotTaskDimensions) | 232 self.assert_count(1, task_queues.BotTaskDimensions) |
| 234 self.assert_count(1, task_queues.TaskDimensions) | 233 self.assert_count(1, task_queues.TaskDimensions) |
| 235 self.assertEqual([2980491642], task_queues.get_queues(u'bot1')) | 234 self.assertEqual([2980491642], task_queues.get_queues(u'bot1')) |
| 236 | 235 |
| 237 def test_assert_bot_then_task_with_id(self): | 236 def test_assert_bot_then_task_with_id(self): |
| 238 # Assert a task that includes an 'id' dimension. No task queue is triggered | 237 # Assert a task that includes an 'id' dimension. No task queue is triggered |
| 239 # in this case, rebuild_task_cache() is called inlined. | 238 # in this case, rebuild_task_cache() is called inlined. |
| 240 _assert_bot() | 239 _assert_bot() |
| 241 request = _gen_request(properties={u'dimensions': {u'id': u'bot1'}}) | 240 request = _gen_request(properties={u'dimensions_flat': [u'id:bot1']}) |
| 242 task_request.init_new_request(request, True, None) | 241 task_request.init_new_request(request, True, None) |
| 243 task_queues.assert_task(request) | 242 task_queues.assert_task(request) |
| 244 self.assertEqual(0, self.execute_tasks()) | 243 self.assertEqual(0, self.execute_tasks()) |
| 245 self.assert_count(1, bot_management.BotInfo) | 244 self.assert_count(1, bot_management.BotInfo) |
| 246 self.assert_count(1, task_queues.BotDimensions) | 245 self.assert_count(1, task_queues.BotDimensions) |
| 247 self.assert_count(1, task_queues.BotTaskDimensions) | 246 self.assert_count(1, task_queues.BotTaskDimensions) |
| 248 self.assert_count(1, task_queues.TaskDimensions) | 247 self.assert_count(1, task_queues.TaskDimensions) |
| 249 | 248 |
| 250 def test_cleanup_after_bot(self): | 249 def test_cleanup_after_bot(self): |
| 251 _assert_bot() | 250 _assert_bot() |
| (...skipping 29 matching lines...) Expand all Loading... |
| 281 | 280 |
| 282 # TaskDimension expired. The fact that the bot changed dimensions after an | 281 # TaskDimension expired. The fact that the bot changed dimensions after an |
| 283 # hour didn't impact BotTaskDimensions expiration. | 282 # hour didn't impact BotTaskDimensions expiration. |
| 284 self.mock_now(now, exp.total_seconds() + 1) | 283 self.mock_now(now, exp.total_seconds() + 1) |
| 285 _assert_bot() | 284 _assert_bot() |
| 286 self.assert_count(1, task_queues.BotTaskDimensions) | 285 self.assert_count(1, task_queues.BotTaskDimensions) |
| 287 self.assert_count(1, task_queues.TaskDimensions) | 286 self.assert_count(1, task_queues.TaskDimensions) |
| 288 self.assertEqual([], task_queues.get_queues(u'bot1')) | 287 self.assertEqual([], task_queues.get_queues(u'bot1')) |
| 289 | 288 |
| 290 def test_hash_dimensions(self): | 289 def test_hash_dimensions(self): |
| 291 with self.assertRaises(AttributeError): | 290 with self.assertRaises(AssertionError): |
| 292 task_queues.hash_dimensions('this is not json') | 291 task_queues.hash_dimensions('this is not json') |
| 293 # Assert it doesn't return 0. | 292 # Assert it doesn't return 0. |
| 294 self.assertEqual(3649838548, task_queues.hash_dimensions({})) | 293 self.assertEqual(3649838548, task_queues.hash_dimensions([])) |
| 295 | 294 |
| 296 def test_tidy_stale(self): | 295 def test_tidy_stale(self): |
| 297 now = datetime.datetime(2010, 1, 2, 3, 4, 5) | 296 now = datetime.datetime(2010, 1, 2, 3, 4, 5) |
| 298 self.mock_now(now) | 297 self.mock_now(now) |
| 299 _assert_bot() | 298 _assert_bot() |
| 300 request = self._assert_task() | 299 request = self._assert_task() |
| 301 exp = (request.expiration_ts-request.created_ts) + task_queues._ADVANCE | 300 exp = (request.expiration_ts-request.created_ts) + task_queues._ADVANCE |
| 302 self.assert_count(1, task_queues.BotTaskDimensions) | 301 self.assert_count(1, task_queues.BotTaskDimensions) |
| 303 self.assert_count(1, task_queues.TaskDimensions) | 302 self.assert_count(1, task_queues.TaskDimensions) |
| 304 self.assertEqual([2980491642], task_queues.get_queues(u'bot1')) | 303 self.assertEqual([2980491642], task_queues.get_queues(u'bot1')) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 323 self.assert_count(0, task_queues.TaskDimensions) | 322 self.assert_count(0, task_queues.TaskDimensions) |
| 324 self.assertEqual([], task_queues.get_queues(u'bot1')) | 323 self.assertEqual([], task_queues.get_queues(u'bot1')) |
| 325 | 324 |
| 326 | 325 |
| 327 if __name__ == '__main__': | 326 if __name__ == '__main__': |
| 328 if '-v' in sys.argv: | 327 if '-v' in sys.argv: |
| 329 unittest.TestCase.maxDiff = None | 328 unittest.TestCase.maxDiff = None |
| 330 logging.basicConfig( | 329 logging.basicConfig( |
| 331 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR) | 330 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR) |
| 332 unittest.main() | 331 unittest.main() |
| OLD | NEW |