Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
    ])
Exemple #4
0
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)
Exemple #5
0
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