import unittest, options import chronos import ../libp2p/crypto/crypto, ../libp2p/peerinfo, ../libp2p/peer const StreamTransportTrackerName = "stream.transport" StreamServerTrackerName = "stream.server" suite "PeerInfo": teardown: let trackers = [ getTracker(AsyncStreamWriterTrackerName), getTracker(AsyncStreamReaderTrackerName), getTracker(StreamTransportTrackerName), getTracker(StreamServerTrackerName) ] for tracker in trackers: if not isNil(tracker): # echo tracker.dump() check tracker.isLeaked() == false test "Should init with private key": let seckey = PrivateKey.random(RSA) var peerInfo = PeerInfo.init(seckey) var peerId = PeerID.init(seckey) check peerId == peerInfo.peerId check seckey == peerInfo.privateKey check seckey.getKey == peerInfo.publicKey.get() test "Should init with public key": let seckey = PrivateKey.random(RSA) var peerInfo = PeerInfo.init(seckey.getKey()) var peerId = PeerID.init(seckey.getKey()) check peerId == peerInfo.peerId check seckey.getKey == peerInfo.publicKey.get() test "Should init from PeerId with public key": let seckey = PrivateKey.random(Ed25519) var peerInfo = PeerInfo.init(PeerID.init(seckey.getKey())) var peerId = PeerID.init(seckey.getKey()) check peerId == peerInfo.peerId check seckey.getKey == peerInfo.publicKey.get() test "Should init from CIDv0 string": var peerInfo = PeerInfo.init("QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N") check: PeerID.init("QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N") == peerInfo.peerId # TODO: CIDv1 is handling is missing from PeerID # https://github.com/status-im/nim-libp2p/issues/53 # test "Should init from CIDv1 string": # var peerInfo = PeerInfo.init("bafzbeie5745rpv2m6tjyuugywy4d5ewrqgqqhfnf445he3omzpjbx5xqxe") # check: # PeerID.init("bafzbeie5745rpv2m6tjyuugywy4d5ewrqgqqhfnf445he3omzpjbx5xqxe") == peerInfo.peerId test "Should return none if pubkey is missing from id": let peerInfo = PeerInfo.init(PeerID.init(PrivateKey.random(RSA))) check peerInfo.publicKey.isNone test "Should return some if pubkey is present in id": let peerInfo = PeerInfo.init(PeerID.init(PrivateKey.random(Ed25519))) check peerInfo.publicKey.isSome test "join() and isClosed() test": proc testJoin(): Future[bool] {.async, gcsafe.} = let peerInfo = PeerInfo.init(PeerID.init(PrivateKey.random(Ed25519))) check peerInfo.isClosed() == false var joinFut = peerInfo.join() check joinFut.finished() == false peerInfo.close() await wait(joinFut, 100.milliseconds) check peerInfo.isClosed() == true check (joinFut.finished() == true) and (joinFut.cancelled() == false) result = true check waitFor(testJoin()) == true