コード例 #1
0
def test_file_memory_node():
    mem = FileMemory(filename, tree_conf)

    with pytest.raises(ReachedEndOfFile):
        mem.get_node(3)

    mem.set_node(node)
    assert node == mem.get_node(3)

    mem.close()
コード例 #2
0
def test_file_memory_node(clean_file):
    mem = FileMemory(filename, tree_conf)

    with pytest.raises(ValueError):
        mem.get_node(3)

    mem.set_node(node)
    rv = mem.get_node(3)
    print(node, rv)
    assert node == rv

    mem.close()
コード例 #3
0
ファイル: test_memory.py プロジェクト: fuxiocteract/bplustree
def test_file_memory_write_transaction_error():
    mem = FileMemory(filename, tree_conf)
    mem._lock = mock.Mock()
    mem._cache[424242] = node

    with pytest.raises(ValueError):
        with mem.write_transaction:
            mem.set_node(node)
            assert mem._wal._not_committed_pages == {3: 9}
            assert mem._wal._committed_pages == {}
            assert mem._lock.writer_lock.acquire.call_count == 1
            raise ValueError('Foo')

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {}
    assert mem._lock.writer_lock.release.call_count == 1
    assert mem._cache.get(424242) is None
コード例 #4
0
ファイル: test_memory.py プロジェクト: fuxiocteract/bplustree
def test_file_memory_node():
    mem = FileMemory(filename, tree_conf)

    with pytest.raises(ReachedEndOfFile):
        mem.get_node(3)

    mem.set_node(node)
    assert node == mem.get_node(3)

    mem.close()
コード例 #5
0
def test_file_memory_write_transaction_error():
    mem = FileMemory(filename, tree_conf)
    mem._lock = mock.Mock()
    mem._cache[424242] = node

    with pytest.raises(ValueError):
        with mem.write_transaction:
            mem.set_node(node)
            assert mem._wal._not_committed_pages == {3: 9}
            assert mem._wal._committed_pages == {}
            assert mem._lock.writer_lock.acquire.call_count == 1
            raise ValueError('Foo')

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {}
    assert mem._lock.writer_lock.release.call_count == 1
    assert mem._cache.get(424242) is None
コード例 #6
0
def test_file_memory_write_transaction():
    mem = FileMemory(filename, tree_conf)
    mem._lock = mock.Mock()

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {}

    with mem.write_transaction:
        mem.set_node(node)
        assert mem._wal._not_committed_pages == {3: 9}
        assert mem._wal._committed_pages == {}
        assert mem._lock.writer_lock.acquire.call_count == 1

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {3: 9}
    assert mem._lock.writer_lock.release.call_count == 1
    assert mem._lock.reader_lock.acquire.call_count == 0

    with mem.read_transaction:
        assert mem._lock.reader_lock.acquire.call_count == 1
        assert node == mem.get_node(3)

    assert mem._lock.reader_lock.release.call_count == 1
    mem.close()
コード例 #7
0
ファイル: test_memory.py プロジェクト: fuxiocteract/bplustree
def test_file_memory_write_transaction():
    mem = FileMemory(filename, tree_conf)
    mem._lock = mock.Mock()

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {}

    with mem.write_transaction:
        mem.set_node(node)
        assert mem._wal._not_committed_pages == {3: 9}
        assert mem._wal._committed_pages == {}
        assert mem._lock.writer_lock.acquire.call_count == 1

    assert mem._wal._not_committed_pages == {}
    assert mem._wal._committed_pages == {3: 9}
    assert mem._lock.writer_lock.release.call_count == 1
    assert mem._lock.reader_lock.acquire.call_count == 0

    with mem.read_transaction:
        assert mem._lock.reader_lock.acquire.call_count == 1
        assert node == mem.get_node(3)

    assert mem._lock.reader_lock.release.call_count == 1
    mem.close()
コード例 #8
0
def test_file_memory_freelist():
    mem = FileMemory(filename, tree_conf)
    assert mem.next_available_page == 1
    assert mem._traverse_free_list() == (None, None)

    mem.del_page(1)
    assert mem._traverse_free_list() == (None,
                                         FreelistNode(tree_conf,
                                                      page=1,
                                                      next_page=None))
    assert mem.next_available_page == 1
    assert mem._traverse_free_list() == (None, None)

    mem.del_page(1)
    mem.del_page(2)
    assert mem._traverse_free_list() == (FreelistNode(tree_conf,
                                                      page=1,
                                                      next_page=2),
                                         FreelistNode(tree_conf,
                                                      page=2,
                                                      next_page=None))
    mem.del_page(3)
    assert mem._traverse_free_list() == (FreelistNode(tree_conf,
                                                      page=2,
                                                      next_page=3),
                                         FreelistNode(tree_conf,
                                                      page=3,
                                                      next_page=None))

    assert mem._pop_from_freelist() == 3
    assert mem._pop_from_freelist() == 2
    assert mem._pop_from_freelist() == 1
    assert mem._pop_from_freelist() is None
コード例 #9
0
def test_file_memory_next_available_page():
    mem = FileMemory(filename, tree_conf)
    for i in range(1, 100):
        assert mem.next_available_page == i
コード例 #10
0
def test_file_memory_metadata():
    mem = FileMemory(filename, tree_conf)
    with pytest.raises(ValueError):
        mem.get_metadata()
    mem.set_metadata(6, tree_conf)
    assert mem.get_metadata() == (6, tree_conf)
コード例 #11
0
def test_file_memory_repr():
    mem = FileMemory(filename, tree_conf)
    assert repr(mem) == '<FileMemory: {}>'.format(filename)
    mem.close()
コード例 #12
0
def test_file_memory_fsync(mock_fsync, clean_file):
    mem = FileMemory(filename, tree_conf, fsync=Fsync.NEVER)
    mem._write_page(0, bytes(tree_conf.page_size))
    mem.close()
    mock_fsync.assert_not_called()

    mem = FileMemory(filename, tree_conf, fsync=Fsync.ALWAYS)
    mem._write_page(0, bytes(tree_conf.page_size))
    mem.close()
    mock_fsync.assert_called_with(mock.ANY)
コード例 #13
0
ファイル: test_memory.py プロジェクト: fuxiocteract/bplustree
def test_file_memory_metadata():
    mem = FileMemory(filename, tree_conf)
    with pytest.raises(ValueError):
        mem.get_metadata()
    mem.set_metadata(6, tree_conf)
    assert mem.get_metadata() == (6, tree_conf)
コード例 #14
0
ファイル: test_memory.py プロジェクト: fuxiocteract/bplustree
def test_file_memory_repr():
    mem = FileMemory(filename, tree_conf)
    assert repr(mem) == '<FileMemory: {}>'.format(filename)
    mem.close()