コード例 #1
0
    def test_app_param():
        name = '/local/ndn/prefix'
        app_param = b'\x01\x02\x03\x04'
        interest, final_name = make_interest(name,
                                             InterestParam(),
                                             app_param,
                                             need_final_name=True)
        assert (
            interest ==
            b'\x05\x42\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
            b'\x02 \x47\x75\x6f\x21\xfe\x0e\xe2\x65\x14\x9a\xa2\xbe\x3c\x63\xc5\x38'
            b'\xa7\x23\x78\xe9\xb0\xa5\x8b\x39\xc5\x91\x63\x67\xd3\x5b\xda\x10'
            b'\x0c\x02\x0f\xa0\x24\x04\x01\x02\x03\x04')
        assert (final_name == Name.decode(
            b'\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
            b'\x02 \x47\x75\x6f\x21\xfe\x0e\xe2\x65\x14\x9a\xa2\xbe\x3c\x63\xc5\x38'
            b'\xa7\x23\x78\xe9\xb0\xa5\x8b\x39\xc5\x91\x63\x67\xd3\x5b\xda\x10'
        )[0])

        name = '/test/params-sha256=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/ndn'
        interest = make_interest(name, InterestParam(), app_param)
        assert (
            interest == b'\x05\x39\x07\x2d\x08\x04test'
            b'\x02 \x47\x75\x6f\x21\xfe\x0e\xe2\x65\x14\x9a\xa2\xbe\x3c\x63\xc5\x38'
            b'\xa7\x23\x78\xe9\xb0\xa5\x8b\x39\xc5\x91\x63\x67\xd3\x5b\xda\x10'
            b'\x08\x03ndn'
            b'\x0c\x02\x0f\xa0\x24\x04\x01\x02\x03\x04')
コード例 #2
0
    def test_signed_interest():
        name = '/local/ndn/prefix'
        app_param = b'\x01\x02\x03\x04'
        int_param = InterestParam()
        int_param.nonce = 0x6c211166
        interest = make_interest(name, int_param, app_param, signer=DigestSha256Signer())
        assert (interest ==
                b'\x05\x6f\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
                b'\x02 \x8e\x6e\x36\xd7\xea\xbc\xde\x43\x75\x61\x40\xc9\x0b\xda\x09\xd5'
                b'\x00\xd2\xa5\x77\xf2\xf5\x33\xb5\x69\xf0\x44\x1d\xf0\xa7\xf9\xe2'
                b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0'
                b'\x24\x04\x01\x02\x03\x04'
                b'\x2c\x03\x1b\x01\x00'
                b'\x2e \xea\xa8\xf0\x99\x08\x63\x78\x95\x1d\xe0\x5f\xf1\xde\xbb\xc1\x18'
                b'\xb5\x21\x8b\x2f\xca\xa0\xb5\x1d\x18\xfa\xbc\x29\xf5\x4d\x58\xff')

        interest = make_interest(name, int_param, signer=DigestSha256Signer())
        assert (interest ==
                b'\x05\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix'
                b'\x02 \x40\x77\xa5\x70\x49\xd8\x38\x48\xb5\x25\xa4\x23\xab\x97\x8e\x64'
                b'\x80\xf9\x6d\x5c\xa3\x8a\x80\xa5\xe2\xd6\xe2\x50\xa6\x17\xbe\x4f'
                b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0'
                b'\x24\x00'
                b'\x2c\x03\x1b\x01\x00'
                b'\x2e \x09\x4e\x00\x9d\x74\x59\x82\x5c\xa0\x2d\xaa\xb7\xad\x60\x48\x30'
                b'\x39\x19\xd8\x99\x80\x25\xbe\xff\xa6\xf9\x96\x79\xd6\x5e\x9f\x62')
コード例 #3
0
    def test_default():
        name = Name.from_str('/local/ndn/prefix')
        interest = make_interest(name, InterestParam())
        assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'

        name = Name.encode(name)
        interest = make_interest(name, InterestParam())
        assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'

        name = '/local/ndn/prefix'
        interest = make_interest(name, InterestParam())
        assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'
コード例 #4
0
ファイル: ndnlp_v2_test.py プロジェクト: zjkmxy/python-ndn
 def test2():
     interest = make_interest(
         '/localhost/nfd/faces/events',
         InterestParam(must_be_fresh=True, can_be_prefix=True))
     lp_packet = make_network_nack(interest, NackReason.NO_ROUTE)
     assert lp_packet == (
         b"\x64\x36\xfd\x03\x20\x05\xfd\x03\x21\x01\x96"
         b"\x50\x2b\x05\x29\x07\x1f\x08\tlocalhost\x08\x03nfd\x08\x05faces\x08\x06events"
         b"\x21\x00\x12\x00\x0c\x02\x0f\xa0")
コード例 #5
0
 def test_interest_params():
     name = '/local/ndn/prefix'
     int_param = InterestParam()
     int_param.can_be_prefix = True
     int_param.must_be_fresh = True
     int_param.hop_limit = 1
     int_param.nonce = 0
     int_param.lifetime = 10
     interest = make_interest(name, int_param)
     assert (interest == b'\x05\x26\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix'
                         b'\x21\x00\x12\x00\x0a\x04\x00\x00\x00\x00\x0c\x01\x0a\x22\x01\x01')
コード例 #6
0
 def test_forwarding_hint():
     name = '/local/ndn/prefix'
     int_param = InterestParam()
     int_param.nonce = 0x01020304
     int_param.forwarding_hint = [(0x87, '/name/A'),
                                  (0x02, Name.from_str('/ndn/B')),
                                  (0x12, b'\x07\x0d\x08\x0bshekkuenseu')]
     interest = make_interest(name, int_param)
     assert (interest ==
             b'\x05\x55\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix'
             b'\x1e\x33'
             b'\x1f\x0e\x1e\x01\x87\x07\x09\x08\x04name\x08\x01A'
             b'\x1f\x0d\x1e\x01\x02\x07\x08\x08\x03ndn\x08\x01B'
             b'\x1f\x12\x1e\x01\x12\x07\r\x08\x0bshekkuenseu'
             b'\x0a\x04\x01\x02\x03\x04\x0c\x02\x0f\xa0')
コード例 #7
0
 def test_mixed_name():
     name = ['local', Component.from_str('ndn'), 'prefix']
     interest = make_interest(name, InterestParam())
     assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'
コード例 #8
0
    def test_throws():
        with pytest.raises(ValueError):
            make_interest("/invalid%%name", InterestParam())

        with pytest.raises(TypeError):
            make_interest("/ndn", InterestParam(lifetime=0.5))

        with pytest.raises(TypeError):
            make_interest("/ndn", InterestParam(forwarding_hint=[1, 2, 3]))

        with pytest.raises(ValueError):
            make_interest("/ndn", InterestParam(hop_limit=300))

        with pytest.raises(ValueError):
            make_interest("/params-sha256=4077", InterestParam())

        with pytest.raises(ValueError):
            make_interest("/params-sha256=4077", InterestParam(), b'')
コード例 #9
0
 def _send_interests(self, client: H3Client) -> bool:
     for name in self._names:
         interest = bytes(make_interest(
             name, interest_param=INTEREST_PARAMS))
         self._t0.append(time.time())
         client.send(interest)
コード例 #10
0
    def express_interest(
        self,
        name: NonStrictName,
        app_param: Optional[BinaryStr] = None,
        validator: Optional[Validator] = None,
        need_raw_packet: bool = False,
        **kwargs
    ) -> Coroutine[Any, None, Tuple[FormalName, MetaInfo,
                                    Optional[BinaryStr]]]:
        r"""
        Express an Interest packet.

        The Interest packet is sent immediately and a coroutine used to get the result is returned.
        Awaiting on what is returned will block until the Data is received and return that Data.
        An exception is raised if unable to receive the Data.

        :param name: the Name.
        :type name: :any:`NonStrictName`
        :param app_param: the ApplicationParameters.
        :type app_param: Optional[:any:`BinaryStr`]
        :param validator: the Validator used to verify the Data received.
        :type validator: Optional[:any:`Validator`]
        :param need_raw_packet: if True, return the raw Data packet with TL.
        :type need_raw_packet: bool
        :param kwargs: :ref:`label-keyword-arguments`.
        :return: A tuple of (Name, MetaInfo, Content) after ``await``.
            If need_raw_packet is True, return a tuple (Name, MetaInfo, Content, RawPacket).
        :rtype: Coroutine[Any, None, Tuple[:any:`FormalName`, :any:`MetaInfo`, Optional[:any:`BinaryStr`]]]

        The following exception is raised by ``express_interest``:

        :raises NetworkError: the face to NFD is down before sending this Interest.

        The following exceptions are raised by the coroutine returned:

        :raises InterestNack: an NetworkNack is received.
        :raises InterestTimeout: time out.
        :raises ValidationFailure: unable to validate the Data packet.
        :raises InterestCanceled: the face to NFD is shut down after sending this Interest.
        """
        if not self.face.running:
            raise NetworkError('cannot send packet before connected')
        if 'signer' in kwargs:
            signer = kwargs['signer']
        elif app_param is not None:
            signer = self.keychain.get_signer(kwargs)
        else:
            signer = None
        if 'interest_param' in kwargs:
            interest_param = kwargs['interest_param']
        else:
            if 'nonce' not in kwargs:
                kwargs['nonce'] = gen_nonce()
            interest_param = InterestParam.from_dict(kwargs)
        interest, final_name = make_interest(name,
                                             interest_param,
                                             app_param,
                                             signer=signer,
                                             need_final_name=True)
        future = aio.get_event_loop().create_future()
        node = self._int_tree.setdefault(final_name, InterestTreeNode())
        node.append_interest(future, interest_param)
        self.face.send(interest)
        return self._wait_for_data(future, interest_param.lifetime, final_name,
                                   node, validator, need_raw_packet)