Skip to content

Commit

Permalink
Aligned with spec and added some tests (#6494)
Browse files Browse the repository at this point in the history
  • Loading branch information
Demuirgos authored and kamilchodola committed Jan 10, 2024
1 parent 3913c8d commit db6ecc7
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 14 deletions.
Expand Up @@ -4,7 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
Expand Down Expand Up @@ -96,6 +96,19 @@ public async Task Get_block_rlp_by_hash()
Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes));
}

[Test]
public async Task Get_raw_Header()
{
HeaderDecoder decoder = new();
Block blk = Build.A.Block.WithNumber(0).TestObject;
Rlp rlp = decoder.Encode(blk.Header);
debugBridge.GetBlock(new BlockParameter((long)0)).Returns(blk);

DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig);
JsonRpcSuccessResponse? response = await RpcTest.TestRequest<IDebugRpcModule>(rpcModule, "debug_getRawHeader", $"{Keccak.Zero.Bytes.ToHexString()}") as JsonRpcSuccessResponse;
Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes));
}

[Test]
public async Task Get_block_rlp()
{
Expand All @@ -110,6 +123,20 @@ public async Task Get_block_rlp()
Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes));
}

[Test]
public async Task Get_rawblock()
{
BlockDecoder decoder = new();
IDebugBridge debugBridge = Substitute.For<IDebugBridge>();
Rlp rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject);
debugBridge.GetBlockRlp(new BlockParameter(1)).Returns(rlp.Bytes);

DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig);
JsonRpcSuccessResponse? response = await RpcTest.TestRequest<IDebugRpcModule>(rpcModule, "debug_getRawBlock", "1") as JsonRpcSuccessResponse;

Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes));
}

[Test]
public async Task Get_block_rlp_when_missing()
{
Expand All @@ -121,6 +148,17 @@ public async Task Get_block_rlp_when_missing()
Assert.That(response?.Error?.Code, Is.EqualTo(-32001));
}

[Test]
public async Task Get_rawblock_when_missing()
{
debugBridge.GetBlockRlp(new BlockParameter(1)).ReturnsNull();

DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig);
JsonRpcErrorResponse? response = await RpcTest.TestRequest<IDebugRpcModule>(rpcModule, "debug_getRawBlock", "1") as JsonRpcErrorResponse;

Assert.That(response?.Error?.Code, Is.EqualTo(-32001));
}

[Test]
public async Task Get_block_rlp_by_hash_when_missing()
{
Expand Down
Expand Up @@ -272,34 +272,34 @@ public ResultWrapper<byte[]> debug_getRawTransaction(Hash256 transactionHash)
return ResultWrapper<byte[]>.Success(rlp.Bytes);
}

public ResultWrapper<byte[][]> debug_getRawReceipts(long blockNumber)
public ResultWrapper<byte[][]> debug_getRawReceipts(BlockParameter blockParameter)
{
var receipts = _debugBridge.GetReceiptsForBlock(new BlockParameter(blockNumber));
var receipts = _debugBridge.GetReceiptsForBlock(blockParameter);
if (receipts == null)
{
return ResultWrapper<byte[][]>.Fail($"Receipts are not found for block {blockNumber}", ErrorCodes.ResourceNotFound);
return ResultWrapper<byte[][]>.Fail($"Receipts are not found for block {blockParameter}", ErrorCodes.ResourceNotFound);
}

var rlp = receipts.Select(tx => Rlp.Encode(tx, RlpBehaviors.Eip658Receipts).Bytes);
var rlp = receipts.Select(tx => Rlp.Encode(tx).Bytes);
return ResultWrapper<byte[][]>.Success(rlp.ToArray());
}

public ResultWrapper<byte[]> debug_getRawBlock(long blockNumber)
public ResultWrapper<byte[]> debug_getRawBlock(BlockParameter blockParameter)
{
var blockRLP = _debugBridge.GetBlockRlp(new BlockParameter(blockNumber));
var blockRLP = _debugBridge.GetBlockRlp(blockParameter);
if (blockRLP == null)
{
return ResultWrapper<byte[]>.Fail($"Block {blockNumber} was not found", ErrorCodes.ResourceNotFound);
return ResultWrapper<byte[]>.Fail($"Block {blockParameter} was not found", ErrorCodes.ResourceNotFound);
}
return ResultWrapper<byte[]>.Success(blockRLP);
}

public ResultWrapper<byte[]> debug_getRawHeader(long blockNumber)
public ResultWrapper<byte[]> debug_getRawHeader(BlockParameter blockParameter)
{
var block = _debugBridge.GetBlock(new BlockParameter(blockNumber));
var block = _debugBridge.GetBlock(blockParameter);
if (block == null)
{
return ResultWrapper<byte[]>.Fail($"Block {blockNumber} was not found", ErrorCodes.ResourceNotFound);
return ResultWrapper<byte[]>.Fail($"Block {blockParameter} was not found", ErrorCodes.ResourceNotFound);
}
Rlp rlp = Rlp.Encode<BlockHeader>(block.Header);
return ResultWrapper<byte[]>.Success(rlp.Bytes);
Expand Down
Expand Up @@ -89,13 +89,13 @@ public interface IDebugRpcModule : IRpcModule
Task<ResultWrapper<bool>> debug_insertReceipts(BlockParameter blockParameter, ReceiptForRpc[] receiptForRpc);

[JsonRpcMethod(Description = "Get Raw Block format.")]
ResultWrapper<byte[]> debug_getRawBlock(long blockNumber);
ResultWrapper<byte[]> debug_getRawBlock(BlockParameter blockParameter);

[JsonRpcMethod(Description = "Get Raw Receipt format.")]
ResultWrapper<byte[][]> debug_getRawReceipts(long blockNumber);
ResultWrapper<byte[][]> debug_getRawReceipts(BlockParameter blockParameter);

[JsonRpcMethod(Description = "Get Raw Header format.")]
ResultWrapper<byte[]> debug_getRawHeader(long blockNumber);
ResultWrapper<byte[]> debug_getRawHeader(BlockParameter blockParameter);

[JsonRpcMethod(Description = "Get Raw Transaction format.")]
ResultWrapper<byte[]> debug_getRawTransaction(Hash256 transactionHash);
Expand Down

0 comments on commit db6ecc7

Please sign in to comment.