def test_transcode_and_undo(db, cds_depid, mock_sorenson): """Test TranscodeVideoTask task.""" def get_bucket_keys(): return [o.key for o in list(ObjectVersion.get_by_bucket(bucket))] bucket = deposit_project_resolver(cds_depid).files.bucket filesize = 1024 filename = 'test.mp4' preset_quality = '480p' new_filename = '{0}.mp4'.format(preset_quality) obj = ObjectVersion.create(bucket, key=filename, stream=BytesIO(b'\x00' * filesize)) ObjectVersionTag.create(obj, 'display_aspect_ratio', '16:9') obj_id = str(obj.version_id) db.session.commit() assert get_bucket_keys() == [filename] assert bucket.size == filesize task_s = TranscodeVideoTask().s(version_id=obj_id, preset_quality=preset_quality, sleep_time=0) # Transcode task_s.delay(deposit_id=cds_depid) db.session.add(bucket) keys = get_bucket_keys() assert len(keys) == 2 assert filename in keys assert new_filename in keys assert bucket.size == 2 * filesize # Undo TranscodeVideoTask().clean(version_id=obj_id, preset_quality=preset_quality) db.session.add(bucket) keys = get_bucket_keys() assert len(keys) == 1 assert filename in keys assert new_filename not in keys # file size doesn't change assert bucket.size == 2 * filesize
def test_transcode_too_high_resolutions(db, bucket): """Test trascoding task when it should discard some high resolutions.""" filesize = 1024 filename = 'test.mp4' preset_quality = '480p' obj = ObjectVersion.create(bucket, key=filename, stream=BytesIO(b'\x00' * filesize)) ObjectVersionTag.create(obj, 'display_aspect_ratio', '16:9') ObjectVersionTag.create(obj, 'height', 360) ObjectVersionTag.create(obj, 'width', 640) obj_id = str(obj.version_id) db.session.commit() task_s = TranscodeVideoTask().s(version_id=obj_id, preset_quality=preset_quality, sleep_time=0) # Transcode result = task_s.delay() assert result.status == states.IGNORED
def transcode_task(bucket, filesize, filename, preset_qualities): """Get a transcode task.""" obj = ObjectVersion.create(bucket, key=filename, stream=BytesIO(b'\x00' * filesize)) ObjectVersionTag.create(obj, 'display_aspect_ratio', '16:9') obj_id = str(obj.version_id) db.session.commit() return (obj_id, [ TranscodeVideoTask().s(version_id=obj_id, preset_quality=preset_quality, sleep_time=0) for preset_quality in preset_qualities ])
def test_transcode_2tasks_delete1(db, cds_depid, mock_sorenson): """Test TranscodeVideoTask task when run 2 task and delete 1.""" def get_bucket_keys(): return [o.key for o in list(ObjectVersion.get_by_bucket(bucket))] bucket = deposit_project_resolver(cds_depid).files.bucket filesize = 1024 filename = 'test.mp4' preset_qualities = ['480p', '720p'] new_filenames = ['{0}.mp4'.format(p) for p in preset_qualities] (version_id, [task_s1, task_s2]) = transcode_task(bucket=bucket, filesize=filesize, filename=filename, preset_qualities=preset_qualities) assert get_bucket_keys() == [filename] assert bucket.size == filesize # Transcode task_s1.delay(deposit_id=cds_depid) task_s2.delay(deposit_id=cds_depid) db.session.add(bucket) keys = get_bucket_keys() assert len(keys) == 3 assert new_filenames[0] in keys assert new_filenames[1] in keys assert filename in keys assert bucket.size == (3 * filesize) # Undo TranscodeVideoTask().clean(version_id=version_id, preset_quality=preset_qualities[0]) db.session.add(bucket) keys = get_bucket_keys() assert len(keys) == 2 assert new_filenames[0] not in keys assert new_filenames[1] in keys assert filename in keys assert bucket.size == (3 * filesize)
def test_download_tag(app, db, bucket, mock_sorenson, preset, is_inside): """Test that download tags are generated correctly.""" def create_file(filename, preset_quality, aspect_ratio): obj = ObjectVersion.create(bucket, key=filename, stream=BytesIO(b'\x00' * 1024)) ObjectVersionTag.create(obj, 'display_aspect_ratio', aspect_ratio) return str(obj.version_id) # Setup and run the transcoding task obj_id = create_file('test.mp4', preset, '16:9') db.session.commit() TranscodeVideoTask().s( version_id=obj_id, preset_quality=preset, sleep_time=0 ).apply() # Get the tags from the newly created slave tags = ObjectVersion.query.filter( ObjectVersion.version_id != obj_id).first().get_tags() # Make sure the download tag is set assert tags.get('download') == is_inside