Пример #1
0
    def test_add_two_identical_from_different_senders_message_to_manager(self):
        replies_manager = rsi.RepliesManager()
        packed = self._build_msg(b'hello')
        rsi_reply = rsi.MsgWithReplicaSpecificInfo(packed, sender_id=0)
        rsi_reply2 = rsi.MsgWithReplicaSpecificInfo(packed, sender_id=1)
        num_of_replies = replies_manager.add_reply(rsi_reply)
        self.assertEqual(num_of_replies, 1)

        num_of_replies = replies_manager.add_reply(rsi_reply2)
        self.assertEqual(num_of_replies, 2)
Пример #2
0
    def test_add_same_message_twice_to_manager(self):
        replies_manager = rsi.RepliesManager()
        packed = self._build_msg(b'hello')
        rsi_reply = rsi.MsgWithReplicaSpecificInfo(packed, sender_id=0)

        num_of_replies = replies_manager.add_reply(rsi_reply)
        self.assertEqual(num_of_replies, 1)

        num_of_replies = replies_manager.add_reply(rsi_reply)
        self.assertEqual(num_of_replies, 1)
Пример #3
0
 def __init__(self, config, replicas):
     self.config = config
     self.replicas = replicas
     self.req_seq_num = ReqSeqNum()
     self.client_id = config.id
     self.primary = None
     self.replies = None
     self.retries = 0
     self.msgs_sent = 0
     self.replies_manager = rsi.RepliesManager()
     self.rsi_replies = dict()
     self.comm_prepared = False
Пример #4
0
 def __init__(self, config, replicas):
     self.config = config
     self.replicas = replicas
     self.sock = trio.socket.socket(trio.socket.AF_INET,
                                    trio.socket.SOCK_DGRAM)
     self.req_seq_num = ReqSeqNum()
     self.client_id = config.id
     self.primary = None
     self.reply = None
     self.retries = 0
     self.msgs_sent = 0
     self.port = BASE_PORT + 2 * self.client_id
     self.sock_bound = False
     self.replies_manager = rsi.RepliesManager()
     self.rsi_replies = dict()
Пример #5
0
    def __init__(self, config, replicas, ro_replicas=[]):
        self.config = config
        self.replicas = replicas
        self.req_seq_num = ReqSeqNum()
        self.client_id = config.id
        self.primary = None
        self.replies = None
        self.retries = 0
        self.msgs_sent = 0
        self.replies_manager = RSI.RepliesManager()
        self.rsi_replies = dict()
        self.comm_prepared = False
        self.ro_replicas = ro_replicas

        txn_signing_key_path = self._get_txn_signing_priv_key_path(self.client_id)
        self.signing_key = None
        if txn_signing_key_path:
            with open(txn_signing_key_path, 'rb') as f:
                self.signing_key = RSA.import_key(f.read())
Пример #6
0
    def test_add_two_message_with_different_rsi_to_manager(self):
        replies_manager = rsi.RepliesManager()
        packed = self._build_msg(b'hello0', rsi_length=1)
        rsi_reply = rsi.MsgWithReplicaSpecificInfo(packed, sender_id=1)

        num_of_replies = replies_manager.add_reply(rsi_reply)
        self.assertEqual(num_of_replies, 1)

        packed2 = self._build_msg(b'hello1', rsi_length=1)
        rsi_reply2 = rsi.MsgWithReplicaSpecificInfo(packed2, sender_id=0)

        num_of_replies = replies_manager.add_reply(rsi_reply2)
        self.assertEqual(num_of_replies, 2)

        common_key = rsi_reply.get_matched_reply_key()
        rsi_replies = replies_manager.pop(common_key)
        self.assertEqual(replies_manager.num_matching_replies(common_key), 0)
        self.assertEqual(common_key.header.req_seq_num, 1)
        self.assertEqual(common_key.data, b'hello')
        self.assertEqual(b'1', rsi_replies[0].get_rsi_data())
        self.assertTrue(b'0', rsi_replies[1].get_rsi_data())
Пример #7
0
    def test_add_message_with_two_seq_num_to_manager(self):
        replies_manager = rsi.RepliesManager()
        packed = self._build_msg(b'hello')
        rsi_reply = rsi.MsgWithReplicaSpecificInfo(packed, sender_id=0)

        num_of_replies = replies_manager.add_reply(rsi_reply)
        self.assertEqual(num_of_replies, 1)

        packed2 = self._build_msg(b'hello', req_seq_num=2)
        rsi_reply2 = rsi.MsgWithReplicaSpecificInfo(packed2, 0)

        num_of_replies = replies_manager.add_reply(rsi_reply2)
        self.assertEqual(num_of_replies, 1)
        self.assertEqual(replies_manager.num_distinct_replies(), 2)

        key1 = rsi_reply.get_matched_reply_key()
        replies_manager.pop(key1)
        self.assertEqual(replies_manager.num_matching_replies(key1), 0)
        self.assertEqual(replies_manager.num_distinct_replies(), 1)

        key2 = rsi_reply2.get_matched_reply_key()
        replies_manager.pop(key2)
        self.assertEqual(replies_manager.num_matching_replies(key2), 0)
        self.assertEqual(replies_manager.num_distinct_replies(), 0)