def _subscribe(self, subscriptions=None, last_known_block_ids=None): if subscriptions is None: subscriptions = [ events_pb2.EventSubscription( event_type="sawtooth/block-commit"), # Subscribe to the settings state events, to test genesis # catch-up. events_pb2.EventSubscription( event_type="sawtooth/state-delta", filters=[events_pb2.EventFilter( key='address', match_string='000000.*', filter_type=events_pb2.EventFilter.REGEX_ANY)]), # Subscribe to the intkey state events, to test additional # events. events_pb2.EventSubscription( event_type="sawtooth/state-delta", filters=[events_pb2.EventFilter( key='address', match_string='{}.*'.format(INTKEY_ADDRESS_PREFIX), filter_type=events_pb2.EventFilter.REGEX_ANY)]), ] if last_known_block_ids is None: last_known_block_ids = [] request = client_event_pb2.ClientEventsSubscribeRequest( subscriptions=subscriptions, last_known_block_ids=last_known_block_ids) response = self.stream.send( validator_pb2.Message.CLIENT_EVENTS_SUBSCRIBE_REQUEST, request.SerializeToString()).result() return response
def test_subscribe(self): """Test that a subscriber is successfully validated and added to the event broadcaster. """ mock_event_broadcaster = Mock() handler = \ ClientEventsSubscribeValidationHandler(mock_event_broadcaster) request = events_pb2.ClientEventsSubscribeRequest( subscriptions=[ events_pb2.EventSubscription( event_type="test_event", filters=[ events_pb2.EventFilter(key="test", match_string="test") ], ) ], last_known_block_ids=["0" * 128]).SerializeToString() response = handler.handle("test_conn_id", request) mock_event_broadcaster.add_subscriber.assert_called_with( "test_conn_id", [ EventSubscription(event_type="test_event", filters=[ FILTER_FACTORY.create( key="test", match_string="test") ]) ], ["0" * 128]) self.assertEqual(HandlerStatus.RETURN_AND_PASS, response.status) self.assertEqual(events_pb2.ClientEventsSubscribeResponse.OK, response.message_out.status)
def test_subscribe_bad_filter(self): """Tests that the handler will respond with an INVALID_FILTER when a subscriber provides an invalid filter. """ mock_event_broadcaster = Mock() handler = \ ClientEventsSubscribeValidationHandler(mock_event_broadcaster) request = events_pb2.ClientEventsSubscribeRequest( subscriptions=[ events_pb2.EventSubscription( event_type="test_event", filters=[ events_pb2.EventFilter( key="test", match_string="???", filter_type=events_pb2.EventFilter.REGEX_ANY) ], ) ], last_known_block_ids=["0" * 128]).SerializeToString() response = handler.handle("test_conn_id", request) mock_event_broadcaster.add_subscriber.assert_not_called() self.assertEqual(HandlerStatus.RETURN, response.status) self.assertEqual( events_pb2.ClientEventsSubscribeResponse.INVALID_FILTER, response.message_out.status)
def test_get_events(self): """Tests that block commit events are properly received on block boundaries.""" self._subscribe() self.batch_submitter.submit_next_batch() msg = self.stream.receive().result() self._unsubscribe() event_list = events_pb2.EventList() event_list.ParseFromString(msg.content) events = event_list.events block_commit_event = events[0] block_id = list(filter( lambda attr: attr.key == "block_id", block_commit_event.attributes))[0].value block_num = list(filter( lambda attr: attr.key == "block_num", block_commit_event.attributes))[0].value response = self._get_events( block_id, [events_pb2.EventSubscription(event_type="sawtooth/block-commit")]) events = self.assert_events_get_response(response) self.assert_block_commit_event(events[0], block_num)
def _subscribe(self, subscriptions=None): if subscriptions is None: subscriptions = [ events_pb2.EventSubscription(event_type="block_commit"), ] request = events_pb2.ClientEventsSubscribeRequest( subscriptions=subscriptions) response = self.stream.send( validator_pb2.Message.CLIENT_EVENTS_SUBSCRIBE_REQUEST, request.SerializeToString()).result() return response