def test_http_task_scheduled_immediately_sends_correct_request(self): queue_name = 'queue' dummy_url = '/task/dummy_handler' payload = { 'fn_identifier': taskqueue_services.FUNCTION_ID_DELETE_EXPLORATIONS, 'args': [['1', '2', '3']], 'kwargs': {} } task_name = 'task1' def mock_create_task(parent, task, retry=None): self.assertIsInstance(retry, retry_lib.Retry) self.assertEqual( parent, u'projects/dev-project-id/locations/us-central1/queues/queue') self.assertEqual( task, { 'http_request': { 'http_method': 1, 'url': '%s%s' % (feconf.OPPIA_SITE_URL, dummy_url), 'headers': { 'Content-type': 'application/json' }, 'body': json.dumps(payload).encode() }, 'name': task_name } ) return self.Response(task_name) with self.swap( cloud_taskqueue_services.CLIENT, 'create_task', mock_create_task): cloud_taskqueue_services.create_http_task( queue_name, dummy_url, payload=payload, task_name=task_name)
def test_http_task_scheduled_for_later_sends_correct_request(self) -> None: queue_name = 'queue' dummy_url = '/task/dummy_handler' payload = { 'fn_identifier': (taskqueue_services.FUNCTION_ID_DELETE_EXPS_FROM_USER_MODELS), 'args': [['1', '2', '3']], 'kwargs': {} } # Create Timestamp protobuf. datetime_to_execute_task = (datetime.datetime.utcnow() + datetime.timedelta(seconds=20)) timestamp = timestamp_pb2.Timestamp() timestamp.FromDatetime(datetime_to_execute_task) task_name = 'task1' # In the type annotation below, task is of type Dict[str, Any] # because it mocks the behaviour of # cloud_taskqueue_services.CLIENT.create_task. def mock_create_task( parent: str, task: Dict[str, Any], retry: Optional[retry_lib.Retry] = None ) -> CloudTaskqueueServicesUnitTests.Response: self.assertIsInstance(retry, retry_lib.Retry) self.assertEqual( parent, u'projects/dev-project-id/locations/us-central1/queues/queue') self.assertEqual( task, { 'app_engine_http_request': { 'http_method': (tasks_v2.types.target_pb2.HttpMethod.POST), 'relative_uri': dummy_url, 'headers': { 'Content-type': 'application/json' }, 'body': json.dumps(payload).encode() }, 'schedule_time': timestamp, 'name': task_name }) return self.Response(task_name) with self.swap(cloud_taskqueue_services.CLIENT, 'create_task', mock_create_task): cloud_taskqueue_services.create_http_task( queue_name, dummy_url, payload=payload, scheduled_for=datetime_to_execute_task, task_name=task_name)
def test_http_task_scheduled_for_later_sends_correct_request(self): queue_name = 'queue' dummy_url = '/task/dummy_handler' payload = { 'fn_identifier': taskqueue_services.FUNCTION_ID_DELETE_EXPLORATIONS, 'args': [['1', '2', '3']], 'kwargs': {} } # Create Timestamp protobuf. datetime_to_execute_task = (datetime.datetime.utcnow() + datetime.timedelta(seconds=20)) timestamp = timestamp_pb2.Timestamp() timestamp.FromDatetime(datetime_to_execute_task) task_name = 'task1' def mock_create_task(parent, task, retry): self.assertIsInstance(retry, retry_lib.Retry) self.assertEqual( parent, u'projects/dev-project-id/locations/us-central1/queues/queue') self.assertEqual( task, { 'app_engine_http_request': { 'http_method': (tasks_v2.types.target_pb2.HttpMethod.POST), 'relative_uri': dummy_url, 'headers': { 'Content-type': 'application/json' }, 'body': json.dumps(payload).encode() }, 'schedule_time': timestamp, 'name': task_name }) return self.Response(task_name) with self.swap(cloud_taskqueue_services.CLIENT, 'create_task', mock_create_task): cloud_taskqueue_services.create_http_task( queue_name, dummy_url, payload=payload, scheduled_for=datetime_to_execute_task, task_name=task_name)
def test_http_task_scheduled_immediately_sends_correct_request(self): queue_name = 'queue' dummy_url = '/task/dummy_handler' payload = { 'fn_identifier': ( taskqueue_services.FUNCTION_ID_DELETE_EXPS_FROM_USER_MODELS), 'args': [['1', '2', '3']], 'kwargs': {} } task_name = 'task1' def mock_create_task(parent, task, retry=None): self.assertIsInstance(retry, retry_lib.Retry) self.assertEqual( parent, u'projects/dev-project-id/locations/us-central1/queues/queue') self.assertEqual( task, { 'app_engine_http_request': { 'http_method': ( tasks_v2.types.target_pb2.HttpMethod.POST), 'relative_uri': dummy_url, 'headers': { 'Content-type': 'application/json' }, 'body': json.dumps(payload).encode() }, 'name': task_name } ) return self.Response(task_name) with self.swap( cloud_taskqueue_services.CLIENT, 'create_task', mock_create_task): cloud_taskqueue_services.create_http_task( queue_name, dummy_url, payload=payload, task_name=task_name)