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

Side by Side Diff: appengine/swarming/handlers_bot_test.py

Issue 2689483004: swarming: Add server-side implementation for supplemental bot_config (Closed)
Patch Set: rebase Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # coding: utf-8 2 # coding: utf-8
3 # Copyright 2015 The LUCI Authors. All rights reserved. 3 # Copyright 2015 The LUCI Authors. All rights reserved.
4 # Use of this source code is governed under the Apache License, Version 2.0 4 # Use of this source code is governed under the Apache License, Version 2.0
5 # that can be found in the LICENSE file. 5 # that can be found in the LICENSE file.
6 6
7 import base64 7 import base64
8 import datetime 8 import datetime
9 import logging 9 import logging
10 import os 10 import os
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 def test_poll_conflicting_dimensions(self): 427 def test_poll_conflicting_dimensions(self):
428 params = self.do_handshake() 428 params = self.do_handshake()
429 self.assertEqual(params['dimensions']['pool'], ['default']) 429 self.assertEqual(params['dimensions']['pool'], ['default'])
430 430
431 cfg = bot_groups_config.BotGroupConfig( 431 cfg = bot_groups_config.BotGroupConfig(
432 version='default', 432 version='default',
433 require_luci_machine_token=False, 433 require_luci_machine_token=False,
434 require_service_account=None, 434 require_service_account=None,
435 ip_whitelist=None, 435 ip_whitelist=None,
436 owners=None, 436 owners=None,
437 dimensions={u'pool': [u'server-side']}) 437 dimensions={u'pool': [u'server-side']},
438 bot_config_script='')
438 self.mock(bot_auth, 'validate_bot_id_and_fetch_config', 439 self.mock(bot_auth, 'validate_bot_id_and_fetch_config',
439 lambda *args, **kwargs: cfg) 440 lambda *args, **kwargs: cfg)
440 441
441 actions = [] 442 actions = []
442 self.mock(stats, 'add_entry', lambda **kwargs: actions.append(kwargs)) 443 self.mock(stats, 'add_entry', lambda **kwargs: actions.append(kwargs))
443 444
444 # Bot sends 'default' pool, but server config defined it as 'server-side'. 445 # Bot sends 'default' pool, but server config defined it as 'server-side'.
445 response = self.post_json('/swarming/api/v1/bot/poll', params) 446 response = self.post_json('/swarming/api/v1/bot/poll', params)
446 self.assertTrue(response.pop(u'duration')) 447 self.assertTrue(response.pop(u'duration'))
447 expected = { 448 expected = {
448 u'cmd': u'sleep', 449 u'cmd': u'sleep',
449 u'quarantined': False, 450 u'quarantined': False,
450 } 451 }
451 self.assertEqual(expected, response) 452 self.assertEqual(expected, response)
452 453
453 # 'server-side' was actually used. 454 # 'server-side' was actually used.
454 self.assertEqual([{ 455 self.assertEqual([{
455 'action': 'bot_active', 456 'action': 'bot_active',
456 'bot_id': u'bot1', 457 'bot_id': u'bot1',
457 'dimensions': { 458 'dimensions': {
458 u'id': [u'bot1'], 459 u'id': [u'bot1'],
459 u'os': [u'Amiga'], 460 u'os': [u'Amiga'],
460 u'pool': [u'server-side'], 461 u'pool': [u'server-side'],
461 }, 462 },
462 }], actions) 463 }], actions)
463 464
465 def test_poll_missing_extra_bot_config(self):
466 cfg = bot_groups_config.BotGroupConfig(
467 version='default',
468 require_luci_machine_token=False,
469 require_service_account=None,
470 ip_whitelist=None,
471 owners=None,
472 dimensions={},
473 bot_config_script='foo.py')
474 self.mock(bot_auth, 'validate_bot_id_and_fetch_config',
475 lambda *args, **kwargs: cfg)
476 self.do_handshake(status=503)
477
478 def test_poll_extra_bot_config(self):
479 cfg = bot_groups_config.BotGroupConfig(
480 version='default',
481 require_luci_machine_token=False,
482 require_service_account=None,
483 ip_whitelist=None,
484 owners=None,
485 dimensions={},
486 bot_config_script='foo.py')
487 self.mock(bot_auth, 'validate_bot_id_and_fetch_config',
488 lambda *args, **kwargs: cfg)
489 # Inject the script.
490 def get_self_config(name, store_last_good):
491 self.assertEqual(True, store_last_good)
492 if name == 'scripts/bot_config.py':
493 return None, None
494 self.assertEqual('scripts/foo.py', name)
495 return '1', 'import sys; sys.exit(1)'
496 self.mock(handlers_bot.config.config, 'get_self_config', get_self_config)
497 params = self.do_handshake()
498 self.assertEqual(u'import sys; sys.exit(1)', params['bot_config'])
499
464 def test_complete_task_isolated(self): 500 def test_complete_task_isolated(self):
465 # Successfully poll a task. 501 # Successfully poll a task.
466 self.mock(random, 'getrandbits', lambda _: 0x88) 502 self.mock(random, 'getrandbits', lambda _: 0x88)
467 now = datetime.datetime(2010, 1, 2, 3, 4, 5) 503 now = datetime.datetime(2010, 1, 2, 3, 4, 5)
468 self.mock_now(now) 504 self.mock_now(now)
469 str_now = unicode(now.strftime(DATETIME_FORMAT)) 505 str_now = unicode(now.strftime(DATETIME_FORMAT))
470 # A bot polls, gets a task, updates it, completes it. 506 # A bot polls, gets a task, updates it, completes it.
471 params = self.do_handshake() 507 params = self.do_handshake()
472 # Enqueue a task. 508 # Enqueue a task.
473 _, task_id = self.client_create_task_isolated() 509 _, task_id = self.client_create_task_isolated()
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 self.app.get('/bot_code?tok=%s' % tok, status=200) 1147 self.app.get('/bot_code?tok=%s' % tok, status=200)
1112 1148
1113 1149
1114 if __name__ == '__main__': 1150 if __name__ == '__main__':
1115 if '-v' in sys.argv: 1151 if '-v' in sys.argv:
1116 unittest.TestCase.maxDiff = None 1152 unittest.TestCase.maxDiff = None
1117 logging.basicConfig( 1153 logging.basicConfig(
1118 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL, 1154 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL,
1119 format='%(levelname)-7s %(filename)s:%(lineno)3d %(message)s') 1155 format='%(levelname)-7s %(filename)s:%(lineno)3d %(message)s')
1120 unittest.main() 1156 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698