### Question:
LocalSigner implements Signer { @Override public SafeFuture<BLSSignature> signBlock(final BeaconBlock block, final ForkInfo forkInfo) { return sign(signingRootForSignBlock(block, forkInfo)); } LocalSigner(final BLSKeyPair keypair, final AsyncRunner asyncRunner); @Override SafeFuture<BLSSignature> createRandaoReveal(final UInt64 epoch, final ForkInfo forkInfo); @Override SafeFuture<BLSSignature> signBlock(final BeaconBlock block, final ForkInfo forkInfo); @Override SafeFuture<BLSSignature> signAttestationData(
      final AttestationData attestationData, final ForkInfo forkInfo); @Override SafeFuture<BLSSignature> signAggregationSlot(final UInt64 slot, final ForkInfo forkInfo); @Override SafeFuture<BLSSignature> signAggregateAndProof(
      final AggregateAndProof aggregateAndProof, final ForkInfo forkInfo); @Override SafeFuture<BLSSignature> signVoluntaryExit(
      final VoluntaryExit voluntaryExit, final ForkInfo forkInfo); @Override boolean isLocal();  }### Answer:
@Test public void shouldSignBlock() { final BeaconBlock block = dataStructureUtil.randomBeaconBlock(10); final BLSSignature expectedSignature = BLSSignature.fromBytesCompressed( Bytes.fromBase64String( "luIZGEgsjSbFo4MEPVeqaqqm1AnnTODcxFy9gPmdAywVmDIpqkzYed8DJ2l4zx5WAejUTox+NO5HQ4M2APMNovd7FuqnCSVUEftrL4WtJqegPrING2ZCtVTrcaUzFpUQ")); final SafeFuture<BLSSignature> result = signer.signBlock(block, fork); asyncRunner.executeQueuedActions(); assertThat(result).isCompletedWithValue(expectedSignature); }