Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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