Exemplo n.º 1
0
def test_closed(blocksize):
    raw = io.BytesIO()
    b = BlockBuffer(raw, blocksize)
    b.close()

    assert b.closed
    assert raw.closed

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.size

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.seekable()

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.readable()

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.tell()

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.seek(0)

    with pytest.raises(ValueError, match="I/O operation on closed file."):
        b.read()

    # closing twice works
    b.close()
Exemplo n.º 2
0
def test_caching_chunks1(raw):
    b = BlockBuffer(raw, 2)

    b.read(1)
    assert raw.records == [(0, 2)]

    b.seek(0)
    b.read()
    assert raw.records == [(0, 2), (2, 4)]
Exemplo n.º 3
0
def test_caching_reuse(raw):
    b = BlockBuffer(raw, 3)

    b.read(1)
    assert raw.records == [(0, 3)]

    b.seek(0)
    b.read(2)
    assert raw.records == [(0, 3)]
Exemplo n.º 4
0
def test_giga():
    raw_size = 100 * 1024**3  # 100 GB
    raw_inner = _ZeroFile(raw_size)
    raw = _ReadRecordWrapper(raw_inner)
    blocksize = 4 * 1024**2  # 4MB
    b = BlockBuffer(raw, blocksize)

    assert b.size == raw_size
    assert b.read(10) == b"\0" * 10
    assert b.seek(-10, 2) == raw_size - 10
    assert b.read(10) == b"\0" * 10
    assert raw.records == [(0, blocksize), (raw_size - blocksize, blocksize)]
Exemplo n.º 5
0
def test_real_file(tmpdir, blocksize):
    path = tmpdir.join("test_real_file.bin").strpath
    with open(path, "wb") as fp:
        fp.write(b"foxbar")

    real_file = open(path, "rb")

    b = BlockBuffer(real_file, blocksize)

    assert not b.closed

    assert b.size == 6
    assert b.seekable() is True
    assert b.readable() is True
    assert b.tell() == 0
    assert b.seek(1) == 1
    assert b.read() == b"oxbar"

    # final close
    b.close()

    # closing twice works
    b.close()
Exemplo n.º 6
0
def test_caching_remainder(raw):
    b = BlockBuffer(raw, 4)

    b.seek(5)
    b.read()
    assert raw.records == [(4, 2)]