Example #1
0
def test_zone():
    ip6_string = "/ip6zone/eth0/ip6/::1"
    ip6_bytes = b"\x2a\x04eth0\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"

    maddr_from_str = Multiaddr(ip6_string)
    assert maddr_from_str.to_bytes() == ip6_bytes

    maddr_from_bytes = Multiaddr(ip6_bytes)
    assert str(maddr_from_bytes) == ip6_string
def test_decapsulate_corrupted_bytes(monkeypatch):
    def raiseException(self, other):
        raise Exception

    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    u = Multiaddr("/udp/1234")
    monkeypatch.setattr("multiaddr.multiaddr.Multiaddr.__init__",
                        raiseException)

    with pytest.raises(ValueError):
        a.decapsulate(u)
Example #3
0
def test_decapsulate_corrupted_bytes(monkeypatch):
    def raiseException(self, other):
        raise Exception

    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    u = Multiaddr("/udp/1234")
    monkeypatch.setattr("multiaddr.multiaddr.Multiaddr.__init__",
                        raiseException)

    with pytest.raises(ValueError):
        a.decapsulate(u)
Example #4
0
def test_get_value_too_many_fields_protocol(monkeypatch):
    """
    This test patches the Multiaddr's string representation to return
    an invalid string in order to test that value_for_protocol properly
    throws a ValueError.  This avoids some of the error checking in
    the constructor and is easier to patch, thus the actual values
    that the constructor specifies is ignored by the test.
    """
    monkeypatch.setattr("multiaddr.multiaddr.Multiaddr.__str__",
                        lambda ignore: '/udp/1234/5678')
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    with pytest.raises(ValueError):
        a.value_for_protocol(P_UDP)
def test_get_value_too_many_fields_protocol(monkeypatch):
    """
    This test patches the Multiaddr's string representation to return
    an invalid string in order to test that value_for_protocol properly
    throws a ValueError.  This avoids some of the error checking in
    the constructor and is easier to patch, thus the actual values
    that the constructor specifies is ignored by the test.
    """
    monkeypatch.setattr("multiaddr.multiaddr.Multiaddr.__str__",
                        lambda ignore: '/udp/1234/5678')
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    with pytest.raises(ValueError):
        a.value_for_protocol(P_UDP)
Example #6
0
def test_bytes_split_and_join(test_vals):
    string, expected = test_vals
    mm = Multiaddr(string)
    split_m = split(mm)
    for i, addr in enumerate(split_m):
        assert str(addr) == expected[i]
    joined = join(split_m)
    assert mm == joined
Example #7
0
def test_get_value():
    ma = Multiaddr(
        "/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/"
        "p2p/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")

    assert_value_for_proto(ma, P_IP4, "127.0.0.1")
    assert_value_for_proto(ma, P_UTP, "")
    assert_value_for_proto(ma, P_TCP, "5555")
    assert_value_for_proto(ma, P_UDP, "1234")
    assert_value_for_proto(
        ma, P_P2P, "QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")

    with pytest.raises(ProtocolNotFoundException):
        ma.value_for_protocol(P_IP6)

    a = Multiaddr("/ip4/0.0.0.0")  # only one addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/ip4/0.0.0.0/ip4/0.0.0.0")  # same sub-addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/udp/12345/utp")  # ending in a no-value one.
    assert_value_for_proto(a, P_IP4, "0.0.0.0")
    assert_value_for_proto(a, P_UDP, "12345")
    assert_value_for_proto(a, P_UTP, "")
Example #8
0
def test_eq():
    m1 = Multiaddr("/ip4/127.0.0.1/udp/1234")
    m2 = Multiaddr("/ip4/127.0.0.1/tcp/1234")
    m3 = Multiaddr("/ip4/127.0.0.1/tcp/1234")
    m4 = Multiaddr("/ip4/127.0.0.1/tcp/1234/")

    assert m1 != m2
    assert m2 != m1

    assert m2 == m3
    assert m3 == m2

    assert m1 == m1

    assert m2 == m4
    assert m4 == m2
    assert m3 == m4
    assert m4 == m3
Example #9
0
def test_encapsulate():
    m1 = Multiaddr("/ip4/127.0.0.1/udp/1234")
    m2 = Multiaddr("/udp/5678")

    encapsulated = m1.encapsulate(m2)
    assert str(encapsulated) == "/ip4/127.0.0.1/udp/1234/udp/5678"

    m3 = Multiaddr("/udp/5678")
    decapsulated = encapsulated.decapsulate(m3)
    assert str(decapsulated) == "/ip4/127.0.0.1/udp/1234"

    m4 = Multiaddr("/ip4/127.0.0.1")
    decapsulated_2 = decapsulated.decapsulate(m4)
    assert str(decapsulated_2) == ""

    m5 = Multiaddr("/ip6/::1")
    decapsulated_3 = decapsulated.decapsulate(m5)

    assert str(decapsulated_3) == "/ip4/127.0.0.1/udp/1234"
Example #10
0
def test_value_for_protocol_argument_wrong_type():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    with pytest.raises(ProtocolNotFoundError):
        a.value_for_protocol('str123')

    with pytest.raises(TypeError):
        a.value_for_protocol(None)
Example #11
0
def test_encapsulate():
    m1 = Multiaddr("/ip4/127.0.0.1/udp/1234")
    m2 = Multiaddr("/udp/5678")

    encapsulated = m1.encapsulate(m2)
    assert str(encapsulated) == "/ip4/127.0.0.1/udp/1234/udp/5678"

    m3 = Multiaddr("/udp/5678")
    decapsulated = encapsulated.decapsulate(m3)
    assert str(decapsulated) == "/ip4/127.0.0.1/udp/1234"

    m4 = Multiaddr("/ip4/127.0.0.1")
    decapsulated_2 = decapsulated.decapsulate(m4)
    assert str(decapsulated_2) == ""

    m5 = Multiaddr("/ip6/::1")
    decapsulated_3 = decapsulated.decapsulate(m5)

    assert str(decapsulated_3) == "/ip4/127.0.0.1/udp/1234"
Example #12
0
def test_value_for_protocol_argument_wrong_type():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    with pytest.raises(TypeError):
        a.value_for_protocol(None)
Example #13
0
def test_bad_initialization_too_many_params():
    with pytest.raises(ValueError):
        Multiaddr("/ip4/0.0.0.0", "")
Example #14
0
def test_bad_initialization_no_params():
    with pytest.raises(ValueError):
        Multiaddr()
Example #15
0
def test_hash():
    addr_bytes = Multiaddr("/ip4/127.0.0.1/udp/1234").to_bytes()

    assert hash(Multiaddr(addr_bytes)) == hash(addr_bytes)
Example #16
0
def test_protocols():
    ma = Multiaddr("/ip4/127.0.0.1/udp/1234")
    protos = ma.protocols()
    assert protos[0].code == protocol_with_name("ip4").code
    assert protos[1].code == protocol_with_name("udp").code
Example #17
0
def test_valid(addr_str):
    ma = Multiaddr(addr_str)
    assert str(ma) == addr_str.rstrip("/")
Example #18
0
def test__repr():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    assert (repr(a) == "<Multiaddr %s>" % str(a))
Example #19
0
def test_decapsulate():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    u = Multiaddr("/udp/1234")
    assert a.decapsulate(u) == Multiaddr("/ip4/127.0.0.1")
Example #20
0
def test_decapsulate():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    u = Multiaddr("/udp/1234")
    assert a.decapsulate(u) == Multiaddr("/ip4/127.0.0.1")
Example #21
0
def test_bad_initialization_wrong_type():
    with pytest.raises(TypeError):
        Multiaddr(42)
Example #22
0
def test_views():
    ma = Multiaddr("/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/"
                   "p2p/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")

    for idx, (proto1, proto2, item,
              value) in enumerate(zip(ma, ma.keys(), ma.items(),
                                      ma.values())):  # noqa: E501
        assert (proto1, value) == (proto2, value) == item
        assert proto1 in ma
        assert proto2 in ma.keys()
        assert item in ma.items()
        assert value in ma.values()
        assert ma.keys()[idx] == ma.keys()[idx - len(ma)] == proto1 == proto2
        assert ma.items()[idx] == ma.items()[idx - len(ma)] == item
        assert ma.values()[idx] == ma.values()[idx -
                                               len(ma)] == ma[proto1] == value

    assert len(ma.keys()) == len(ma.items()) == len(ma.values()) == len(ma)
    assert len(list(ma.keys())) == len(ma.keys())
    assert len(list(ma.items())) == len(ma.items())
    assert len(list(ma.values())) == len(ma.values())

    with pytest.raises(IndexError):
        ma.keys()[len(ma)]
    with pytest.raises(IndexError):
        ma.items()[len(ma)]
    with pytest.raises(IndexError):
        ma.values()[len(ma)]
Example #23
0
def test_get_value():
    ma = Multiaddr("/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/"
                   "p2p/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")

    assert_value_for_proto(ma, P_IP4, "127.0.0.1")
    assert_value_for_proto(ma, P_UTP, None)
    assert_value_for_proto(ma, P_TCP, "5555")
    assert_value_for_proto(ma, P_UDP, "1234")
    assert_value_for_proto(ma, P_P2P,
                           "QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")
    assert_value_for_proto(ma, "ip4", "127.0.0.1")
    assert_value_for_proto(ma, "utp", None)
    assert_value_for_proto(ma, "tcp", "5555")
    assert_value_for_proto(ma, "udp", "1234")
    assert_value_for_proto(ma, protocol_with_name("ip4"), "127.0.0.1")
    assert_value_for_proto(ma, protocol_with_name("utp"), None)
    assert_value_for_proto(ma, protocol_with_name("tcp"), "5555")
    assert_value_for_proto(ma, protocol_with_name("udp"), "1234")

    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol(P_IP6)
    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol("ip6")
    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol(protocol_with_name("ip6"))

    a = Multiaddr(b"\x35\x03a:b")  # invalid protocol value
    with pytest.raises(BinaryParseError):
        a.value_for_protocol(P_DNS)

    a = Multiaddr("/ip4/0.0.0.0")  # only one addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/ip4/0.0.0.0/ip4/0.0.0.0")  # same sub-addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/udp/12345/utp")  # ending in a no-value one.
    assert_value_for_proto(a, P_IP4, "0.0.0.0")
    assert_value_for_proto(a, P_UDP, "12345")
    assert_value_for_proto(a, P_UTP, None)

    a = Multiaddr("/ip4/0.0.0.0/unix/a/b/c/d")  # ending in a path one.
    assert_value_for_proto(a, P_IP4, "0.0.0.0")
    assert_value_for_proto(a, P_UNIX, "/a/b/c/d")

    a = Multiaddr("/unix/studio")
    assert_value_for_proto(a, P_UNIX, "/studio")  # only a path.
Example #24
0
def test_join(proto_parts, expected):
    assert str(Multiaddr.join(*proto_parts)) == expected
Example #25
0
def test_split(proto_string, maxsplit, expected):
    assert tuple(map(str, Multiaddr(proto_string).split(maxsplit))) == expected
Example #26
0
def test_multi_addr_str_corruption():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    a._bytes = b"047047047"

    with pytest.raises(ValueError):
        str(a)
Example #27
0
def test_value_for_protocol_argument_wrong_type():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    with pytest.raises(ProtocolNotFoundError):
        a.value_for_protocol('str123')
Example #28
0
def test_multi_addr_str_corruption():
    a = Multiaddr("/ip4/127.0.0.1/udp/1234")
    a._bytes = b"047047047"

    with pytest.raises(BinaryParseError):
        str(a)
Example #29
0
def test_invalid(addr_str):
    with pytest.raises(ValueError):
        Multiaddr(addr_str)
Example #30
0
def test_invalid(addr_str):
    with pytest.raises(StringParseError):
        Multiaddr(addr_str)
Example #31
0
def test_get_value():
    ma = Multiaddr(
        "/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/"
        "p2p/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")

    assert_value_for_proto(ma, P_IP4, "127.0.0.1")
    assert_value_for_proto(ma, P_UTP, "")
    assert_value_for_proto(ma, P_TCP, "5555")
    assert_value_for_proto(ma, P_UDP, "1234")
    assert_value_for_proto(
        ma, P_P2P, "QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP")
    assert_value_for_proto(ma, "ip4", "127.0.0.1")
    assert_value_for_proto(ma, "utp", "")
    assert_value_for_proto(ma, "tcp", "5555")
    assert_value_for_proto(ma, "udp", "1234")
    assert_value_for_proto(ma, protocol_with_name("ip4"), "127.0.0.1")
    assert_value_for_proto(ma, protocol_with_name("utp"), "")
    assert_value_for_proto(ma, protocol_with_name("tcp"), "5555")
    assert_value_for_proto(ma, protocol_with_name("udp"), "1234")

    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol(P_IP6)
    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol("ip6")
    with pytest.raises(ProtocolLookupError):
        ma.value_for_protocol(protocol_with_name("ip6"))

    a = Multiaddr(b"\x35\x03a:b")  # invalid protocol value
    with pytest.raises(BinaryParseError):
        a.value_for_protocol(P_DNS)

    a = Multiaddr("/ip4/0.0.0.0")  # only one addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/ip4/0.0.0.0/ip4/0.0.0.0")  # same sub-addr
    assert_value_for_proto(a, P_IP4, "0.0.0.0")

    a = Multiaddr("/ip4/0.0.0.0/udp/12345/utp")  # ending in a no-value one.
    assert_value_for_proto(a, P_IP4, "0.0.0.0")
    assert_value_for_proto(a, P_UDP, "12345")
    assert_value_for_proto(a, P_UTP, "")

    a = Multiaddr("/ip4/0.0.0.0/unix/a/b/c/d")  # ending in a path one.
    assert_value_for_proto(a, P_IP4, "0.0.0.0")
    assert_value_for_proto(a, P_UNIX, "/a/b/c/d")

    a = Multiaddr("/unix/studio")
    assert_value_for_proto(a, P_UNIX, "/studio")  # only a path.
Example #32
0
def test_valid(addr_str):
    ma = Multiaddr(addr_str)
    assert six.text_type(ma) == addr_str.rstrip("/")
Example #33
0
def test_protocols():
    ma = Multiaddr("/ip4/127.0.0.1/udp/1234")
    protos = ma.protocols()
    assert protos[0].code == protocol_with_name("ip4").code
    assert protos[1].code == protocol_with_name("udp").code
Example #34
0
def test_views():
    ma = Multiaddr(
        "/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/"
        "p2p/bafzbeigalb34xlqdtvyklzqa5ibmn6pssqsdskc4ty2e4jxy2kamquh22y")

    for idx, (proto1, proto2, item,
              value) in enumerate(zip(ma, ma.keys(), ma.items(),
                                      ma.values())):  # noqa: E501
        assert (proto1, value) == (proto2, value) == item
        assert proto1 in ma
        assert proto2 in ma.keys()
        assert item in ma.items()
        assert value in ma.values()
        assert ma.keys()[idx] == ma.keys()[idx - len(ma)] == proto1 == proto2
        assert ma.items()[idx] == ma.items()[idx - len(ma)] == item
        assert ma.values()[idx] == ma.values()[idx -
                                               len(ma)] == ma[proto1] == value

    assert len(ma.keys()) == len(ma.items()) == len(ma.values()) == len(ma)
    assert len(list(ma.keys())) == len(ma.keys())
    assert len(list(ma.items())) == len(ma.items())
    assert len(list(ma.values())) == len(ma.values())

    with pytest.raises(IndexError):
        ma.keys()[len(ma)]
    with pytest.raises(IndexError):
        ma.items()[len(ma)]
    with pytest.raises(IndexError):
        ma.values()[len(ma)]