import std/[os, parseopt, json, unittest], chronicles, eth/[p2p, trie/db], ../../../nimbus/db/db_chain, eth/p2p/rlpx_protocols/eth_protocol, ../../../nimbus/[genesis, config, conf_utils], ../../../nimbus/graphql/ethapi, ../../../tests/test_helpers, graphql const baseFolder = "hive_integration" / "nodocker" / "graphql" blocksFile = baseFolder / "init" / "blocks.rlp" genesisFile = baseFolder / "init" / "genesis.json" caseFolder = baseFolder / "testcases" proc processNode(ctx: GraphqlRef, node: JsonNode, fileName: string, testStatusIMPL: var TestStatus) = let request = node["request"] let responses = node["responses"] let statusCode = node["statusCode"].getInt() let savePoint = ctx.getNameCounter() let res = ctx.parseQuery(request.getStr()) block: if res.isErr: if statusCode == 200: debugEcho res.error check statusCode != 200 break let resp = JsonRespStream.new() let r = ctx.executeRequest(respStream(resp)) if r.isErr: if statusCode == 200: debugEcho r.error check statusCode != 200 break check statusCode == 200 check r.isOk let nimbus = resp.getString() var resultOK = false for x in responses: let hive = $(x["data"]) if nimbus == hive: resultOK = true break check resultOK if not resultOK: debugEcho "NIMBUS RESULT: ", nimbus for x in responses: let hive = $(x["data"]) debugEcho "HIVE RESULT: ", hive ctx.purgeQueries() ctx.purgeNames(savePoint) proc main() = var msg: string var opt = initOptParser("--customnetwork:" & genesisFile) let res = processArguments(msg, opt) if res != Success: echo msg quit(QuitFailure) let conf = getConfiguration() ethNode = setupEthNode(eth) chainDB = newBaseChainDB(newMemoryDb(), pruneTrie = false, id = toPublicNetwork(conf.net.networkId) ) initializeEmptyDb(chainDB) importRlpBlock(blocksFile, chainDB) let ctx = setupGraphqlContext(chainDB, ethNode) suite "graphql": for fileName in walkDirRec(caseFolder): let node = parseFile(fileName) test fileName: ctx.processNode(node, fileName, testStatusIMPL) main()