### Question:
LocalSigner implements Signer { @Override public SafeFuture<BLSSignature> signAggregateAndProof( final AggregateAndProof aggregateAndProof, final ForkInfo forkInfo) { return sign(signingRootForSignAggregateAndProof(aggregateAndProof, 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 shouldSignAggregateAndProof() { final AggregateAndProof aggregateAndProof = dataStructureUtil.randomAggregateAndProof(); final BLSSignature expectedSignature = BLSSignature.fromBytesCompressed( Bytes.fromBase64String( "kHbIuvFcS/kDppbCj0ILOU27ZjSU1P2wPsOKBBwGaz1uvXQxtUXQAdbybN1zotZqCs6pstChIIxDS/WgAZH2z4yX2cM/cM/iKayT2rZZJuu31V2uxP1AYVcyHLEMtF07")); final SafeFuture<BLSSignature> result = signer.signAggregateAndProof(aggregateAndProof, fork); asyncRunner.executeQueuedActions(); assertThat(result).isCompletedWithValue(expectedSignature); }