Ejemplo n.º 1
0
def test_successful_transaction():
    messages = list(make_batch_messages(batch_identifier, [
        {'begin_operation': begin},
        {'mutation_operation': mutation},
        {'commit_operation': commit},
    ]))

    state = None

    state = reserialize(validate_transaction_state(state, 0, messages[0]))
    assert get_oneof_value(state, 'state') == (
        InTransaction(
            publisher=messages[0].header.publisher,
            batch_identifier=batch_identifier
        )
    )
    state = reserialize(validate_transaction_state(state, 1, messages[1]))
    assert get_oneof_value(state, 'state') == (
        InTransaction(
            publisher=messages[1].header.publisher,
            batch_identifier=batch_identifier
        )
    )
    state = reserialize(validate_transaction_state(state, 2, messages[2]))
    assert get_oneof_value(state, 'state') == (
        Committed(
            publisher=messages[2].header.publisher,
            batch_identifier=batch_identifier
        )
    )
Ejemplo n.º 2
0
def test_row_conversion():
    converter = RowConverter(sorted=True)  # maintain sort order for equality checks

    row = reserialize(
        Row(
            columns=[
                Column(name='active', boolean=True),
                Column(name='biography'),
                Column(name='id', integer64=9223372036854775807),
                Column(name='reputation', float=1.0),
                Column(name='username', string='bob'),
            ],
        ),
    )

    decoded = converter.to_python(row)
    assert decoded == {
        'id': 9223372036854775807,
        'username': '******',
        'active': True,
        'reputation': 1.0,
        'biography': None,
    }

    assert converter.to_protobuf(decoded) == row
Ejemplo n.º 3
0
def test_publisher_failure():
    messages = []
    publisher = Publisher(messages.extend)

    with pytest.raises(NotImplementedError):
        with publisher.batch(batch_identifier, begin):
            raise NotImplementedError

    published_messages = map(reserialize, messages)

    assert get_oneof_value(
        get_oneof_value(published_messages[0], 'operation'),
        'operation'
    ) == begin
    assert get_oneof_value(
        get_oneof_value(published_messages[1], 'operation'),
        'operation'
    ) == rollback


    # Ensure it actually generates valid data.
    state = None
    for offset, message in enumerate(published_messages):
        state = reserialize(validate_state(state, offset, message))

    for i, message in enumerate(published_messages):
        assert message.header.publisher == publisher.id
        assert message.header.sequence == i

    # Write another message to ensure that the publisher can continue to be used.
    assert len(messages) == 2
    publisher.publish()
    assert len(messages) == 3
    assert messages[2].header.sequence == 2
Ejemplo n.º 4
0
def test_publisher():
    messages = []
    publisher = Publisher(messages.extend)

    with publisher.batch(batch_identifier, begin) as publish:
        publish(mutation)

    published_messages = map(reserialize, messages)

    assert get_oneof_value(
        get_oneof_value(published_messages[0], 'operation'),
        'operation'
    ) == begin
    assert get_oneof_value(
        get_oneof_value(published_messages[1], 'operation'),
        'operation'
    ) == mutation
    assert get_oneof_value(
        get_oneof_value(published_messages[2], 'operation'),
        'operation'
    ) == commit

    for i, message in enumerate(published_messages):
        assert message.header.publisher == publisher.id
        assert message.header.sequence == i

    # Ensure it actually generates valid data.
    state = None
    for offset, message in enumerate(published_messages):
        state = reserialize(validate_state(state, offset, message))
Ejemplo n.º 5
0
 def push(self, items):
     for item in items:
         self.queue.put(reserialize(item))
Ejemplo n.º 6
0
 def push(self, items):
     for item in items:
         self.queue.put(reserialize(item))