mirror of https://github.com/status-im/nim-eth.git
discv4: Add test associated with fix to Kademlia crash (#341)
It's been confirmed that the test fails if the Kademlia crash workaround isn't in `findNode`, and passes with it there. Signed-off-by: Jamie Lokier <jamie@shareable.org>
This commit is contained in:
parent
209171d97d
commit
a48687d277
|
@ -43,6 +43,9 @@ task test_keys, "Run keys tests":
|
||||||
task test_discv5, "Run discovery v5 tests":
|
task test_discv5, "Run discovery v5 tests":
|
||||||
runTest("tests/p2p/all_discv5_tests")
|
runTest("tests/p2p/all_discv5_tests")
|
||||||
|
|
||||||
|
task test_discv4, "Run discovery v4 tests":
|
||||||
|
runTest("tests/p2p/test_discovery", chronosStrict = false)
|
||||||
|
|
||||||
task test_p2p, "Run p2p tests":
|
task test_p2p, "Run p2p tests":
|
||||||
test_discv5_task()
|
test_discv5_task()
|
||||||
|
|
||||||
|
|
|
@ -93,8 +93,33 @@ proc test() {.async.} =
|
||||||
expect DiscProtocolError:
|
expect DiscProtocolError:
|
||||||
bootNode.receive(address, packData(hexToSeqByte(data), nodeKey))
|
bootNode.receive(address, packData(hexToSeqByte(data), nodeKey))
|
||||||
|
|
||||||
# empty msg id and payload, doesn't raise, just fails abd prints wrong
|
# empty msg id and payload, doesn't raise, just fails and prints wrong
|
||||||
# msg mac
|
# msg mac
|
||||||
bootNode.receive(address, packData(@[], nodeKey))
|
bootNode.receive(address, packData(@[], nodeKey))
|
||||||
|
|
||||||
|
test "Two findNode calls for the same peer in rapid succession":
|
||||||
|
let targetKey = PrivateKey.fromHex(
|
||||||
|
"a2b50376a79b1a8c8a3296485572bdfbf54708bb46d3c25d73d2723aaaf6a618")[]
|
||||||
|
let peerKey = PrivateKey.fromHex(
|
||||||
|
"a2b50376a79b1a8c8a3296485572bdfbf54708bb46d3c25d73d2723aaaf6a619")[]
|
||||||
|
|
||||||
|
let targetNodeId = kademlia.toNodeId(targetKey.toPublicKey)
|
||||||
|
let peerNode = kademlia.newNode(peerKey.toPublicKey, localAddress(20302))
|
||||||
|
let nodesSeen = new(HashSet[Node])
|
||||||
|
|
||||||
|
# Start `findNode` but don't `await` yet, so the reply can't be processed yet.
|
||||||
|
let neighbours1Future = bootNode.kademlia.findNode(nodesSeen, targetNodeId, peerNode)
|
||||||
|
|
||||||
|
# This will raise an assertion error if `findNode` doesn't check for and ignore
|
||||||
|
# this second call to the same target and peer in rapid successfion.
|
||||||
|
let neighbours2Future = bootNode.kademlia.findNode(nodesSeen, targetNodeId, peerNode)
|
||||||
|
|
||||||
|
# Just for completness, verify the result is empty from the second call.
|
||||||
|
let neighbours2 = await neighbours2Future
|
||||||
|
check(neighbours2.len == 0)
|
||||||
|
|
||||||
|
# Just for completeness, wait for the first result out of order.
|
||||||
|
# Max delay 5 seconds.
|
||||||
|
discard await neighbours1Future
|
||||||
|
|
||||||
waitFor test()
|
waitFor test()
|
||||||
|
|
Loading…
Reference in New Issue