Coverage Summary for Class: CheckingBestHeaderSyncState (co.rsk.net)

Class Class, % Method, % Line, %
CheckingBestHeaderSyncState 0% (0/1) 0% (0/5) 0% (0/16)


1 package co.rsk.net; 2  3 import co.rsk.net.sync.*; 4 import co.rsk.scoring.EventType; 5 import co.rsk.validators.BlockHeaderValidationRule; 6 import org.ethereum.core.BlockHeader; 7 import org.ethereum.util.ByteUtil; 8  9 import java.util.List; 10  11 public class CheckingBestHeaderSyncState extends BaseSyncState implements SyncState { 12  private final BlockHeaderValidationRule blockHeaderValidationRule; 13  private final Peer selectedPeer; 14  private final ChunkDescriptor miniChunk; 15  16  public CheckingBestHeaderSyncState( 17  SyncConfiguration syncConfiguration, 18  SyncEventsHandler syncEventsHandler, 19  BlockHeaderValidationRule blockHeaderValidationRule, 20  Peer peer, 21  byte[] bestBlockHash) { 22  super(syncEventsHandler, syncConfiguration); 23  this.blockHeaderValidationRule = blockHeaderValidationRule; 24  this.selectedPeer = peer; 25  this.miniChunk = new ChunkDescriptor(bestBlockHash, 1); 26  } 27  28  @Override 29  public void onEnter(){ 30  trySendRequest(); 31  } 32  33  @Override 34  public void newBlockHeaders(List<BlockHeader> chunk){ 35  BlockHeader header = chunk.get(0); 36  if (!ByteUtil.fastEquals(header.getHash().getBytes(), miniChunk.getHash()) || 37  !blockHeaderValidationRule.isValid(header)) { 38  syncEventsHandler.onErrorSyncing( 39  selectedPeer.getPeerNodeID(), 40  "Invalid chunk received from node {}", EventType.INVALID_HEADER, 41  this.getClass()); 42  return; 43  } 44  45  syncEventsHandler.startFindingConnectionPoint(selectedPeer); 46  } 47  48  private void trySendRequest() { 49  syncEventsHandler.sendBlockHeadersRequest(selectedPeer, miniChunk); 50  } 51  52  @Override 53  protected void onMessageTimeOut() { 54  syncEventsHandler.onErrorSyncing(selectedPeer.getPeerNodeID(), 55  "Timeout waiting requests {}", 56  EventType.TIMEOUT_MESSAGE, 57  this.getClass(), 58  selectedPeer.getPeerNodeID()); 59  } 60 }