mirror of
https://github.com/vacp2p/mix.git
synced 2026-01-09 21:07:59 -05:00
245 lines
8.1 KiB
Nim
245 lines
8.1 KiB
Nim
{.used.}
|
|
|
|
import chronicles, strformat, results, strutils, unittest
|
|
import libp2p/[crypto/crypto, crypto/secp, multiaddress, peerid]
|
|
import ../mix/[curve25519, mix_node]
|
|
|
|
suite "Mix Node Tests":
|
|
var mixNodes {.threadvar.}: MixNodes
|
|
|
|
setup:
|
|
var count = 5
|
|
let mixNodesRes = initializeMixNodes(count)
|
|
if mixNodesRes.isErr():
|
|
error "could not generate mix nodes"
|
|
fail()
|
|
mixNodes = mixNodesRes.value()
|
|
|
|
deleteNodeInfoFolder()
|
|
deletePubInfoFolder()
|
|
|
|
teardown:
|
|
deleteNodeInfoFolder()
|
|
deletePubInfoFolder()
|
|
|
|
test "get_mix_node_by_index":
|
|
if mixNodes.len != count:
|
|
error "Number of mix nodes simulated is incorrect."
|
|
fail()
|
|
|
|
for i in 0 ..< count:
|
|
let node = mixNodes[i]
|
|
let
|
|
(multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
|
|
getMixNodeInfo(node)
|
|
pubKeyProto = PublicKey(scheme: Secp256k1, skkey: libp2pPubKey)
|
|
peerId = PeerId.init(pubKeyProto).get()
|
|
|
|
if multiAddr != fmt"/ip4/0.0.0.0/tcp/{4242 + i}/p2p/{peerId}":
|
|
error "Multiaddress of retrieved node is invalid", multiaddr = multiAddr
|
|
fail()
|
|
|
|
if fieldElementToBytes(mixPubKey).len != FieldElementSize:
|
|
error "Mix public key of retrieved node is invalid",
|
|
expected_size = FieldElementSize
|
|
fail()
|
|
|
|
if fieldElementToBytes(mixPrivKey).len != FieldElementSize:
|
|
error "Mix private key of retrieved node is invalid",
|
|
expected_size = FieldElementSize
|
|
fail()
|
|
|
|
if libp2pPubKey.getBytes().len != SkRawPublicKeySize:
|
|
error "Libp2p public key of retrieved node is invalid",
|
|
expected_size = SkRawPublicKeySize
|
|
fail()
|
|
|
|
if libp2pPrivKey.getBytes().len != SkRawPrivateKeySize:
|
|
error "Libp2p private key of retrieved node is invalid",
|
|
expected_size = SkRawPrivateKeySize
|
|
fail()
|
|
|
|
test "get_peer_id_from_multiaddr":
|
|
let multiAddr =
|
|
"/ip4/0.0.0.0/tcp/4242/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N"
|
|
|
|
let peerIdRes = getPeerIdFromMultiAddr(multiAddr)
|
|
if peerIdRes.isErr:
|
|
error "Get peer id from multiaddress error", err = peerIdRes.error
|
|
fail()
|
|
let peerId = peerIdRes.get()
|
|
|
|
if $peerId != "QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N":
|
|
error "Incorrect peer ID."
|
|
fail()
|
|
|
|
test "find_mix_node_by_peer_id":
|
|
for i in 0 ..< count:
|
|
let node = mixNodes[i]
|
|
|
|
let (multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
|
|
getMixNodeInfo(node)
|
|
|
|
let peerIdRes = getPeerIdFromMultiAddr(multiAddr)
|
|
if peerIdRes.isErr:
|
|
error "Get peer id from multiaddress error", err = peerIdRes.error
|
|
fail()
|
|
let peerId = peerIdRes.get()
|
|
|
|
let foundNodeRes = mixNodes.findByPeerId(peerId)
|
|
if foundNodeRes.isErr:
|
|
error "Find mix node error", err = foundNodeRes.error
|
|
fail()
|
|
let foundNode = foundNodeRes.get()
|
|
|
|
let (fMultiAddr, fMixPubKey, fMixPrivKey, fLibp2pPubKey, fLibp2pPrivKey) =
|
|
getMixNodeInfo(foundNode)
|
|
|
|
if fMultiAddr != multiAddr:
|
|
error "Multiaddress does not match original multiaddress",
|
|
multiaddr = fMultiAddr, original = multiAddr
|
|
fail()
|
|
|
|
if fMixPubKey != mixPubKey:
|
|
error "Mix public key does not match original mix public key",
|
|
pubkey = fMixPubKey, original = mixPubKey
|
|
fail()
|
|
|
|
if fMixPrivKey != mixPrivKey:
|
|
error "Mix private key does not match original mix private key",
|
|
privkey = fMixPrivKey, original = mixPrivKey
|
|
fail()
|
|
|
|
if fLibp2pPubKey.getBytes() != libp2pPubKey.getBytes():
|
|
error "Libp2p public key does not match original libp2p public key",
|
|
pubkey = fLibp2pPubKey.getBytes(), original = libp2pPubKey.getBytes()
|
|
fail()
|
|
|
|
if fLibp2pPrivKey.getBytes() != libp2pPrivKey.getBytes():
|
|
error "Libp2p private key does not match original libp2p private key",
|
|
privkey = fLibp2pPrivKey.getBytes(), original = libp2pPrivKey.getBytes()
|
|
fail()
|
|
|
|
test "invalid_peer_id_lookup":
|
|
let multiAddr =
|
|
"/ip4/0.0.0.0/tcp/4242/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N"
|
|
# Random peer ID
|
|
|
|
let peerIdRes = getPeerIdFromMultiAddr(multiAddr)
|
|
if peerIdRes.isErr:
|
|
error "Get peer id from multiaddress error", err = peerIdRes.error
|
|
fail()
|
|
let peerId = peerIdRes.get()
|
|
|
|
let foundNodeRes = mixNodes.findByPeerId(peerId)
|
|
if foundNodeRes.isOk:
|
|
fail()
|
|
|
|
test "write_and_read_mix_node_info":
|
|
for i in 0 ..< count:
|
|
let node = mixNodes[i]
|
|
|
|
let (multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
|
|
getMixNodeInfo(node)
|
|
|
|
let writeNodeRes = writeMixNodeInfoToFile(node, i)
|
|
if writeNodeRes.isErr:
|
|
error "File write error", index = i
|
|
fail()
|
|
|
|
let readNodeRes = readMixNodeInfoFromFile(i)
|
|
if readNodeRes.isErr:
|
|
error "File read error", index = i
|
|
fail()
|
|
let readNode = readNodeRes.get()
|
|
|
|
let (rMultiAddr, rMixPubKey, rMixPrivKey, rLibp2pPubKey, rLibp2pPrivKey) =
|
|
getMixNodeInfo(readNode)
|
|
|
|
if rMultiAddr != multiAddr:
|
|
error "Multiaddress does not match original multiaddress",
|
|
multiaddr = rMultiAddr, original = multiAddr
|
|
fail()
|
|
|
|
if rMixPubKey != mixPubKey:
|
|
error "Mix public key does not match original mix public key",
|
|
pubkey = rMixPubKey, original = mixPubKey
|
|
fail()
|
|
|
|
if rMixPrivKey != mixPrivKey:
|
|
error "Mix private key does not match original mix private key",
|
|
privkey = rMixPrivKey, original = mixPrivKey
|
|
fail()
|
|
|
|
if rLibp2pPubKey.getBytes() != libp2pPubKey.getBytes():
|
|
error "Libp2p public key does not match original libp2p public key",
|
|
pubkey = rLibp2pPubKey.getBytes(), original = libp2pPubKey.getBytes()
|
|
fail()
|
|
|
|
if rLibp2pPrivKey.getBytes() != libp2pPrivKey.getBytes():
|
|
error "Libp2p private key does not match original libp2p private key",
|
|
privkey = rLibp2pPrivKey.getBytes(), original = libp2pPrivKey.getBytes()
|
|
fail()
|
|
|
|
test "write_and_read_mix_pub_info":
|
|
for i in 0 ..< count:
|
|
let mixPubInfoRes = mixNodes.getMixPubInfoByIndex(i)
|
|
if mixPubInfoRes.isErr:
|
|
error "Get mix pubinfo by index error", err = mixPubInfoRes.error
|
|
fail()
|
|
let mixPubInfo = mixPubInfoRes.get()
|
|
|
|
let (multiAddr, mixPubKey, libp2pPubKey) = getMixPubInfo(mixPubInfo)
|
|
|
|
let writeNodeRes = writeMixPubInfoToFile(mixPubInfo, i)
|
|
if writeNodeRes.isErr:
|
|
error "File write error", index = i
|
|
fail()
|
|
|
|
let readNodeRes = readMixPubInfoFromFile(i)
|
|
if readNodeRes.isErr:
|
|
error "File read error", index = i
|
|
fail()
|
|
let readNode = readNodeRes.get()
|
|
|
|
let (rMultiAddr, rMixPubKey, rLibp2pPubKey) = getMixPubInfo(readNode)
|
|
|
|
if rMultiAddr != multiAddr:
|
|
error "Multiaddress does not match original multiaddress",
|
|
multiaddr = rMultiAddr, original = multiAddr
|
|
fail()
|
|
|
|
if rMixPubKey != mixPubKey:
|
|
error "Mix public key does not match original mix public key",
|
|
pubkey = rMixPubKey, original = mixPubKey
|
|
fail()
|
|
|
|
if rLibp2pPubKey.getBytes() != libp2pPubKey.getBytes():
|
|
error "Libp2p public key does not match original libp2p public key",
|
|
pubkey = rLibp2pPubKey.getBytes(), original = libp2pPubKey.getBytes()
|
|
fail()
|
|
|
|
test "read_nonexistent_mix_node_info":
|
|
let readNodeRes = readMixNodeInfoFromFile(999) # Non-existent index
|
|
if readNodeRes.isOk:
|
|
error "Mix node 999 should not exist."
|
|
fail()
|
|
|
|
test "generate_mix_nodes_with_different_ports":
|
|
count = 3
|
|
let basePort = 5000
|
|
let mixNodesRes2 = initializeMixNodes(count, basePort)
|
|
if mixNodesRes2.isErr:
|
|
error "could not generate mixnodes", err = mixNodesRes2.error()
|
|
let mixNodes = mixNodesRes2.value()
|
|
|
|
for i in 0 ..< count:
|
|
let node = mixNodes[i]
|
|
|
|
let (multiAddr, _, _, _, _) = getMixNodeInfo(node)
|
|
|
|
if not multiAddr.contains($(basePort + i)):
|
|
error "Multiaddress does not contain expected port no.",
|
|
expected_port = $(basePort + i)
|
|
fail()
|