https://cirrus-ci.com/task/6024293113397248?logs=ci#L3199

```
Simulating node restart
2023-03-23T20:11:01.824273Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write block and undo data to disk started
2023-03-23T20:11:01.824318Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write block and undo data to disk completed (0.03ms)
2023-03-23T20:11:01.824330Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write block index to disk started
2023-03-23T20:11:01.825668Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write block index to disk completed (1.33ms)
2023-03-23T20:11:01.825686Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write coins cache to disk (0 coins, 0kB) started
2023-03-23T20:11:01.825704Z (mocktime: 2020-08-31T15:36:02Z) [test] [txdb.cpp:167] [BatchWrite] [coindb] Writing final batch of 0.00 MiB
2023-03-23T20:11:01.825719Z (mocktime: 2020-08-31T15:36:02Z) [test] [txdb.cpp:169] [BatchWrite] [coindb] Committed 0 changed transaction outputs (out of 0) to coin database...
2023-03-23T20:11:01.825732Z (mocktime: 2020-08-31T15:36:02Z) [test] [logging/timer.h:58] [Log] [bench] FlushStateToDisk: write coins cache to disk (0 coins, 0kB) completed (0.03ms)
2023-03-23T20:11:01.825744Z (mocktime: 2020-08-31T15:36:02Z) [test] [validationinterface.cpp:249] [ChainStateFlushed] [validation] Enqueuing ChainStateFlushed: block hash=696e92821f65549c7ee134edceeeeaaa4105647a3c4fd9f298c0aec0ab50425c
Performing Load/Verify/Activate of chainstate
test_bitcoin: ./chain.h:261: uint256 CBlockIndex::GetBlockHash() const: Assertion `phashBlock != nullptr' failed.
make[3]: *** [Makefile:21821: test/validation_chainstatemanager_tests.cpp.test] Error 1
Chainstate& c2 = WITH_LOCK(::cs_main, return manager.ActivateExistingSnapshot(
        &mempool, snapshot_blockhash));
    chainstates.push_back(&c2);
    BOOST_CHECK_EQUAL(manager.SnapshotBlockhash().value(), snapshot_blockhash);
    c2.InitCoinsDB(
        1 << 23, true, false);
    WITH_LOCK(::cs_main, c2.InitCoinsCache(1 << 23));
    
    c2.LoadGenesisBlock();
    BlockValidationState _;
    BOOST_CHECK(c2.ActivateBestChain(_, nullptr));
    BOOST_CHECK(manager.IsSnapshotActive());
    BOOST_CHECK(WITH_LOCK(::cs_main, return !manager.IsSnapshotValidated()));
    BOOST_CHECK_EQUAL(&c2, &manager.ActiveChainstate());
    BOOST_CHECK(&c1 != &manager.ActiveChainstate());
    auto all2 = manager.GetAll();
    BOOST_CHECK_EQUAL_COLLECTIONS(all2.begin(), all2.end(), chainstates.begin(), chainstates.end());
    auto& active_chain2 = WITH_LOCK(manager.GetMutex(), return manager.ActiveChain());
    BOOST_CHECK_EQUAL(&active_chain2, &c2.m_chain);
    BOOST_CHECK_EQUAL(WITH_LOCK(manager.GetMutex(), return manager.ActiveHeight()), 0);
    auto active_tip2 = WITH_LOCK(manager.GetMutex(), return manager.ActiveTip());
    auto exp_tip2 = c2.m_chain.Tip();
    BOOST_CHECK_EQUAL(active_tip2, exp_tip2);
    
    
    BOOST_CHECK(exp_tip != exp_tip2);
    
    SyncWithValidationInterfaceQueue();
}
BOOST_AUTO_TEST_CASE(chainstatemanager_rebalance_caches)