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)
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
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
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
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