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)
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_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
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, "")
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
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"
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)
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)
def test_bad_initialization_too_many_params(): with pytest.raises(ValueError): Multiaddr("/ip4/0.0.0.0", "")
def test_bad_initialization_no_params(): with pytest.raises(ValueError): Multiaddr()
def test_hash(): addr_bytes = Multiaddr("/ip4/127.0.0.1/udp/1234").to_bytes() assert hash(Multiaddr(addr_bytes)) == hash(addr_bytes)
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
def test_valid(addr_str): ma = Multiaddr(addr_str) assert str(ma) == addr_str.rstrip("/")
def test__repr(): a = Multiaddr("/ip4/127.0.0.1/udp/1234") assert (repr(a) == "<Multiaddr %s>" % str(a))
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")
def test_bad_initialization_wrong_type(): with pytest.raises(TypeError): Multiaddr(42)
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)]
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.
def test_join(proto_parts, expected): assert str(Multiaddr.join(*proto_parts)) == expected
def test_split(proto_string, maxsplit, expected): assert tuple(map(str, Multiaddr(proto_string).split(maxsplit))) == expected
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)
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')
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)
def test_invalid(addr_str): with pytest.raises(ValueError): Multiaddr(addr_str)
def test_invalid(addr_str): with pytest.raises(StringParseError): Multiaddr(addr_str)
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.
def test_valid(addr_str): ma = Multiaddr(addr_str) assert six.text_type(ma) == addr_str.rstrip("/")
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)]