コード例 #1
0
def test_find_direct_conflicts():
    addstuff()
    changestuff()
    session = Session()
    message_ops = create_fake_operations()
    conflicts = find_direct_conflicts(message_ops,
                                      session.query(models.Operation).all())
    expected = [
        (message_ops[0],
         models.Operation(row_id=3, content_type_id=ct_b_id,
                          command='d')),  # b3
        (message_ops[1],
         models.Operation(row_id=1, content_type_id=ct_a_id, command='u'))
    ]  # a1
    logging.info(conflicts)
    logging.info(expected)
    assert repr(conflicts) == repr(expected)
コード例 #2
0
def test_find_dependency_conflicts():
    addstuff()
    changestuff()
    session = Session()
    message_ops = create_fake_operations()
    conflicts = find_dependency_conflicts(
        message_ops,
        session.query(models.Operation).all(), session)
    expected = [
        (
            message_ops[1],  # a1
            models.Operation(row_id=1, content_type_id=ct_b_id,
                             command='i')),  # b1
        (
            message_ops[2],  # a2
            models.Operation(row_id=2, content_type_id=ct_b_id,
                             command='i')),  # b2
        (
            message_ops[2],  # a2
            models.Operation(row_id=2, content_type_id=ct_b_id, command='u'))
    ]  # b2
    logging.info(conflicts)
    logging.info(expected)
    assert repr(conflicts) == repr(expected)
コード例 #3
0
def create_fake_operations():
    return [
        models.Operation(row_id=3, content_type_id=ct_b_id, command='u'),
        models.Operation(row_id=1, content_type_id=ct_a_id, command='d'),
        models.Operation(row_id=2, content_type_id=ct_a_id, command='d')
    ]
コード例 #4
0
ファイル: track_tests.py プロジェクト: zworkb/python-sync-db
def test_compression_correctness():
    addstuff()
    changestuff()
    session = Session()
    ops = compressed_operations(session.query(models.Operation).all())
    groups = group_by(lambda op: (op.content_type_id, op.row_id), ops)
    for g in groups.values():
        logging.info(g)
        assert len(g) == 1
    # assert correctness when compressing operations from a pull
    # message
    pull_ops = [
        models.Operation(command='i', content_type_id=1, row_id=1, order=1),
        models.Operation(command='d', content_type_id=1, row_id=1, order=2),
        models.Operation(command='i', content_type_id=1, row_id=1, order=3),
        models.Operation(command='u', content_type_id=1, row_id=1, order=4),
        # result of above should be a single 'i'
        models.Operation(command='u', content_type_id=2, row_id=1, order=5),
        models.Operation(command='d', content_type_id=2, row_id=1, order=6),
        models.Operation(command='i', content_type_id=2, row_id=1, order=7),
        models.Operation(command='d', content_type_id=2, row_id=1, order=8),
        # result of above should be a single 'd'
        models.Operation(command='d', content_type_id=3, row_id=1, order=9),
        models.Operation(command='i', content_type_id=3, row_id=1, order=10),
        # result of above should be an 'u'
        models.Operation(command='i', content_type_id=4, row_id=1, order=11),
        models.Operation(command='u', content_type_id=4, row_id=1, order=12),
        models.Operation(command='d', content_type_id=4, row_id=1, order=13),
        # result of above should be no operations
        models.Operation(command='d', content_type_id=5, row_id=1, order=14),
        models.Operation(command='i', content_type_id=5, row_id=1, order=15),
        models.Operation(command='d', content_type_id=5, row_id=1, order=16),
        # result of above should be a single 'd'
        models.Operation(command='u', content_type_id=6, row_id=1, order=17),
        models.Operation(command='d', content_type_id=6, row_id=1, order=18),
        models.Operation(command='i', content_type_id=6, row_id=1, order=19),
        # result of above should be an 'u'
        models.Operation(command='d', content_type_id=7, row_id=1, order=20),
        models.Operation(command='i', content_type_id=7, row_id=1, order=21),
        models.Operation(command='u', content_type_id=7, row_id=1, order=22)
        # result of above should be an 'u'
    ]
    compressed = compressed_operations(pull_ops)
    logging.info("len(compressed) == {0}".format(len(compressed)))
    logging.info("\n".join(repr(op) for op in compressed))
    assert len(compressed) == 6
    assert compressed[0].command == 'i'
    assert compressed[1].command == 'd'
    assert compressed[2].command == 'u'
    assert compressed[3].command == 'd'
    assert compressed[4].command == 'u'
    assert compressed[5].command == 'u'