def _client_create_task(self, properties=None, **kwargs): """Creates an isolated command TaskRequest via the Cloud Endpoints API.""" params = { 'dimensions': [ { 'key': 'os', 'value': 'Amiga' }, ], 'env': [], 'execution_timeout_secs': 3600, 'io_timeout_secs': 1200, } params.update(properties or {}) props = swarming_rpcs.TaskProperties(**params) params = { 'expiration_secs': 24 * 60 * 60, 'name': 'hi', 'priority': 10, 'tags': [], 'user': '******', } params.update(kwargs) request = swarming_rpcs.TaskRequest(properties=props, **params) response = self.endpoint_call(handlers_endpoints.SwarmingTasksService, 'new', request) return response, response['task_id']
def client_create_task_isolated(self, properties=None, **kwargs): """Creates a TaskRequest via the Cloud Endpoints API.""" params = { 'dimensions': [ {'key': 'os', 'value': 'Amiga'}, ], 'env': [], 'execution_timeout_secs': 3600, 'io_timeout_secs': 1200, 'inputs_ref': { 'isolated': '0123456789012345678901234567890123456789', 'isolatedserver': 'http://*****:*****@example.com', 'localhost') try: response = api.call_api( 'new', body=json.loads(protojson.encode_message(request))) finally: endpoints.get_current_user = old_get_current_user response = response.json return response, response['task_id']
def test_new_ok_isolated(self): """Asserts that new generates appropriate metadata.""" self.mock(random, 'getrandbits', lambda _: 0x88) now = datetime.datetime(2010, 1, 2, 3, 4, 5) self.mock_now(now) str_now = unicode(now.strftime(self.DATETIME_NO_MICRO)) request = swarming_rpcs.TaskRequest( expiration_secs=30, name='job1', priority=200, properties=swarming_rpcs.TaskProperties( dimensions=[ swarming_rpcs.StringPair(key='foo', value='bar'), swarming_rpcs.StringPair(key='a', value='b'), ], env=[ swarming_rpcs.StringPair(key='PATH', value='/'), ], execution_timeout_secs=30, inputs_ref=swarming_rpcs.FilesRef( isolated='1' * 40, isolatedserver='http://*****:*****@localhost', ], u'user': u'joe@localhost', }, u'task_id': u'5cee488008810', } response = self.call_api('new', body=message_to_dict(request)) self.assertEqual(expected, response.json)
def test_new_ok_deduped(self): """Asserts that new returns task result for deduped.""" # Run a task to completion. self.mock(random, 'getrandbits', lambda _: 0x88) now = self.mock_now(datetime.datetime(2010, 1, 2, 3, 4, 5)) str_now = unicode(now.strftime(self.DATETIME_NO_MICRO)) self.client_create_task_raw( name='task', tags=['project:yay', 'commit:post', 'os:Win'], properties=dict(idempotent=True)) self.set_as_bot() self.bot_run_task() self.mock(random, 'getrandbits', lambda _: 0x66) now_30 = self.mock_now(now, 30) str_now_30 = unicode(now_30.strftime(self.DATETIME_NO_MICRO)) self.set_as_user() request = swarming_rpcs.NewTaskRequest( expiration_secs=30, name='job1', priority=200, properties=swarming_rpcs.TaskProperties( command=['python', 'run_test.py'], dimensions=[ swarming_rpcs.StringPair(key='os', value='Amiga'), swarming_rpcs.StringPair(key='pool', value='default'), ], execution_timeout_secs=3600, idempotent=True, io_timeout_secs=1200, packages=[ swarming_rpcs.CipdPackage( package_name='rm', version=test_env_handlers.PINNED_PACKAGE_VERSION), ]), tags=['foo:bar'], user='******') expected = { u'request': { u'authenticated': u'user:[email protected]', u'created_ts': str_now_30, u'expiration_secs': u'30', u'name': u'job1', u'priority': u'200', u'properties': { u'command': [u'python', u'run_test.py'], u'dimensions': [ {u'key': u'os', u'value': u'Amiga'}, {u'key': u'pool', u'value': u'default'}, ], u'execution_timeout_secs': u'3600', u'grace_period_secs': u'30', u'idempotent': True, u'io_timeout_secs': u'1200', u'packages': [{ u'package_name': u'rm', u'version': test_env_handlers.PINNED_PACKAGE_VERSION, }], }, u'tags': [ u'foo:bar', u'os:Amiga', u'pool:default', u'priority:200', u'user:joe@localhost', ], u'user': u'joe@localhost', }, u'task_id': u'5cf59b8006610', u'task_result': { u'bot_dimensions': [ {u'key': u'id', u'value': [u'bot1']}, {u'key': u'os', u'value': [u'Amiga']}, {u'key': u'pool', u'value': [u'default']}, ], u'bot_id': u'bot1', u'bot_version': self.bot_version, u'completed_ts': str_now, u'cost_saved_usd': 0.1, u'created_ts': str_now_30, u'deduped_from': u'5cee488008811', u'duration': 0.1, u'exit_code': u'0', u'failure': False, u'internal_failure': False, u'modified_ts': str_now_30, u'name': u'job1', u'server_versions': [u'v1a'], u'started_ts': str_now, u'state': u'COMPLETED', u'tags': [ u'foo:bar', u'os:Amiga', u'pool:default', u'priority:200', u'user:joe@localhost', ], u'task_id': u'5cf59b8006610', u'try_number': u'0', u'user': u'joe@localhost', }, } response = self.call_api('new', body=message_to_dict(request)) self.assertEqual(expected, response.json) request = swarming_rpcs.TasksRequest(state=swarming_rpcs.TaskState.DEDUPED) expected = { u'items': [ { u'bot_dimensions': [ {u'key': u'id', u'value': [u'bot1']}, {u'key': u'os', u'value': [u'Amiga']}, {u'key': u'pool', u'value': [u'default']}, ], u'bot_id': u'bot1', u'bot_version': self.bot_version, u'completed_ts': str_now, u'cost_saved_usd': 0.1, u'created_ts': str_now_30, u'deduped_from': u'5cee488008811', u'duration': 0.1, u'exit_code': u'0', u'failure': False, u'internal_failure': False, u'modified_ts': str_now_30, u'name': u'job1', u'server_versions': [u'v1a'], u'started_ts': str_now, u'state': u'COMPLETED', u'tags': [ u'foo:bar', u'os:Amiga', u'pool:default', u'priority:200', u'user:joe@localhost', ], u'task_id': u'5cf59b8006610', u'try_number': u'0', u'user': u'joe@localhost', }, ], u'now': str_now_30, } self.assertEqual( expected, self.call_api('list', body=message_to_dict(request)).json) # Assert the entity presence. self.assertEqual(2, task_request.TaskRequest.query().count()) self.assertEqual(2, task_result.TaskResultSummary.query().count()) self.assertEqual(1, task_result.TaskRunResult.query().count()) # Deduped task have no performance data associated. request = swarming_rpcs.TasksRequest( state=swarming_rpcs.TaskState.DEDUPED, include_performance_stats=True) actual = self.call_api('list', body=message_to_dict(request)).json self.assertEqual(expected, actual) # Use the occasion to test 'count' and 'requests'. start = utils.datetime_to_timestamp(now) / 1000000. - 1 end = utils.datetime_to_timestamp(now_30) / 1000000. + 1 request = swarming_rpcs.TasksCountRequest( start=start, end=end, state=swarming_rpcs.TaskState.DEDUPED) self.assertEqual( {u'now': str_now_30, u'count': u'1'}, self.call_api('count', body=message_to_dict(request)).json) request = swarming_rpcs.TasksRequest(start=start, end=end) expected = { u'items': [ { u'authenticated': u'user:[email protected]', u'created_ts': str_now_30, u'expiration_secs': u'30', u'name': u'job1', u'priority': u'200', u'properties': { u'command': [u'python', u'run_test.py'], u'dimensions': [ {u'key': u'os', u'value': u'Amiga'}, {u'key': u'pool', u'value': u'default'}, ], u'execution_timeout_secs': u'3600', u'grace_period_secs': u'30', u'idempotent': True, u'io_timeout_secs': u'1200', u'packages': [{ u'package_name': u'rm', u'version': test_env_handlers.PINNED_PACKAGE_VERSION, }], }, u'tags': [ u'foo:bar', u'os:Amiga', u'pool:default', u'priority:200', u'user:joe@localhost', ], u'user': u'joe@localhost', }, { u'authenticated': u'user:[email protected]', u'created_ts': str_now, u'expiration_secs': u'86400', u'name': u'task', u'priority': u'10', u'properties': { u'command': [u'python', u'run_test.py'], u'dimensions': [ {u'key': u'os', u'value': u'Amiga'}, {u'key': u'pool', u'value': u'default'}, ], u'execution_timeout_secs': u'3600', u'grace_period_secs': u'30', u'idempotent': True, u'io_timeout_secs': u'1200', u'packages': [{ u'package_name': u'rm', u'version': test_env_handlers.PINNED_PACKAGE_VERSION, }], }, u'tags': [ u'commit:post', u'os:Amiga', u'os:Win', u'pool:default', u'priority:10', u'project:yay', u'user:joe@localhost', ], u'user': u'joe@localhost', }, ], u'now': str_now_30, } self.assertEqual( expected, self.call_api('requests', body=message_to_dict(request)).json)
def test_new_ok_raw(self): """Asserts that new generates appropriate metadata.""" self.mock(random, 'getrandbits', lambda _: 0x88) now = datetime.datetime(2010, 1, 2, 3, 4, 5) self.mock_now(now) str_now = unicode(now.strftime(self.DATETIME_NO_MICRO)) request = swarming_rpcs.NewTaskRequest( expiration_secs=30, name='job1', priority=200, properties=swarming_rpcs.TaskProperties( command=['rm', '-rf', '/'], packages=[ swarming_rpcs.CipdPackage(package_name='rm', version='latest'), ], dimensions=[ swarming_rpcs.StringPair(key='pool', value='default'), ], env=[ swarming_rpcs.StringPair(key='PATH', value='/'), ], execution_timeout_secs=30, io_timeout_secs=30), tags=['foo:bar'], user='******', pubsub_topic='projects/abc/topics/def', pubsub_auth_token='secret that must not be shown', pubsub_userdata='userdata') expected = { u'request': { u'authenticated': u'user:[email protected]', u'created_ts': str_now, u'expiration_secs': u'30', u'name': u'job1', u'priority': u'200', u'properties': { u'command': [u'rm', u'-rf', u'/'], u'packages': [{ u'package_name': u'rm', u'version': u'latest', }], u'dimensions': [ {u'key': u'pool', u'value': u'default'}, ], u'env': [ {u'key': u'PATH', u'value': u'/'}, ], u'execution_timeout_secs': u'30', u'grace_period_secs': u'30', u'idempotent': False, u'io_timeout_secs': u'30', }, u'pubsub_topic': u'projects/abc/topics/def', u'pubsub_userdata': u'userdata', u'tags': [ u'foo:bar', u'pool:default', u'priority:200', u'user:joe@localhost', ], u'user': u'joe@localhost', }, u'task_id': u'5cee488008810', } response = self.call_api('new', body=message_to_dict(request)) self.assertEqual(expected, response.json)