mirror of https://github.com/hyperledger/besu
* Enable limit on range of JSON-RPC API trace_filter method (#5971) Enable a limit on the range of blocks that can be supplied to the JSON-RPC trace_filter method. The limit has a default value and can be overridden with a command line option at start up. Signed-off-by: alyokaz <alyoshakaz@live.co.uk> Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> --------- Signed-off-by: alyokaz <alyoshakaz@live.co.uk> Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>pull/6466/head
parent
ed1480ba33
commit
a1a5b20983
@ -0,0 +1,79 @@ |
||||
/* |
||||
* Copyright Hyperledger Besu Contributors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequest; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequestContext; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.parameters.BlockParameter; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.parameters.FilterParameter; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.processor.BlockTracer; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcErrorResponse; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcResponse; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType; |
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries; |
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; |
||||
|
||||
import java.util.function.Supplier; |
||||
|
||||
import org.junit.jupiter.api.extension.ExtendWith; |
||||
import org.junit.jupiter.params.ParameterizedTest; |
||||
import org.junit.jupiter.params.provider.CsvSource; |
||||
import org.mockito.Mock; |
||||
import org.mockito.junit.jupiter.MockitoExtension; |
||||
|
||||
@ExtendWith(MockitoExtension.class) |
||||
public class TraceFilterTest { |
||||
|
||||
private TraceFilter method; |
||||
|
||||
@Mock Supplier<BlockTracer> blockTracerSupplier; |
||||
@Mock ProtocolSchedule protocolSchedule; |
||||
@Mock BlockchainQueries blockchainQueries; |
||||
|
||||
@ParameterizedTest |
||||
@CsvSource({ |
||||
"0, 1001, 1000", "0, 5000, 1000", "1, 1002, 1000", "1, 6002, 1000", "1000, 3000, 1000", |
||||
"0, 501, 500", "0, 5000, 500", "1, 502, 500", "1, 6002, 500", "1000, 3000, 500" |
||||
}) |
||||
public void shouldFailIfParamsExceedMaxRange( |
||||
final long fromBlock, final long toBlock, final long maxFilterRange) { |
||||
final FilterParameter filterParameter = |
||||
new FilterParameter( |
||||
new BlockParameter(fromBlock), |
||||
new BlockParameter(toBlock), |
||||
null, |
||||
null, |
||||
null, |
||||
null, |
||||
null, |
||||
null, |
||||
null); |
||||
|
||||
JsonRpcRequestContext request = |
||||
new JsonRpcRequestContext( |
||||
new JsonRpcRequest("2.0", "trace_filter", new Object[] {filterParameter})); |
||||
|
||||
method = |
||||
new TraceFilter(blockTracerSupplier, protocolSchedule, blockchainQueries, maxFilterRange); |
||||
|
||||
final JsonRpcResponse response = method.response(request); |
||||
assertThat(response).isInstanceOf(JsonRpcErrorResponse.class); |
||||
|
||||
final JsonRpcErrorResponse errorResponse = (JsonRpcErrorResponse) response; |
||||
assertThat(errorResponse.getErrorType()).isEqualTo(RpcErrorType.EXCEEDS_RPC_MAX_BLOCK_RANGE); |
||||
} |
||||
} |
Loading…
Reference in new issue