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

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

Issue 2249803003: Create Tasks.Tags endpoint and Cron job (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: Docs Created 4 years, 4 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
« no previous file with comments | « appengine/swarming/handlers_endpoints_test.py ('k') | appengine/swarming/server/task_result.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # coding: utf-8 2 # coding: utf-8
3 # Copyright 2013 The LUCI Authors. All rights reserved. 3 # Copyright 2013 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 datetime 7 import datetime
8 import itertools 8 import itertools
9 import json 9 import json
10 import logging 10 import logging
11 import os 11 import os
12 import re 12 import re
13 import sys 13 import sys
14 import unittest 14 import unittest
15 import urllib 15 import urllib
16 16
17 # Setups environment. 17 # Setups environment.
18 import test_env_handlers 18 import test_env_handlers
19 19
20 import webtest 20 import webtest
21 21
22 from google.appengine.ext import deferred 22 from google.appengine.ext import deferred
23 23
24 import handlers_frontend 24 import handlers_frontend
25 from components import template 25 from components import template
26 from server import bot_code 26 from server import bot_code
27 from server import bot_management 27 from server import bot_management
28 28 from server import task_result
29 29
30 class AppTestBase(test_env_handlers.AppTestBase): 30 class AppTestBase(test_env_handlers.AppTestBase):
31 def setUp(self): 31 def setUp(self):
32 super(AppTestBase, self).setUp() 32 super(AppTestBase, self).setUp()
33 # By default requests in tests are coming from bot with fake IP. 33 # By default requests in tests are coming from bot with fake IP.
34 app = handlers_frontend.create_application(True) 34 app = handlers_frontend.create_application(True)
35 app.router.add(('/_ah/queue/deferred', deferred.TaskHandler)) 35 app.router.add(('/_ah/queue/deferred', deferred.TaskHandler))
36 self.app = webtest.TestApp( 36 self.app = webtest.TestApp(
37 app, 37 app,
38 extra_environ={ 38 extra_environ={
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 473
474 # Only cron job requests can be gets for this handler. 474 # Only cron job requests can be gets for this handler.
475 response = self.app.get(cron_job_url, status=403) 475 response = self.app.get(cron_job_url, status=403)
476 self.assertEqual( 476 self.assertEqual(
477 '403 Forbidden\n\nAccess was denied to this resource.\n\n ' 477 '403 Forbidden\n\nAccess was denied to this resource.\n\n '
478 'Only internal cron jobs can do this ', 478 'Only internal cron jobs can do this ',
479 response.body) 479 response.body)
480 # The actual number doesn't matter, just make sure they are unqueued. 480 # The actual number doesn't matter, just make sure they are unqueued.
481 self.execute_tasks() 481 self.execute_tasks()
482 482
483
484 def testCronBotsAggregateTask(self): 483 def testCronBotsAggregateTask(self):
485 # Tests that the aggregation works 484 # Tests that the aggregation works
486 now = datetime.datetime(2010, 1, 2, 3, 4, 5) 485 now = datetime.datetime(2010, 1, 2, 3, 4, 5)
487 self.mock_now(now) 486 self.mock_now(now)
488 487
489 bot_management.bot_event( 488 bot_management.bot_event(
490 event_type='bot_connected', bot_id='id1', 489 event_type='bot_connected', bot_id='id1',
491 external_ip='8.8.4.4', authenticated_as='bot:whitelisted-ip', 490 external_ip='8.8.4.4', authenticated_as='bot:whitelisted-ip',
492 dimensions={'foo': ['beta'], 'id': ['id1']}, state={'ram': 65}, 491 dimensions={'foo': ['beta'], 'id': ['id1']}, state={'ram': 65},
493 version='123456789', quarantined=False, task_id=None, task_name=None) 492 version='123456789', quarantined=False, task_id=None, task_name=None)
494 bot_management.bot_event( 493 bot_management.bot_event(
495 event_type='bot_connected', bot_id='id2', 494 event_type='bot_connected', bot_id='id2',
496 external_ip='8.8.4.4', authenticated_as='bot:whitelisted-ip', 495 external_ip='8.8.4.4', authenticated_as='bot:whitelisted-ip',
497 dimensions={'foo': ['alpha'], 'id': ['id2']}, state={'ram': 65}, 496 dimensions={'foo': ['alpha'], 'id': ['id2']}, state={'ram': 65},
498 version='123456789', quarantined=True, task_id='987', task_name=None) 497 version='123456789', quarantined=True, task_id='987', task_name=None)
499 498
500 self.app.get('/internal/cron/aggregate_bots_dimensions', 499 self.app.get('/internal/cron/aggregate_bots_dimensions',
501 headers={'X-AppEngine-Cron': 'true'}, status=200) 500 headers={'X-AppEngine-Cron': 'true'}, status=200)
502 actual = bot_management.DimensionAggregation.KEY.get() 501 actual = bot_management.DimensionAggregation.KEY.get()
503 expected = bot_management.DimensionAggregation( 502 expected = bot_management.DimensionAggregation(
504 key=bot_management.DimensionAggregation.KEY, 503 key=bot_management.DimensionAggregation.KEY,
505 dimensions=[ 504 dimensions=[
506 bot_management.DimensionValues( 505 bot_management.DimensionValues(
507 dimension='foo', values=['alpha', 'beta']) 506 dimension='foo', values=['alpha', 'beta'])
508 ], 507 ],
509 ts=now) 508 ts=now)
510 self.assertEqual(expected, actual) 509 self.assertEqual(expected, actual)
511 510
511 def testCronTagsAggregateTask(self):
512 self.set_as_admin()
513 now = datetime.datetime(2011, 1, 2, 3, 4, 5)
514 self.mock_now(now)
515
516 self.client_create_task_raw(tags=['alpha:beta', 'gamma:delta'])
517 self.client_create_task_raw(tags=['alpha:epsilon', 'zeta:theta'])
518
519 self.app.get('/internal/cron/aggregate_tasks_tags',
520 headers={'X-AppEngine-Cron': 'true'}, status=200)
521 actual = task_result.TagAggregation.KEY.get()
522 expected = task_result.TagAggregation(
523 key=task_result.TagAggregation.KEY,
524 tags=[
525 task_result.TagValues(tag='alpha', values=['beta', 'epsilon']),
526 task_result.TagValues(tag='gamma', values=['delta']),
527 task_result.TagValues(tag='os', values=['Amiga']),
528 task_result.TagValues(tag='pool', values=['default']),
529 task_result.TagValues(tag='priority', values=['10']),
530 task_result.TagValues(tag='user', values=['joe@localhost']),
531 task_result.TagValues(tag='zeta', values=['theta']),
532
533 ],
534 ts=now)
535 self.assertEqual(expected, actual)
536
512 def testCronTriggerTask(self): 537 def testCronTriggerTask(self):
513 triggers = ( 538 triggers = (
514 '/internal/cron/trigger_cleanup_data', 539 '/internal/cron/trigger_cleanup_data',
515 ) 540 )
516 541
517 for url in triggers: 542 for url in triggers:
518 response = self.app.get( 543 response = self.app.get(
519 url, headers={'X-AppEngine-Cron': 'true'}, status=200) 544 url, headers={'X-AppEngine-Cron': 'true'}, status=200)
520 self.assertEqual('Success.', response.body) 545 self.assertEqual('Success.', response.body)
521 self.assertEqual(1, self.execute_tasks()) 546 self.assertEqual(1, self.execute_tasks())
(...skipping 19 matching lines...) Expand all
541 url, headers={'X-AppEngine-QueueName': 'bogus name'}, status=403) 566 url, headers={'X-AppEngine-QueueName': 'bogus name'}, status=403)
542 567
543 568
544 if __name__ == '__main__': 569 if __name__ == '__main__':
545 if '-v' in sys.argv: 570 if '-v' in sys.argv:
546 unittest.TestCase.maxDiff = None 571 unittest.TestCase.maxDiff = None
547 logging.basicConfig( 572 logging.basicConfig(
548 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL, 573 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL,
549 format='%(levelname)-7s %(filename)s:%(lineno)3d %(message)s') 574 format='%(levelname)-7s %(filename)s:%(lineno)3d %(message)s')
550 unittest.main() 575 unittest.main()
OLDNEW
« no previous file with comments | « appengine/swarming/handlers_endpoints_test.py ('k') | appengine/swarming/server/task_result.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698