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)
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)
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') ]
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'