23
23
#include < catch2/catch.hpp>
24
24
#include < evmc/evmc.h>
25
25
#include < gmock/gmock.h>
26
- #include < nlohmann/json.hpp>
27
26
28
27
#include < silkworm/core/common/empty_hashes.hpp>
29
28
#include < silkworm/core/common/util.hpp>
@@ -60,30 +59,6 @@ static silkworm::Bytes kHeader{*silkworm::from_hex(
60
59
" ddcab467d5db31d063f2d58f266fa86c4502aa169d17762090e92b821843de69b41adbb5d86f5d114ba7f01a000000000000000000000"
61
60
" 00000000000000000000000000000000000000000000880000000000000000" )};
62
61
static silkworm::Bytes kBody {*silkworm::from_hex (" c68369e45a03c0" )};
63
- static silkworm::Bytes kNotEmptyBody {*silkworm::from_hex (" c683897f2e04c0" )};
64
- static silkworm::Bytes kInvalidJsonChainConfig {*silkworm::from_hex (" 000102" )};
65
- static silkworm::Bytes kMissingChainIdConfig {*silkworm::from_hex (
66
- " 7b226265726c696e426c6f636b223a31323234343030302c"
67
- " 2262797a616e7469756d426c6f636b223a343337303030302c22636f6e7374616e74696e6f706c65426c6f636b223a373238303030302"
68
- " c2264616f466f726b426c6f636b223a313932303030302c22656970313530426c6f636b223a323436333030302c22656970313535426c"
69
- " 6f636b223a323637353030302c22657468617368223a7b7d2c22686f6d657374656164426c6f636b223a313135303030302c226973746"
70
- " 16e62756c426c6f636b223a393036393030302c226c6f6e646f6e426c6f636b223a31323936353030302c226d756972476c6163696572"
71
- " 426c6f636b223a393230303030302c2270657465727362757267426c6f636b223a373238303030307d" )};
72
- static silkworm::Bytes kInvalidChainIdConfig {*silkworm::from_hex (
73
- " 7b226265726c696e426c6f636b223a31323234343030302c"
74
- " 2262797a616e7469756d426c6f636b223a343337303030302c22636861696e4964223a22666f6f222c22636f6e7374616e74696e6f706"
75
- " c65426c6f636b223a373238303030302c2264616f466f726b426c6f636b223a313932303030302c22656970313530426c6f636b223a32"
76
- " 3436333030302c22656970313535426c6f636b223a323637353030302c22657468617368223a7b7d2c22686f6d657374656164426c6f6"
77
- " 36b223a313135303030302c22697374616e62756c426c6f636b223a393036393030302c226c6f6e646f6e426c6f636b223a3132393635"
78
- " 3030302c226d756972476c6163696572426c6f636b223a393230303030302c2270657465727362757267426c6f636b223a37323830303"
79
- " 0307d" )};
80
- static silkworm::Bytes kChainConfig {*silkworm::from_hex (
81
- " 7b226265726c696e426c6f636b223a31323234343030302c2262797a6"
82
- " 16e7469756d426c6f636b223a343337303030302c22636861696e4964223a312c22636f6e7374616e74696e6f706c65426c6f636b223a"
83
- " 373238303030302c2264616f466f726b426c6f636b223a313932303030302c22656970313530426c6f636b223a323436333030302c226"
84
- " 56970313535426c6f636b223a323637353030302c22657468617368223a7b7d2c22686f6d657374656164426c6f636b223a3131353030"
85
- " 30302c22697374616e62756c426c6f636b223a393036393030302c226c6f6e646f6e426c6f636b223a31323936353030302c226d75697"
86
- " 2476c6163696572426c6f636b223a393230303030302c2270657465727362757267426c6f636b223a373238303030307d" )};
87
62
88
63
TEST_CASE (" read_header_number" ) {
89
64
silkworm::test_util::SetLogVerbosityGuard log_guard{log::Level::kNone };
@@ -110,81 +85,6 @@ TEST_CASE("read_header_number") {
110
85
}
111
86
}
112
87
113
- TEST_CASE (" read_chain_config" ) {
114
- silkworm::test_util::SetLogVerbosityGuard log_guard{log::Level::kNone };
115
- WorkerPool pool{1 };
116
- test::MockTransaction transaction;
117
-
118
- SECTION (" empty chain data" ) {
119
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
120
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return silkworm::Bytes{}; }));
121
- auto result = boost::asio::co_spawn (pool, read_chain_config (transaction), boost::asio::use_future);
122
- #ifdef SILKWORM_SANITIZE // Avoid comparison against exception message: it triggers a TSAN data race seemingly related to libstdc++ string implementation
123
- CHECK_THROWS_AS (result.get (), std::invalid_argument);
124
- #else
125
- CHECK_THROWS_MATCHES (result.get (), std::invalid_argument, Message (" empty chain config data in read_chain_config" ));
126
- #endif // SILKWORM_SANITIZE
127
- }
128
-
129
- SECTION (" invalid JSON chain data" ) {
130
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
131
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kInvalidJsonChainConfig ; }));
132
- auto result = boost::asio::co_spawn (pool, read_chain_config (transaction), boost::asio::use_future);
133
- CHECK_THROWS_AS (result.get (), nlohmann::json::parse_error);
134
- }
135
-
136
- SECTION (" valid JSON chain data" ) {
137
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
138
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kChainConfig ; }));
139
- auto result = boost::asio::co_spawn (pool, read_chain_config (transaction), boost::asio::use_future);
140
- const auto chain_config = result.get ();
141
- CHECK (chain_config.genesis_hash == 0x439816753229fc0736bf86a5048de4bc9fcdede8c91dadf88c828c76b2281dff_bytes32);
142
- CHECK (chain_config.config == R"( {
143
- "berlinBlock":12244000,
144
- "byzantiumBlock":4370000,
145
- "chainId":1,
146
- "constantinopleBlock":7280000,
147
- "daoForkBlock":1920000,
148
- "eip150Block":2463000,
149
- "eip155Block":2675000,
150
- "ethash":{},
151
- "homesteadBlock":1150000,
152
- "istanbulBlock":9069000,
153
- "londonBlock":12965000,
154
- "muirGlacierBlock":9200000,
155
- "petersburgBlock":7280000
156
- })" _json);
157
- }
158
- }
159
-
160
- TEST_CASE (" read_chain_id" ) {
161
- silkworm::test_util::SetLogVerbosityGuard log_guard{log::Level::kNone };
162
- WorkerPool pool{1 };
163
- test::MockTransaction transaction;
164
-
165
- SECTION (" missing chain identifier" ) {
166
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
167
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kMissingChainIdConfig ; }));
168
- auto result = boost::asio::co_spawn (pool, read_chain_id (transaction), boost::asio::use_future);
169
- CHECK_THROWS_AS (result.get (), std::runtime_error);
170
- }
171
-
172
- SECTION (" invalid chain identifier" ) {
173
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
174
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kInvalidChainIdConfig ; }));
175
- auto result = boost::asio::co_spawn (pool, read_chain_id (transaction), boost::asio::use_future);
176
- CHECK_THROWS_AS (result.get (), nlohmann::json::type_error);
177
- }
178
-
179
- SECTION (" valid chain identifier" ) {
180
- EXPECT_CALL (transaction, get_one (db::table::kCanonicalHashesName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kBlockHash ; }));
181
- EXPECT_CALL (transaction, get_one (db::table::kConfigName , _)).WillOnce (InvokeWithoutArgs ([]() -> Task<silkworm::Bytes> { co_return kChainConfig ; }));
182
- auto result = boost::asio::co_spawn (pool, read_chain_id (transaction), boost::asio::use_future);
183
- const auto chain_id = result.get ();
184
- CHECK (chain_id == 1 );
185
- }
186
- }
187
-
188
88
TEST_CASE (" read_canonical_block_hash" ) {
189
89
silkworm::test_util::SetLogVerbosityGuard log_guard{log::Level::kNone };
190
90
WorkerPool pool{1 };
0 commit comments