2019-01-13 00:31:08 +08:00
|
|
|
import random
|
|
|
|
import multihash
|
|
|
|
import pytest
|
|
|
|
import base58
|
2018-11-29 23:06:40 +08:00
|
|
|
from Crypto.PublicKey import RSA
|
2019-01-13 00:31:08 +08:00
|
|
|
from libp2p.peer.id import ID, id_b58_encode, id_b58_decode, id_from_public_key, id_from_private_key
|
2019-01-10 02:38:56 +08:00
|
|
|
|
2018-11-29 23:06:40 +08:00
|
|
|
|
2019-01-13 00:31:08 +08:00
|
|
|
ALPHABETS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
|
|
|
|
|
|
|
def test_init_():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
peer_id = ID(random_id_string)
|
|
|
|
#pylint: disable=protected-access
|
|
|
|
assert peer_id._id_str == random_id_string
|
|
|
|
|
|
|
|
def test_no_init_value():
|
|
|
|
with pytest.raises(Exception) as _:
|
|
|
|
#pylint: disable=no-value-for-parameter
|
|
|
|
ID()
|
|
|
|
|
|
|
|
def test_pretty():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
peer_id = ID(random_id_string)
|
|
|
|
actual = peer_id.pretty()
|
|
|
|
expected = base58.b58encode(random_id_string).decode()
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_str_less_than_10():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(5):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
pid = base58.b58encode(random_id_string).decode()
|
|
|
|
expected = "<peer.ID " + pid + ">"
|
|
|
|
actual = ID(random_id_string).__str__()
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_str_more_than_10():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
pid = base58.b58encode(random_id_string).decode()
|
2019-05-09 08:19:13 +08:00
|
|
|
expected = "<peer.ID " + pid + ">"
|
2019-01-13 00:31:08 +08:00
|
|
|
actual = ID(random_id_string).__str__()
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_eq_true():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
other = ID(random_id_string)
|
|
|
|
|
|
|
|
expected = True
|
|
|
|
actual = ID(random_id_string).__eq__(other)
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_eq_false():
|
|
|
|
other = ID("efgh")
|
|
|
|
|
|
|
|
expected = False
|
|
|
|
actual = ID("abcd").__eq__(other)
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_hash():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
|
|
|
|
expected = hash(random_id_string)
|
|
|
|
actual = ID(random_id_string).__hash__()
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_id_b58_encode():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
expected = base58.b58encode(random_id_string).decode()
|
|
|
|
actual = id_b58_encode(ID(random_id_string))
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_id_b58_decode():
|
|
|
|
random_id_string = ''
|
|
|
|
for _ in range(10):
|
|
|
|
random_id_string += random.SystemRandom().choice(ALPHABETS)
|
|
|
|
expected = ID(base58.b58decode(random_id_string))
|
|
|
|
actual = id_b58_decode(random_id_string)
|
|
|
|
|
|
|
|
assert actual == expected
|
|
|
|
|
|
|
|
def test_id_from_public_key():
|
|
|
|
bits_list = [1024, 1280, 1536, 1536, 2048]
|
|
|
|
key = RSA.generate(random.choice(bits_list))
|
|
|
|
key_bin = key.exportKey("DER")
|
|
|
|
algo = multihash.Func.sha2_256
|
|
|
|
mh_digest = multihash.digest(key_bin, algo)
|
|
|
|
expected = ID(mh_digest.encode())
|
|
|
|
actual = id_from_public_key(key)
|
|
|
|
|
|
|
|
assert actual == expected
|
2018-11-29 23:06:40 +08:00
|
|
|
|
|
|
|
def test_id_from_private_key():
|
|
|
|
key = RSA.generate(2048, e=65537)
|
|
|
|
id_from_pub = id_from_public_key(key.publickey())
|
|
|
|
id_from_priv = id_from_private_key(key)
|
|
|
|
assert id_from_pub == id_from_priv
|
2019-01-13 00:31:08 +08:00
|
|
|
|