### Question:
ValidatorApiHandler implements ValidatorApiChannel { @Override public void sendSignedAttestation( final Attestation attestation, final Optional<Integer> expectedValidatorIndex) { attestationManager .onAttestation(ValidateableAttestation.fromAttestation(attestation)) .finish( result -> { result.ifInvalid( reason -> VALIDATOR_LOGGER.producedInvalidAttestation( attestation.getData().getSlot(), reason)); dutyMetrics.onAttestationPublished(attestation.getData().getSlot()); performanceTracker.saveProducedAttestation(attestation); }, err -> LOG.error( "Failed to send signed attestation for slot {}, block {}", attestation.getData().getSlot(), attestation.getData().getBeacon_block_root())); } ValidatorApiHandler(
      final CombinedChainDataClient combinedChainDataClient,
      final SyncStateTracker syncStateTracker,
      final StateTransition stateTransition,
      final BlockFactory blockFactory,
      final AggregatingAttestationPool attestationPool,
      final AttestationManager attestationManager,
      final AttestationTopicSubscriber attestationTopicSubscriber,
      final EventBus eventBus,
      final DutyMetrics dutyMetrics,
      final PerformanceTracker performanceTracker); @Override SafeFuture<Optional<ForkInfo>> getForkInfo(); @Override SafeFuture<Optional<UInt64>> getGenesisTime(); @Override SafeFuture<Optional<List<ValidatorDuties>>> getDuties(
      final UInt64 epoch, final Collection<BLSPublicKey> publicKeys); @Override SafeFuture<Optional<List<AttesterDuties>>> getAttestationDuties(
      final UInt64 epoch, final Collection<Integer> validatorIndexes); @Override SafeFuture<Optional<List<ProposerDuties>>> getProposerDuties(final UInt64 epoch); @Override SafeFuture<Optional<BeaconBlock>> createUnsignedBlock(
      final UInt64 slot, final BLSSignature randaoReveal, final Optional<Bytes32> graffiti); @Override SafeFuture<Optional<Attestation>> createUnsignedAttestation(
      final UInt64 slot, final int committeeIndex); @Override SafeFuture<Optional<Attestation>> createAggregate(final Bytes32 attestationHashTreeRoot); @Override void subscribeToBeaconCommitteeForAggregation(
      final int committeeIndex, final UInt64 aggregationSlot); @Override void subscribeToPersistentSubnets(Set<SubnetSubscription> subnetSubscriptions); @Override void sendSignedAttestation(
      final Attestation attestation, final Optional<Integer> expectedValidatorIndex); @Override void sendSignedAttestation(final Attestation attestation); @Override void sendAggregateAndProof(final SignedAggregateAndProof aggregateAndProof); @Override void sendSignedBlock(final SignedBeaconBlock block);  }### Answer:
@Test public void sendSignedAttestation_shouldAddAttestationToAggregatorAndEventBus() { final Attestation attestation = dataStructureUtil.randomAttestation(); when(attestationManager.onAttestation(any(ValidateableAttestation.class))) .thenReturn(completedFuture(SUCCESSFUL)); validatorApiHandler.sendSignedAttestation(attestation); verify(attestationManager).onAttestation(ValidateableAttestation.fromAttestation(attestation)); }