From 9a4c110a9cb0438d7e5d15c4c3fb162e69e62e16 Mon Sep 17 00:00:00 2001 From: MacOMNI <414294494@qq.com> Date: Fri, 7 Feb 2025 11:21:19 +0800 Subject: [PATCH] update tests --- RPC/Tests/RPCTests/ChainHandlesTests.swift | 52 ++++++++++++++-- RPC/Tests/RPCTests/DummyNodeDataSource.swift | 65 -------------------- RPC/Tests/RPCTests/StateHandlersTests.swift | 8 +-- 3 files changed, 51 insertions(+), 74 deletions(-) delete mode 100644 RPC/Tests/RPCTests/DummyNodeDataSource.swift diff --git a/RPC/Tests/RPCTests/ChainHandlesTests.swift b/RPC/Tests/RPCTests/ChainHandlesTests.swift index 09b73a19..85824b5b 100644 --- a/RPC/Tests/RPCTests/ChainHandlesTests.swift +++ b/RPC/Tests/RPCTests/ChainHandlesTests.swift @@ -1,5 +1,4 @@ import Blockchain -@testable import Node @testable import RPC import Testing import TracingUtils @@ -7,17 +6,62 @@ import TracingUtils import Vapor import XCTVapor +public final class DummyNodeDataSource: Sendable { + public let chainDataProvider: BlockchainDataProvider + public init( + chainDataProvider: BlockchainDataProvider + ) { + self.chainDataProvider = chainDataProvider + } +} + +extension DummyNodeDataSource: ChainDataSource { + public func getKeys(prefix _: Data32, count _: UInt32, startKey _: Data32?, blockHash _: Data32?) async throws + -> [String] + { + ["key1", "key2", "key3"] + } + + public func getStorage(key _: Data32, blockHash _: Data32?) async throws -> [String] { + ["value1", "value2"] + } + + public func getFinalizedHead() async throws -> Data32? { + try await chainDataProvider.getFinalizedHead() + } + + public func getBestBlock() async throws -> BlockRef { + try await chainDataProvider.getBlock(hash: chainDataProvider.bestHead.hash) + } + + public func getBlock(hash: Data32) async throws -> BlockRef? { + try await chainDataProvider.getBlock(hash: hash) + } + + public func getState(blockHash: Data32, key: Data32) async throws -> Data? { + let state = try await chainDataProvider.getState(hash: blockHash) + return try await state.value.read(key: key) + } + + public func getBlockHash(byTimeslot timeslot: TimeslotIndex) async throws -> Set { + try await chainDataProvider.getBlockHash(byTimeslot: timeslot) + } + + public func getHeader(hash: Data32) async throws -> HeaderRef? { + try await chainDataProvider.getHeader(hash: hash) + } +} + final class ChainRPCControllerTests { var app: Application! var dataProvider: BlockchainDataProvider! func setUp() async throws { app = try await Application.make(.testing) - let dummyNodeDataSource = DummyNodeDataSource(genesis: .minimal) - dataProvider = dummyNodeDataSource.dataProvider let (genesisState, genesisBlock) = try! State.devGenesis(config: .minimal) + dataProvider = try! await BlockchainDataProvider(InMemoryDataProvider(genesisState: genesisState, genesisBlock: genesisBlock)) let rpcController = JSONRPCController(handlers: ChainHandlers - .getHandlers(source: dummyNodeDataSource)) + .getHandlers(source: DummyNodeDataSource(chainDataProvider: dataProvider))) try app.register(collection: rpcController) } diff --git a/RPC/Tests/RPCTests/DummyNodeDataSource.swift b/RPC/Tests/RPCTests/DummyNodeDataSource.swift deleted file mode 100644 index c7a44b1a..00000000 --- a/RPC/Tests/RPCTests/DummyNodeDataSource.swift +++ /dev/null @@ -1,65 +0,0 @@ -import Blockchain -@testable import Node -@testable import RPC -import Testing -import TracingUtils -@testable import Utils -import Vapor - -public class DummyNodeDataSource { - public let blockchain: Blockchain - public let scheduler: Scheduler - public let dataProvider: BlockchainDataProvider - public let network: NetworkManager - public let nodeDataSource: NodeDataSource - public required init( - genesis: Genesis, - scheduler: Scheduler = DispatchQueueScheduler(timeProvider: SystemTimeProvider()) - ) async throws { - let keystore = try await DevKeyStore(devKeysCount: 0) - let keys = try await keystore.addDevKeys(seed: 0) - let eventBus = EventBus(eventMiddleware: .serial(Middleware(storeMiddleware), .noError), handlerMiddleware: .noError) - let (genesisState, genesisBlock) = try! State.devGenesis(config: .minimal) - - let config = await Config( - rpc: nil, - network: Network.Config( - role: .builder, - listenAddress: NetAddr(address: "127.0.0.1:0")!, - key: keystore.get(Ed25519.self, publicKey: keys.ed25519)! - ), - peers: [], - local: true - ) - - let chainspec = try await genesis.load() - let protocolConfig = try chainspec.getConfig() - - dataProvider = try! await BlockchainDataProvider(InMemoryDataProvider(genesisState: genesisState, genesisBlock: genesisBlock)) - - self.scheduler = scheduler - let blockchain = try await Blockchain( - config: protocolConfig, - dataProvider: dataProvider, - timeProvider: scheduler.timeProvider, - eventBus: eventBus - ) - self.blockchain = blockchain - - self.keystore = keystore - - network = try await NetworkManager( - config: config.network, - blockchain: blockchain, - eventBus: eventBus, - devPeers: Set(config.peers) - ) - - nodeDataSource = NodeDataSource( - blockchain: blockchain, - chainDataProvider: dataProvider, - networkManager: network, - name: config.name - ) - } -} diff --git a/RPC/Tests/RPCTests/StateHandlersTests.swift b/RPC/Tests/RPCTests/StateHandlersTests.swift index fcca500e..64c20ed5 100644 --- a/RPC/Tests/RPCTests/StateHandlersTests.swift +++ b/RPC/Tests/RPCTests/StateHandlersTests.swift @@ -13,11 +13,10 @@ final class StateHandlersTests { func setUp() async throws { app = try await Application.make(.testing) - let dummyNodeDataSource = DummyNodeDataSource(genesis: .minimal) - dataProvider = dummyNodeDataSource.dataProvider let (genesisState, genesisBlock) = try! State.devGenesis(config: .minimal) - let rpcController = JSONRPCController(handlers: ChainHandlers - .getHandlers(source: dummyNodeDataSource)) + dataProvider = try! await BlockchainDataProvider(InMemoryDataProvider(genesisState: genesisState, genesisBlock: genesisBlock)) + let rpcController = JSONRPCController(handlers: StateHandlers + .getHandlers(source: DummyNodeDataSource(chainDataProvider: dataProvider))) try app.register(collection: rpcController) } @@ -37,7 +36,6 @@ final class StateHandlersTests { try buffer.writeJSONEncodable(req) try await app.test(.POST, "/", headers: ["Content-Type": "application/json"], body: buffer) { res async in #expect(res.status == .ok) - print("res body \(res.body.string)") let resp = try! res.content.decode(JSONResponse.self, using: JSONDecoder()) #expect(resp.result!.value != nil) }