From a15467c5c5d5fbb50338da622e0acdaabd6993eb Mon Sep 17 00:00:00 2001 From: MacOMNI <414294494@qq.com> Date: Wed, 8 Jan 2025 16:31:02 +0800 Subject: [PATCH] update more tests --- Node/Tests/NodeTests/NodeTests.swift | 57 ++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/Node/Tests/NodeTests/NodeTests.swift b/Node/Tests/NodeTests/NodeTests.swift index 2e1b1c6f..ea335230 100644 --- a/Node/Tests/NodeTests/NodeTests.swift +++ b/Node/Tests/NodeTests/NodeTests.swift @@ -172,4 +172,61 @@ final class NodeTests { #expect(validator1BestHead.hash == node2BestHead.hash) #expect(validator2BestHead.hash == node1BestHead.hash) } + + @Test + func moreMultiplePeers() async throws { + // Create multiple nodes + var nodeDescriptions: [NodeDescription] = [ + NodeDescription(isValidator: true, database: getDatabase(0)), + NodeDescription(isValidator: true, devSeed: 1, database: getDatabase(1)) + ] + + // Add 18 non-validator nodes + for i in 2...19 { + nodeDescriptions.append(NodeDescription(devSeed: UInt32(i), database: .inMemory)) + } + + let (nodes, scheduler) = try await Topology( + nodes: nodeDescriptions, + connections: (0..<20).flatMap { i in + (i + 1..<20).map { j in (i, j) } // Fully connected topology + } + ).build(genesis: .preset(.minimal)) + + let (validator1, validator1StoreMiddlware) = nodes[0] + let (validator2, validator2StoreMiddlware) = nodes[1] + + // Extract non-validator nodes and their middleware + let nonValidatorNodes = nodes[2...].map { $0 } + + try await Task.sleep(for: .milliseconds(nodes.count * 200)) + let (node1, node1StoreMiddlware) = nonValidatorNodes[0] + let (node2, node2StoreMiddlware) = nonValidatorNodes[1] + // Verify connections for a sample of non-validator nodes + #expect(node1.network.peersCount == 19) + #expect(node2.network.peersCount == 19) + // Advance time and verify sync + for _ in 0 ..< 10 { + await scheduler.advance(by: TimeInterval(validator1.blockchain.config.value.slotPeriodSeconds)) + await validator1StoreMiddlware.wait() + await validator2StoreMiddlware.wait() + + for (_, middleware) in nonValidatorNodes { + await middleware.wait() + } + } + + try await Task.sleep(for: .milliseconds(nodes.count * 200)) + + let validator1BestHead = await validator1.dataProvider.bestHead + let validator2BestHead = await validator2.dataProvider.bestHead + + for (node, _) in nonValidatorNodes { + let nodeBestHead = await node.dataProvider.bestHead + #expect(validator1BestHead.hash == nodeBestHead.hash) + #expect(validator2BestHead.hash == nodeBestHead.hash) + } + } + + }