예제 #1
0
    def _process_internal_message(self, socket, event):
        """Decode the received message and dispatch it on the corresponding
        handler.

        :param socket: The zmq.ROUTER socket.
        :type socket: zmq.sugar.socket.Socket
        :param event: The corresponding event, it should only be zmq.POLLIN.
        :type event: int
        """

        assert event == zmq.POLLIN
        # TODO(yassine): check m_identitifer is a known server.
        identifier, payload = socket.recv_multipart()

        message_type, params = message.decode_message(payload)

        if message_type == message.APPEND_ENTRY_REQUEST:
            self._process_append_entry_request(identifier, *params)
        elif message_type == message.APPEND_ENTRY_RESPONSE:
            self._process_append_entry_response(identifier, *params)
        elif message_type == message.REQUEST_VOTE:
            self._process_request_vote(identifier, *params)
        elif message_type == message.REQUEST_VOTE_RESPONSE:
            self._process_request_vote_response(identifier, *params)
        else:
            # TODO(yassine): add dict to translate int to human readable type
            LOG.error("unknown message type '%s'" % message_type)
예제 #2
0
def test_build_request_vote_response():
    test_params = (0, False)
    rvr_message = message.build_request_vote_response(*test_params)
    decoded_message = message.decode_message(rvr_message)
    assert (message.REQUEST_VOTE_RESPONSE, test_params) == decoded_message
예제 #3
0
def test_build_request_vote():
    test_params = (0, 1, 2)
    rv_message = message.build_request_vote(*test_params)
    decoded_message = message.decode_message(rv_message)
    assert (message.REQUEST_VOTE, test_params) == decoded_message
예제 #4
0
def test_build_append_entry_response():
    test_params = (0, True, 0, None)
    aer_message = message.build_append_entry_response(*test_params)
    decoded_message = message.decode_message(aer_message)
    assert (message.APPEND_ENTRY_RESPONSE, test_params) == decoded_message
예제 #5
0
def test_build_append_entry_request():
    test_params = (1, 1, 2, 3, (4, 5))
    ae_message = message.build_append_entry_request(*test_params)
    decoded_message = message.decode_message(ae_message)
    assert (message.APPEND_ENTRY_REQUEST, test_params) == decoded_message