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 ) )
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
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
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))
def push(self, items): for item in items: self.queue.put(reserialize(item))