### Question:
FusionIndexAccessor extends FusionIndexBase<IndexAccessor> implements IndexAccessor { @Override public void drop() { instanceSelector.forAll( IndexAccessor::drop ); dropAction.drop( descriptor.getId() ); } FusionIndexAccessor( SlotSelector slotSelector,
            InstanceSelector<IndexAccessor> instanceSelector,
            StoreIndexDescriptor descriptor,
            IndexDropAction dropAction ); @Override void drop(); @Override IndexUpdater newUpdater( IndexUpdateMode mode ); @Override void force( IOLimiter ioLimiter ); @Override void refresh(); @Override void close(); @Override IndexReader newReader(); @Override BoundedIterable<Long> newAllEntriesReader(); @Override ResourceIterator<File> snapshotFiles(); @Override Map<String,Value> indexConfig(); @Override void verifyDeferredConstraints( NodePropertyAccessor nodePropertyAccessor ); @Override boolean isDirty(); @Override void validateBeforeCommit( Value[] tuple ); @Override boolean consistencyCheck( ReporterFactory reporterFactory );  }### Answer:
@Test public void dropMustDropAll() { fusionIndexAccessor.drop(); for ( IndexAccessor accessor : aliveAccessors ) { verify( accessor, times( 1 ) ).drop(); } verify( dropAction ).drop( indexId ); }
@Test public void dropMustThrowIfAllFail() { List<UncheckedIOException> exceptions = new ArrayList<>(); for ( IndexAccessor indexAccessor : aliveAccessors ) { UncheckedIOException exception = new UncheckedIOException( new IOException( indexAccessor.getClass().getSimpleName() + " fail" ) ); exceptions.add( exception ); doThrow( exception ).when( indexAccessor ).drop(); } try { fusionIndexAccessor.drop(); fail( "Should have failed" ); } catch ( UncheckedIOException e ) { assertThat( exceptions, hasItem( e ) ); } }