def test_compress_level(compression_method):
    from cloudfiles import CloudFiles, exceptions
    filepath = "/tmp/cloudfiles/compress_level"
    url = "file://" + filepath

    content = b'some_string' * 1000

    compress_levels = range(1, 9, 2)
    for compress_level in compress_levels:
        cf = CloudFiles(url, num_threads=5)
        cf.put('info',
               content,
               compress=compression_method,
               compression_level=compress_level)

        retrieved = cf.get('info')
        assert content == retrieved

        conn = cf._get_connection()
        _, encoding, server_md5, hash_type = conn.get_file("info")
        assert encoding == compression_method
        assert hash_type in ('md5', None)

        assert cf.get('nonexistentfile') is None

        rmtree(filepath)
def test_transfer_semantics(compression):
    from cloudfiles import CloudFiles, exceptions
    path = '/tmp/cloudfiles/xfer'
    rmtree(path)
    cff = CloudFiles('file://' + path)
    cfm = CloudFiles('mem://cloudfiles/xfer')

    N = 128

    content = b'some_string'
    cff.puts(((str(i), content) for i in range(N)), compress=compression)
    assert sorted(list(cff)) == sorted([str(i) for i in range(N)])
    assert [f['content'] for f in cff[:]] == [content] * N

    assert sorted([f['path'] for f in cff[:100]
                   ]) == sorted([str(i) for i in range(N)])[:100]
    assert [f['content'] for f in cff[:100]] == [content] * 100

    cfm[:] = cff
    assert sorted(list(cfm)) == sorted([str(i) for i in range(N)])
    assert [f['content'] for f in cfm[:]] == [content] * N

    cfm.delete(list(cfm))
    assert list(cfm) == []

    cfm.transfer_from('file://' + path)
    assert sorted(list(cfm)) == sorted([str(i) for i in range(N)])
    assert [f['content'] for f in cfm[:]] == [content] * N

    cfm.delete(list(cfm))

    cff.transfer_to(cfm.cloudpath)
    assert sorted(list(cfm)) == sorted([str(i) for i in range(N)])
    assert [f['content'] for f in cfm[:]] == [content] * N
    cfm.delete(list(cfm))

    cff.transfer_to(cfm.cloudpath, reencode='br')
    assert sorted(list(cfm)) == sorted([str(i) for i in range(N)])
    assert [f['content'] for f in cfm[:]] == [content] * N

    data = cfm._get_connection()._data
    data = [os.path.splitext(d)[1] for d in data.keys()]
    assert all([ext == '.br' for ext in data])

    cfm.delete(list(cfm))
    cff.delete(list(cff))