Beispiel #1
0
 def test_serde(self):
     message = AppendEntriesMessage(
         "test", "foo", Term(0), entries=[LogEntry(term=Term(0), index=0)])
     message_bytes = to_msgpack(message,
                                ext_dict=BaseMessage.EXT_DICT_REVERSED)
     decoded_message = from_msgpack(BaseMessage,
                                    message_bytes,
                                    ext_dict=BaseMessage.EXT_DICT)
     self.assertEqual(message.id, decoded_message.id)
     self.assertEqual(message, decoded_message)
Beispiel #2
0
 async def send_message(self, message: Union[BaseMessage, bytes]):
     logger.debug(f"sending: {self._state}: {message}")
     if isinstance(message, bytes):
         self._node.shout(self.ZRE_GROUP, b"/raft " + message)
     else:
         message_bytes = to_msgpack(message, ext_dict=BaseMessage.EXT_DICT)
         if message.receiver is None:
             self._node.shout(self.ZRE_GROUP, b"/raft " + message_bytes)
         else:
             self._node.whisper(
                 uuid.UUID(message.receiver), b"/raft " + message_bytes
             )
Beispiel #3
0
 def send(self, n, peer_id, msg):
     old_state = self.sessions[peer_id].state
     if old_state != RatchetState.SENDING:
         self.sessions[peer_id].state = RatchetState.SENDING
     send_ratchet = self.sessions[peer_id].send_ratchet
     key, iv = send_ratchet.next()
     self.logger.debug(f"send_ratchet: {peer_id} {b64(send_ratchet.state)}")
     cipher = AES.new(key, AES.MODE_CBC, iv).encrypt(pad(msg))
     self.logger.debug(f"cipher: {cipher}")
     dh_ratchet = self.sessions[peer_id].dh_ratchet
     encrypted_message = EncryptedMessage(b64(cipher),
                                          b64k(dh_ratchet.public_key()))
     n.whisper(peer_id, to_msgpack(encrypted_message))
Beispiel #4
0
def test_convert_sets_option():
    @serialize
    class A:
        v: Set[str]

    a = A({"a", "b"})

    a_json = to_json(a)
    # sets are unordered so the list order is not stable
    assert a_json == '{"v": ["a", "b"]}' or a_json == '{"v": ["b", "a"]}'

    a_msgpack = to_msgpack(a)
    # sets are unordered so the list order is not stable
    assert a_msgpack == b'\x81\xa1v\x92\xa1a\xa1b' or a_msgpack == b'\x81\xa1v\x92\xa1b\xa1a'

    a_dict = to_dict(a, convert_sets=True)
    # sets are unordered so the list order is not stable
    assert a_dict == {"v": ["a", "b"]} or a_dict == {"v": ["b", "a"]}

    assert {"v": {"a", "b"}} == to_dict(a, convert_sets=False)
Beispiel #5
0
def test_msgpack_named():
    p = Pri(10, 'foo', 100.0, True)
    d = b'\x94\n\xa3foo\xcb@Y\x00\x00\x00\x00\x00\x00\xc3'
    assert d == to_msgpack(p, named=False)
    assert p == from_msgpack(Pri, d, named=False)
Beispiel #6
0
def test_msgpack():
    p = Pri(10, 'foo', 100.0, True)
    d = b'\x84\xa1i\n\xa1s\xa3foo\xa1f\xcb@Y\x00\x00\x00\x00\x00\x00\xa1b\xc3'
    assert d == to_msgpack(p)
    assert p == from_msgpack(Pri, d)