### Question:
RecentChainData implements StoreUpdateHandler { public SafeFuture<Void> initializeFromGenesis(final BeaconState genesisState) { final AnchorPoint genesis = AnchorPoint.fromGenesisState(genesisState); return StoreBuilder.forkChoiceStoreBuilder( asyncRunner, metricsSystem, blockProvider, stateProvider, genesis) .storeConfig(storeConfig) .build() .thenAccept( store -> { final boolean result = setStore(store); if (!result) { throw new IllegalStateException( "Failed to set genesis state: store has already been initialized"); } storageUpdateChannel.onGenesis(genesis); eventBus.post(genesis); final SignedBlockAndState headBlock = store.getLatestFinalizedBlockAndState(); updateHead(headBlock.getRoot(), headBlock.getSlot()); }); } RecentChainData(
      final AsyncRunner asyncRunner,
      final MetricsSystem metricsSystem,
      final StoreConfig storeConfig,
      final BlockProvider blockProvider,
      final StateAndBlockProvider stateProvider,
      final StorageUpdateChannel storageUpdateChannel,
      final ProtoArrayStorageChannel protoArrayStorageChannel,
      final FinalizedCheckpointChannel finalizedCheckpointChannel,
      final ChainHeadChannel chainHeadChannel,
      final EventBus eventBus); void subscribeStoreInitialized(Runnable runnable); void subscribeBestBlockInitialized(Runnable runnable); SafeFuture<Void> initializeFromGenesis(final BeaconState genesisState); UInt64 getGenesisTime(); boolean isPreGenesis(); boolean isPreForkChoice(); UpdatableStore getStore(); NavigableMap<UInt64, Bytes32> getAncestorRootsOnHeadChain(
      final UInt64 startSlot, final UInt64 step, final UInt64 count); NavigableMap<UInt64, Bytes32> getAncestorsOnFork(final UInt64 startSlot, Bytes32 root); Optional<ForkChoiceStrategy> getForkChoiceStrategy(); StoreTransaction startStoreTransaction(); void updateHead(Bytes32 root, UInt64 currentSlot); void updateHead(Bytes32 root, UInt64 currentSlot, boolean syncing); Optional<UInt64> getCurrentSlot(); Optional<ForkInfo> getHeadForkInfo(); Optional<Fork> getNextFork(); Optional<ForkInfo> getForkInfoAtCurrentTime(); Optional<Bytes32> getBestBlockRoot(); Optional<BeaconBlockAndState> getHeadBlockAndState(); Optional<SignedBeaconBlock> getHeadBlock(); Optional<BeaconState> getBestState(); UInt64 getHeadSlot(); boolean containsBlock(final Bytes32 root); SafeFuture<Optional<BeaconBlock>> retrieveBlockByRoot(final Bytes32 root); SafeFuture<Optional<SignedBeaconBlock>> retrieveSignedBlockByRoot(final Bytes32 root); SafeFuture<Optional<BeaconState>> retrieveBlockState(final Bytes32 blockRoot); SafeFuture<Optional<BeaconState>> retrieveStateInEffectAtSlot(final UInt64 slot); Optional<Bytes32> getBlockRootBySlot(final UInt64 slot); Optional<Bytes32> getBlockRootBySlot(final UInt64 slot, final Bytes32 headBlockRoot); UInt64 getFinalizedEpoch(); Optional<Checkpoint> getFinalizedCheckpoint(); Optional<Checkpoint> getJustifiedCheckpoint(); @Override void onNewFinalizedCheckpoint(Checkpoint finalizedCheckpoint); SafeFuture<Optional<BeaconState>> retrieveCheckpointState(final Checkpoint checkpoint);  }### Answer:
@Test public void updateHead_noReorgEventWhenBestBlockFirstSet() { final SafeFuture<Void> initialized = preGenesisStorageClient.initializeFromGenesis(genesisState); assertThat(initialized).isCompleted(); assertThat(preGenesisStorageSystem.reorgEventChannel().getReorgEvents()).isEmpty(); assertThat(getReorgCountMetric(preGenesisStorageSystem)).isZero(); }