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)