def test_output_parameters():
    go = mock.MagicMock()
    go.log_file = 'abc'

    spec = modelsdl.Specification(
        download_options=options.Download(
            check_file_md5=True,
            chunk_size_bytes=4194304,
            delete_extraneous_destination=False,
            mode=azmodels.StorageModes.Auto,
            overwrite=True,
            recursive=True,
            rename=False,
            restore_file_attributes=False,
            rsa_private_key=None,
        ),
        skip_on_options=options.SkipOn(
            filesize_match=True,
            lmt_ge=False,
            md5_match=True,
        ),
        local_destination_path=mock.MagicMock(),
    )
    ops.output_parameters(go, spec)
    assert util.is_not_empty(go.log_file)

    spec = modelsul.Specification(upload_options=options.Upload(
        chunk_size_bytes=4194304,
        delete_extraneous_destination=False,
        mode=azmodels.StorageModes.Auto,
        one_shot_bytes=0,
        overwrite=True,
        recursive=True,
        rename=False,
        rsa_public_key=None,
        stdin_as_page_blob_size=0,
        store_file_properties=options.FileProperties(
            attributes=True,
            md5=True,
        ),
        strip_components=0,
        vectored_io=None,
    ),
                                  skip_on_options=options.SkipOn(
                                      filesize_match=True,
                                      lmt_ge=False,
                                      md5_match=True,
                                  ),
                                  local_source_path=mock.MagicMock())
    ops.output_parameters(go, spec)
    assert util.is_not_empty(go.log_file)

    spec = modelssc.Specification(synccopy_options=options.SyncCopy(
        delete_extraneous_destination=False,
        dest_mode=azmodels.StorageModes.Auto,
        mode=azmodels.StorageModes.Auto,
        overwrite=True,
        recursive=True,
        rename=False,
    ),
                                  skip_on_options=options.SkipOn(
                                      filesize_match=True,
                                      lmt_ge=False,
                                      md5_match=True,
                                  ))
    ops.output_parameters(go, spec)
    assert util.is_not_empty(go.log_file)
def test_specification(tmpdir):
    lsp = upload.LocalSourcePath()
    lsp.add_paths(['-', '/dev/stdin'])
    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=4194304,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=0,
                overwrite=True,
                recursive=True,
                rename=True,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control='cc',
                    content_type='ct',
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    lsp = upload.LocalSourcePath()
    lsp.add_path(str(tmpdir))
    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=4194304,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=0,
                overwrite=True,
                recursive=True,
                rename=True,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control='cc',
                    content_type='ct',
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    lsp = upload.LocalSourcePath()
    lsp.add_path(str(tmpdir))
    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=-1,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=0,
                overwrite=True,
                recursive=True,
                rename=False,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control='cc',
                    content_type='ct',
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=upload._MAX_BLOCK_BLOB_CHUNKSIZE_BYTES + 1,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=0,
                overwrite=True,
                recursive=True,
                rename=False,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control='cc',
                    content_type='ct',
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=4194304,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=-1,
                overwrite=True,
                recursive=True,
                rename=False,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control='cc',
                    content_type='ct',
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    with pytest.raises(ValueError):
        upload.Specification(
            upload_options=options.Upload(
                access_tier=None,
                chunk_size_bytes=4194304,
                delete_extraneous_destination=False,
                delete_only=False,
                mode=azmodels.StorageModes.Auto,
                one_shot_bytes=upload._MAX_BLOCK_BLOB_ONESHOT_BYTES + 1,
                overwrite=True,
                recursive=True,
                rename=False,
                rsa_public_key=None,
                stdin_as_page_blob_size=0,
                store_file_properties=options.FileProperties(
                    attributes=True,
                    cache_control=None,
                    content_type=None,
                    lmt=None,
                    md5=True,
                ),
                strip_components=0,
                vectored_io=None,
            ),
            skip_on_options=options.SkipOn(
                filesize_match=True,
                lmt_ge=False,
                md5_match=True,
            ),
            local_source_path=lsp,
        )

    spec = upload.Specification(
        upload_options=options.Upload(
            access_tier=None,
            chunk_size_bytes=4194304,
            delete_extraneous_destination=False,
            delete_only=False,
            mode=azmodels.StorageModes.Auto,
            one_shot_bytes=0,
            overwrite=True,
            recursive=True,
            rename=False,
            rsa_public_key=None,
            stdin_as_page_blob_size=0,
            store_file_properties=options.FileProperties(
                attributes=True,
                cache_control=None,
                content_type=None,
                lmt=None,
                md5=True,
            ),
            strip_components=0,
            vectored_io=None,
        ),
        skip_on_options=options.SkipOn(
            filesize_match=True,
            lmt_ge=False,
            md5_match=True,
        ),
        local_source_path=lsp,
    )
    spec.add_azure_destination_path(azops.DestinationPath())
    assert len(spec.destinations) == 1