public void Update_head_block() { debugBridge.UpdateHeadBlock(Arg.Any <Keccak>()); IDebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); RpcTest.TestSerializedRequest(rpcModule, "debug_resetHead", TestItem.KeccakA.ToString()); debugBridge.Received().UpdateHeadBlock(TestItem.KeccakA); }
public void Migrate_receipts() { debugBridge.MigrateReceipts(Arg.Any <long>()).Returns(true); IDebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); string response = RpcTest.TestSerializedRequest(rpcModule, "debug_migrateReceipts", "100"); Assert.NotNull(response); }
public void Get_block_rlp_when_missing() { debugBridge.GetBlockRlp(1).Returns((byte[])null); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); JsonRpcErrorResponse response = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getBlockRlp", "1") as JsonRpcErrorResponse; Assert.AreEqual(-32001, response?.Error.Code); }
public void Get_from_db_null_value() { byte[] key = new byte[] { 1, 2, 3 }; debugBridge.GetDbValue(Arg.Any <string>(), Arg.Any <byte[]>()).Returns((byte[])null); IConfigProvider configProvider = Substitute.For <IConfigProvider>(); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); JsonRpcSuccessResponse response = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getFromDb", "STATE", key.ToHexString(true)) as JsonRpcSuccessResponse; Assert.NotNull(response); }
public void Get_block_rlp_by_hash() { BlockDecoder decoder = new BlockDecoder(); Rlp rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject); debugBridge.GetBlockRlp(Keccak.Zero).Returns(rlp.Bytes); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); JsonRpcSuccessResponse response = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getBlockRlpByHash", $"{Keccak.Zero.Bytes.ToHexString()}") as JsonRpcSuccessResponse; Assert.AreEqual(rlp.Bytes, (byte[])response?.Result); }
public void Get_block_rlp() { BlockDecoder decoder = new BlockDecoder(); IDebugBridge debugBridge = Substitute.For <IDebugBridge>(); Rlp rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject); debugBridge.GetBlockRlp(1).Returns(rlp.Bytes); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); JsonRpcSuccessResponse response = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getBlockRlp", "1") as JsonRpcSuccessResponse; Assert.AreEqual(rlp.Bytes, (byte[])response?.Result); }
public void TraceBlockByNumber_Fail() { var blockNumber = BlockParameter.Latest; debugBridge .GetBlockTrace(blockNumber, Arg.Any <CancellationToken>(), Arg.Any <GethTraceOptions>()) .Returns(default(GethLikeTxTrace[])); var rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); var actual = rpcModule.debug_traceBlockByNumber(blockNumber); var expected = ResultWrapper <GethLikeTxTrace[]> .Fail($"Trace is null for block {blockNumber}", ErrorCodes.ResourceNotFound); actual.Should().BeEquivalentTo(expected); }
public void TraceBlock_Fail() { var blockRlp = new Rlp(TestItem.RandomDataA); debugBridge .GetBlockTrace(blockRlp, Arg.Any <CancellationToken>(), Arg.Any <GethTraceOptions>()) .Returns(default(GethLikeTxTrace[])); var rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); var actual = rpcModule.debug_traceBlock(blockRlp.Bytes); var expected = ResultWrapper <GethLikeTxTrace[]> .Fail($"Trace is null for RLP {blockRlp.Bytes.ToHexString()}", ErrorCodes.ResourceNotFound); actual.Should().BeEquivalentTo(expected); }
public void TraceBlockByNumber_Success() { var traces = Enumerable.Repeat(MockGethLikeTrace(), 2).ToArray(); var tracesClone = TestItem.CloneObject(traces); var blockNumber = BlockParameter.Latest; debugBridge .GetBlockTrace(blockNumber, Arg.Any <CancellationToken>(), Arg.Any <GethTraceOptions>()) .Returns(traces); var rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); var actual = rpcModule.debug_traceBlockByNumber(blockNumber); var expected = ResultWrapper <GethLikeTxTrace[]> .Success(tracesClone); actual.Should().BeEquivalentTo(expected); }
public void Get_chain_level(string parameter) { debugBridge.GetLevelInfo(1).Returns( new ChainLevelInfo( true, new[] { new BlockInfo(TestItem.KeccakA, 1000), new BlockInfo(TestItem.KeccakB, 1001), })); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); JsonRpcSuccessResponse response = RpcTest.TestRequest <IDebugRpcModule>(rpcModule, "debug_getChainLevel", parameter) as JsonRpcSuccessResponse; ChainLevelForRpc chainLevel = response?.Result as ChainLevelForRpc; Assert.NotNull(chainLevel); Assert.AreEqual(true, chainLevel.HasBlockOnMainChain); Assert.AreEqual(2, chainLevel.BlockInfos.Length); }
public void Get_trace() { GethTxTraceEntry entry = new GethTxTraceEntry(); entry.Storage = new Dictionary <string, string> { { "1".PadLeft(64, '0'), "2".PadLeft(64, '0') }, { "3".PadLeft(64, '0'), "4".PadLeft(64, '0') }, }; entry.Memory = new List <string> { "5".PadLeft(64, '0'), "6".PadLeft(64, '0') }; entry.Stack = new List <string> { "7".PadLeft(64, '0'), "8".PadLeft(64, '0') }; entry.Operation = "STOP"; entry.Gas = 22000; entry.GasCost = 1; entry.Depth = 1; var trace = new GethLikeTxTrace(); trace.ReturnValue = Bytes.FromHexString("a2"); trace.Entries.Add(entry); debugBridge.GetTransactionTrace(Arg.Any <Keccak>(), Arg.Any <CancellationToken>(), Arg.Any <GethTraceOptions>()).Returns(trace); DebugRpcModule rpcModule = new DebugRpcModule(LimboLogs.Instance, debugBridge, jsonRpcConfig); string response = RpcTest.TestSerializedRequest <IDebugRpcModule>(DebugModuleFactory.Converters, rpcModule, "debug_traceTransaction", TestItem.KeccakA.ToString(true), "{}"); Assert.AreEqual("{\"jsonrpc\":\"2.0\",\"result\":{\"gas\":\"0x0\",\"failed\":false,\"returnValue\":\"0xa2\",\"structLogs\":[{\"pc\":0,\"op\":\"STOP\",\"gas\":22000,\"gasCost\":1,\"depth\":1,\"error\":null,\"stack\":[\"0000000000000000000000000000000000000000000000000000000000000007\",\"0000000000000000000000000000000000000000000000000000000000000008\"],\"memory\":[\"0000000000000000000000000000000000000000000000000000000000000005\",\"0000000000000000000000000000000000000000000000000000000000000006\"],\"storage\":{\"0000000000000000000000000000000000000000000000000000000000000001\":\"0000000000000000000000000000000000000000000000000000000000000002\",\"0000000000000000000000000000000000000000000000000000000000000003\":\"0000000000000000000000000000000000000000000000000000000000000004\"}}]},\"id\":67}", response); }