def test_add_to_validation_sqs__adds_correct_event_to_queue(self): uploaded_file = UploadedFile.create( upload_area=self.upload_area, name="file2", content_type="application/octet-stream; dcp-type=data", data="file2_content") validation_scheduler = ValidationScheduler(self.upload_area_id, [uploaded_file]) validation_uuid = validation_scheduler.add_to_validation_sqs( ["filename123"], "test_docker_image", {"variable": "variable"}, "123456") message = self.sqs.meta.client.receive_message( QueueUrl='test_validation_q_url') message_body = json.loads(message['Messages'][0]['Body']) record = UploadDB().get_pg_record("validation", validation_uuid, column='id') self.assertEqual(message_body["filenames"], ["filename123"]) self.assertEqual(message_body["validation_id"], validation_uuid) self.assertEqual(message_body["validator_docker_image"], "test_docker_image") self.assertEqual(message_body["environment"], {"variable": "variable"}) self.assertEqual(message_body["orig_validation_id"], "123456") self.assertEqual(message_body["upload_area_uuid"], uploaded_file.upload_area.uuid) self.assertEqual(record["status"], "SCHEDULING_QUEUED")
def test_check_files_can_be_validated__if_file_is_too_large__returns_true( self): uploaded_file = UploadedFile.create( upload_area=self.upload_area, name="file2", content_type="application/octet-stream; dcp-type=data", data="file2_content") scheduler = ValidationScheduler(self.upload_area_id, [uploaded_file]) file_validatable = scheduler.check_files_can_be_validated() self.assertEqual(True, file_validatable)
def test__create_validation_event__creates_event_with_correct_status(self): uploaded_file = UploadedFile.create( upload_area=self.upload_area, name="file2#", content_type="application/octet-stream; dcp-type=data", data="file2_content") scheduler = ValidationScheduler(self.upload_area_id, [uploaded_file]) validation_id = str(uuid.uuid4()) validation_event = scheduler._create_validation_event( "test_docker_image", validation_id, None) self.assertEqual(validation_event.docker_image, "test_docker_image") self.assertEqual(validation_event.status, "SCHEDULING_QUEUED")
def test__update_validation_event__updates_event_status(self): uploaded_file = UploadedFile.create( upload_area=self.upload_area, name="file2#", content_type="application/octet-stream; dcp-type=data", data="file2_content") scheduler = ValidationScheduler(self.upload_area_id, [uploaded_file]) scheduler.batch_job_id = "123456" validation_id = str(uuid.uuid4()) validation_event = scheduler._create_validation_event( "test_docker_image", validation_id, None) self.assertEqual(validation_event.job_id, None) validation_event = scheduler._update_validation_event( "test_docker_image", validation_id, None) self.assertEqual(validation_event.job_id, "123456") self.assertEqual(validation_event.status, "SCHEDULED")
def schedule_file_validation(event, context): logger.info(f"initiated schedule_file_validation with {event}") unwrapped_event = json.loads(event["Records"][0]["body"]) upload_area_uuid = unwrapped_event["upload_area_uuid"] filenames = unwrapped_event["filenames"] validation_id = unwrapped_event["validation_id"] image = unwrapped_event["validator_docker_image"] env = unwrapped_event["environment"] orig_validation_id = unwrapped_event["orig_validation_id"] upload_area = UploadArea(upload_area_uuid) files = [] for filename in filenames: file = upload_area.uploaded_file(filename) files.append(file) validation_scheduler = ValidationScheduler(upload_area_uuid, files) validation_id = validation_scheduler.schedule_batch_validation( validation_id, image, env, orig_validation_id) logger.info(f"scheduled batch job with {event}")