mirror of https://github.com/hyperledger/besu
Add eth protocol manager test builder (#7954)
* 7311: Add EthProtocolManagerTestBuilder Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * 7311: Add EthProtocolManagerTestBuilder.builder method Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * 7311: Replace EthProtocolManagerTestUtil.create() usages with builder Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * 7311: Replace EthProtocolManagerTestUtil.create(TimeoutPolicy) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * 7311: Replace EthProtocolManagerTestUtil.create(Blockchain) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * 7311: Replace EthProtocolManagerTestUtil.create(EthScheduler) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, TimeoutPolicy, WorldStateArchive, TransactionPool, EthProtocolConfiguration) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, EthScheduler) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, EthScheduler) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, WorldStateArchive, TransactionPool, EthProtocolConfiguration) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, EthScheduler, WorldStateArchive, TransactionPool, EthProtocolConfiguration) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Replace EthProtocolManagerTestUtil.create(ProtocolSchedule, Blockchain, EthScheduler, WorldStateArchive, TransactionPool, EthProtocolConfiguration) Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> * Remove remaining create methods and apply spotless Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net> --------- Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>pull/7871/merge
parent
c320724d29
commit
747a378017
@ -0,0 +1,245 @@ |
||||
/* |
||||
* Copyright contributors to Besu. |
||||
* |
||||
* 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.eth.manager; |
||||
|
||||
import static org.hyperledger.besu.ethereum.core.InMemoryKeyValueStorageProvider.createInMemoryBlockchain; |
||||
import static org.mockito.Mockito.mock; |
||||
|
||||
import org.hyperledger.besu.config.GenesisConfigFile; |
||||
import org.hyperledger.besu.ethereum.chain.Blockchain; |
||||
import org.hyperledger.besu.ethereum.chain.GenesisState; |
||||
import org.hyperledger.besu.ethereum.core.BlockchainSetupUtil; |
||||
import org.hyperledger.besu.ethereum.core.ProtocolScheduleFixture; |
||||
import org.hyperledger.besu.ethereum.eth.EthProtocolConfiguration; |
||||
import org.hyperledger.besu.ethereum.eth.peervalidation.PeerValidator; |
||||
import org.hyperledger.besu.ethereum.eth.sync.SyncMode; |
||||
import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; |
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; |
||||
import org.hyperledger.besu.ethereum.forkid.ForkIdManager; |
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; |
||||
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive; |
||||
import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; |
||||
import org.hyperledger.besu.plugin.services.storage.DataStorageFormat; |
||||
import org.hyperledger.besu.testutil.DeterministicEthScheduler; |
||||
import org.hyperledger.besu.testutil.TestClock; |
||||
|
||||
import java.math.BigInteger; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
import java.util.Optional; |
||||
|
||||
import org.apache.tuweni.bytes.Bytes; |
||||
|
||||
public class EthProtocolManagerTestBuilder { |
||||
private static final BigInteger DEFAULT_NETWORK_ID = BigInteger.ONE; |
||||
private static final ProtocolSchedule DEFAULT_PROTOCOL_SCHEDULE = ProtocolScheduleFixture.MAINNET; |
||||
|
||||
private ProtocolSchedule protocolSchedule; |
||||
private GenesisConfigFile genesisConfigFile; |
||||
private GenesisState genesisState; |
||||
private Blockchain blockchain; |
||||
private BigInteger networkId; |
||||
private WorldStateArchive worldStateArchive; |
||||
private TransactionPool transactionPool; |
||||
private EthProtocolConfiguration ethereumWireProtocolConfiguration; |
||||
private ForkIdManager forkIdManager; |
||||
private EthPeers ethPeers; |
||||
private EthMessages ethMessages; |
||||
private EthMessages snapMessages; |
||||
private EthScheduler ethScheduler; |
||||
private EthContext ethContext; |
||||
private List<PeerValidator> peerValidators; |
||||
private Optional<MergePeerFilter> mergePeerFilter; |
||||
private SynchronizerConfiguration synchronizerConfiguration; |
||||
|
||||
public static EthProtocolManagerTestBuilder builder() { |
||||
return new EthProtocolManagerTestBuilder(); |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setProtocolSchedule( |
||||
final ProtocolSchedule protocolSchedule) { |
||||
this.protocolSchedule = protocolSchedule; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setGenesisConfigFile( |
||||
final GenesisConfigFile genesisConfigFile) { |
||||
this.genesisConfigFile = genesisConfigFile; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setGenesisState(final GenesisState genesisState) { |
||||
this.genesisState = genesisState; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setBlockchain(final Blockchain blockchain) { |
||||
this.blockchain = blockchain; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setNetworkId(final BigInteger networkId) { |
||||
this.networkId = networkId; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setWorldStateArchive( |
||||
final WorldStateArchive worldStateArchive) { |
||||
this.worldStateArchive = worldStateArchive; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setTransactionPool(final TransactionPool transactionPool) { |
||||
this.transactionPool = transactionPool; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setEthereumWireProtocolConfiguration( |
||||
final EthProtocolConfiguration ethereumWireProtocolConfiguration) { |
||||
this.ethereumWireProtocolConfiguration = ethereumWireProtocolConfiguration; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setForkIdManager(final ForkIdManager forkIdManager) { |
||||
this.forkIdManager = forkIdManager; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setEthPeers(final EthPeers ethPeers) { |
||||
this.ethPeers = ethPeers; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setEthMessages(final EthMessages ethMessages) { |
||||
this.ethMessages = ethMessages; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setSnapMessages(final EthMessages snapMessages) { |
||||
this.snapMessages = snapMessages; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setEthContext(final EthContext ethContext) { |
||||
this.ethContext = ethContext; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setPeerValidators(final List<PeerValidator> peerValidators) { |
||||
this.peerValidators = peerValidators; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setMergePeerFilter( |
||||
final Optional<MergePeerFilter> mergePeerFilter) { |
||||
this.mergePeerFilter = mergePeerFilter; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setSynchronizerConfiguration( |
||||
final SynchronizerConfiguration synchronizerConfiguration) { |
||||
this.synchronizerConfiguration = synchronizerConfiguration; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManagerTestBuilder setEthScheduler(final EthScheduler ethScheduler) { |
||||
this.ethScheduler = ethScheduler; |
||||
return this; |
||||
} |
||||
|
||||
public EthProtocolManager build() { |
||||
if (protocolSchedule == null) { |
||||
protocolSchedule = DEFAULT_PROTOCOL_SCHEDULE; |
||||
} |
||||
if (genesisConfigFile == null) { |
||||
genesisConfigFile = GenesisConfigFile.mainnet(); |
||||
} |
||||
if (genesisState == null) { |
||||
genesisState = GenesisState.fromConfig(genesisConfigFile, protocolSchedule); |
||||
} |
||||
if (blockchain == null) { |
||||
blockchain = createInMemoryBlockchain(genesisState.getBlock()); |
||||
} |
||||
if (networkId == null) { |
||||
networkId = DEFAULT_NETWORK_ID; |
||||
} |
||||
if (worldStateArchive == null) { |
||||
worldStateArchive = |
||||
BlockchainSetupUtil.forTesting(DataStorageFormat.FOREST).getWorldArchive(); |
||||
} |
||||
if (transactionPool == null) { |
||||
transactionPool = mock(TransactionPool.class); |
||||
} |
||||
if (ethereumWireProtocolConfiguration == null) { |
||||
ethereumWireProtocolConfiguration = EthProtocolConfiguration.defaultConfig(); |
||||
} |
||||
if (forkIdManager == null) { |
||||
forkIdManager = |
||||
new ForkIdManager(blockchain, Collections.emptyList(), Collections.emptyList(), false); |
||||
} |
||||
if (ethPeers == null) { |
||||
ethPeers = |
||||
new EthPeers( |
||||
() -> protocolSchedule.getByBlockHeader(blockchain.getChainHeadHeader()), |
||||
TestClock.fixed(), |
||||
new NoOpMetricsSystem(), |
||||
EthProtocolConfiguration.DEFAULT_MAX_MESSAGE_SIZE, |
||||
Collections.emptyList(), |
||||
Bytes.random(64), |
||||
25, |
||||
25, |
||||
false, |
||||
SyncMode.FAST, |
||||
forkIdManager); |
||||
} |
||||
ethPeers.setChainHeadTracker(EthProtocolManagerTestUtil.getChainHeadTrackerMock()); |
||||
if (ethMessages == null) { |
||||
ethMessages = new EthMessages(); |
||||
} |
||||
if (snapMessages == null) { |
||||
snapMessages = new EthMessages(); |
||||
} |
||||
if (ethScheduler == null) { |
||||
ethScheduler = |
||||
new DeterministicEthScheduler(DeterministicEthScheduler.TimeoutPolicy.NEVER_TIMEOUT); |
||||
} |
||||
if (ethContext == null) { |
||||
ethContext = new EthContext(ethPeers, ethMessages, snapMessages, ethScheduler); |
||||
} |
||||
if (peerValidators == null) { |
||||
peerValidators = Collections.emptyList(); |
||||
} |
||||
if (mergePeerFilter == null) { |
||||
mergePeerFilter = Optional.of(new MergePeerFilter()); |
||||
} |
||||
if (synchronizerConfiguration == null) { |
||||
synchronizerConfiguration = SynchronizerConfiguration.builder().build(); |
||||
} |
||||
return new EthProtocolManager( |
||||
blockchain, |
||||
networkId, |
||||
worldStateArchive, |
||||
transactionPool, |
||||
ethereumWireProtocolConfiguration, |
||||
ethPeers, |
||||
ethMessages, |
||||
ethContext, |
||||
peerValidators, |
||||
mergePeerFilter, |
||||
synchronizerConfiguration, |
||||
ethScheduler, |
||||
forkIdManager); |
||||
} |
||||
} |
Loading…
Reference in new issue