30
30
#include < vector>
31
31
32
32
namespace {
33
- const TestingSetup* g_setup;
33
+ TestingSetup* g_setup;
34
34
std::string_view LIMIT_TO_MESSAGE_TYPE{};
35
+
36
+ void ResetChainman (TestingSetup& setup)
37
+ {
38
+ SetMockTime (setup.m_node .chainman ->GetParams ().GenesisBlock ().Time ());
39
+ setup.m_node .chainman .reset ();
40
+ setup.m_make_chainman ();
41
+ setup.LoadVerifyActivateChainstate ();
42
+ for (int i = 0 ; i < 2 * COINBASE_MATURITY; i++) {
43
+ MineBlock (setup.m_node , {});
44
+ }
45
+ setup.m_node .validation_signals ->SyncWithValidationInterfaceQueue ();
46
+ }
35
47
} // namespace
36
48
37
49
void initialize_process_message ()
@@ -47,11 +59,7 @@ void initialize_process_message()
47
59
{}),
48
60
};
49
61
g_setup = testing_setup.get ();
50
- SetMockTime (WITH_LOCK (g_setup->m_node .chainman ->GetMutex (), return g_setup->m_node .chainman ->ActiveTip ()->Time ()));
51
- for (int i = 0 ; i < 2 * COINBASE_MATURITY; i++) {
52
- MineBlock (g_setup->m_node , {});
53
- }
54
- g_setup->m_node .validation_signals ->SyncWithValidationInterfaceQueue ();
62
+ ResetChainman (*g_setup);
55
63
}
56
64
57
65
FUZZ_TARGET (process_message, .init = initialize_process_message)
@@ -63,6 +71,7 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
63
71
connman.ResetAddrCache ();
64
72
connman.ResetMaxOutboundCycle ();
65
73
auto & chainman = static_cast <TestChainstateManager&>(*g_setup->m_node .chainman );
74
+ const auto block_index_size{WITH_LOCK (chainman.GetMutex (), return chainman.BlockIndex ().size ())};
66
75
SetMockTime (1610000000 ); // any time to successfully reset ibd
67
76
chainman.ResetIbd ();
68
77
chainman.DisableNextWrite ();
@@ -111,4 +120,8 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
111
120
}
112
121
g_setup->m_node .validation_signals ->SyncWithValidationInterfaceQueue ();
113
122
g_setup->m_node .connman ->StopNodes ();
123
+ if (block_index_size != WITH_LOCK (chainman.GetMutex (), return chainman.BlockIndex ().size ())) {
124
+ // Reuse the global chainman, but reset it when it is dirty
125
+ ResetChainman (*g_setup);
126
+ }
114
127
}
0 commit comments