Skip to content

Commit 65ad17d

Browse files
committed
Generalize functional test fixtures for parameterized store init.
1 parent f56fa1a commit 65ad17d

26 files changed

Lines changed: 146 additions & 33 deletions

test/protocols/bitcoind/bitcoind.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@
2121
#include "bitcoind.hpp"
2222
#include <future>
2323

24-
bitcoind_setup_fixture::bitcoind_setup_fixture()
25-
: config_{ system::chain::selection::mainnet, test::web_pages, test::web_pages },
24+
bitcoind_setup_fixture::bitcoind_setup_fixture(const initializer& setup)
25+
: config_
26+
{
27+
system::chain::selection::mainnet,
28+
test::web_pages,
29+
test::web_pages
30+
},
2631
store_
2732
{
2833
[&]() NOEXCEPT -> const database::settings&
@@ -49,11 +54,11 @@ bitcoind_setup_fixture::bitcoind_setup_fixture()
4954
node_settings.minimum_fee_rate = 99.0;
5055
network_settings.inbound.connections = 0;
5156
network_settings.outbound.connections = 0;
52-
auto ec = store_.create([](auto, auto) {});
5357

5458
// Create and populate the store.
59+
auto ec = store_.create([](auto, auto) {});
5560
BOOST_REQUIRE_MESSAGE(!ec, ec.message());
56-
BOOST_REQUIRE_MESSAGE(test::setup_ten_block_store(query_), "bitcoind initialize");
61+
BOOST_REQUIRE_MESSAGE(setup(query_), "bitcoind initialize");
5762

5863
// Run the server.
5964
std::promise<code> running{};

test/protocols/bitcoind/bitcoind.hpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ struct bitcoind_setup_fixture
3030
{
3131
DELETE_COPY_MOVE(bitcoind_setup_fixture);
3232

33-
bitcoind_setup_fixture();
33+
using initializer = std::function<bool(test::query_t&)>;
34+
explicit bitcoind_setup_fixture(const initializer& setup);
3435
~bitcoind_setup_fixture();
3536

3637
// bitcoind does not implement any protocol version control or negotiation.
@@ -48,4 +49,16 @@ struct bitcoind_setup_fixture
4849
boost::asio::ip::tcp::socket socket_{ io };
4950
};
5051

52+
struct bitcoind_ten_block_setup_fixture
53+
: bitcoind_setup_fixture
54+
{
55+
inline bitcoind_ten_block_setup_fixture()
56+
: bitcoind_setup_fixture([](test::query_t& query)
57+
{
58+
return test::setup_ten_block_store(query);
59+
})
60+
{
61+
}
62+
};
63+
5164
#endif

test/protocols/bitcoind/bitcoind_rest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
#include "../../test.hpp"
2020
#include "bitcoind.hpp"
2121

22-
BOOST_FIXTURE_TEST_SUITE(bitcoind_tests, bitcoind_setup_fixture)
22+
BOOST_FIXTURE_TEST_SUITE(bitcoind_tests, bitcoind_ten_block_setup_fixture)
2323

2424
BOOST_AUTO_TEST_SUITE_END()

test/protocols/bitcoind/bitcoind_rpc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
#include "../../test.hpp"
2020
#include "bitcoind.hpp"
2121

22-
BOOST_FIXTURE_TEST_SUITE(bitcoind_tests, bitcoind_setup_fixture)
22+
BOOST_FIXTURE_TEST_SUITE(bitcoind_tests, bitcoind_ten_block_setup_fixture)
2323

2424
BOOST_AUTO_TEST_SUITE_END()

test/protocols/blocks.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,49 @@ bool setup_ten_block_store(query_t& query) NOEXCEPT
105105
query.push_confirmed(query.to_header(block9_hash), false);
106106
}
107107

108+
bool setup_three_block_store(query_t& query) NOEXCEPT
109+
{
110+
return query.initialize(genesis) &&
111+
query.set(block1, database::context{ 0, 1, 0 }, false, false) &&
112+
query.set(block2, database::context{ 0, 2, 0 }, false, false) &&
113+
query.push_confirmed(query.to_header(block1_hash), false) &&
114+
query.push_confirmed(query.to_header(block2_hash), false);
115+
}
116+
117+
bool setup_three_block_witness_store(query_t& query) NOEXCEPT
118+
{
119+
return query.initialize(genesis) &&
120+
query.set(block1a, database::context{ 0, 1, 0 }, false, false) &&
121+
query.set(block2a, database::context{ 0, 2, 0 }, false, false) &&
122+
query.push_confirmed(query.to_header(block1a.hash()), false) &&
123+
query.push_confirmed(query.to_header(block2a.hash()), false);
124+
}
125+
126+
bool setup_three_block_confirmed_address_store(query_t& query) NOEXCEPT
127+
{
128+
return query.initialize(genesis) &&
129+
query.set(block1a, database::context{ 0, 1, 0 }, false, false) &&
130+
query.set(block2a, database::context{ 0, 2, 0 }, false, false) &&
131+
query.set(test::tx4) &&
132+
query.set(test::tx5) &&
133+
query.set(block3a, database::context{ 0, 3, 0 }, false, false) &&
134+
query.set(block1b, database::context{ 0, 1, 0 }, false, false) &&
135+
query.set(block2b, database::context{ 0, 2, 0 }, false, false) &&
136+
query.push_confirmed(query.to_header(block1a.hash()), true) &&
137+
query.push_confirmed(query.to_header(block2a.hash()), true) &&
138+
query.push_confirmed(query.to_header(block3a.hash()), true);
139+
}
140+
141+
bool setup_three_block_unconfirmed_address_store(query_t& query) NOEXCEPT
142+
{
143+
return query.initialize(genesis) &&
144+
query.set(block1a, database::context{ 0, 1, 0 }, false, false) &&
145+
query.set(block2a, database::context{ 0, 2, 0 }, false, false) &&
146+
query.set(test::tx4) &&
147+
query.set(test::tx5) &&
148+
query.set(block3a, database::context{ 0, 3, 0 }, false, false);
149+
}
150+
108151
const block bogus_block10
109152
{
110153
header

test/protocols/blocks.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ extern const system::chain::block block2b;
9797
extern const system::chain::transaction tx2b;
9898

9999
bool setup_ten_block_store(query_t& query) NOEXCEPT;
100+
bool setup_three_block_store(query_t& query) NOEXCEPT;
101+
bool setup_three_block_witness_store(query_t& query) NOEXCEPT;
102+
bool setup_three_block_confirmed_address_store(query_t& query) NOEXCEPT;
103+
bool setup_three_block_unconfirmed_address_store(query_t& query) NOEXCEPT;
100104

101105
} // namespace test
102106

test/protocols/electrum/electrum.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,13 @@
2222
#include <future>
2323
#include <boost/format.hpp>
2424

25-
electrum_setup_fixture::electrum_setup_fixture()
26-
: config_{ system::chain::selection::mainnet, test::web_pages, test::web_pages },
25+
electrum_setup_fixture::electrum_setup_fixture(const initializer& setup)
26+
: config_
27+
{
28+
system::chain::selection::mainnet,
29+
test::web_pages,
30+
test::web_pages
31+
},
2732
store_
2833
{
2934
[&]() NOEXCEPT -> const database::settings&
@@ -55,11 +60,11 @@ electrum_setup_fixture::electrum_setup_fixture()
5560
node_settings.minimum_fee_rate = 99.0;
5661
network_settings.inbound.connections = 0;
5762
network_settings.outbound.connections = 0;
58-
auto ec = store_.create([](auto, auto) {});
5963

6064
// Create and populate the store.
65+
auto ec = store_.create([](auto, auto) {});
6166
BOOST_REQUIRE_MESSAGE(!ec, ec.message());
62-
BOOST_REQUIRE_MESSAGE(test::setup_ten_block_store(query_), "electrum initialize");
67+
BOOST_REQUIRE_MESSAGE(setup(query_), "electrum initialize");
6368

6469
// Run the server.
6570
std::promise<code> running{};

test/protocols/electrum/electrum.hpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ struct electrum_setup_fixture
2828
{
2929
DELETE_COPY_MOVE(electrum_setup_fixture);
3030

31-
electrum_setup_fixture();
31+
using initializer = std::function<bool(test::query_t&)>;
32+
explicit electrum_setup_fixture(const initializer& setup);
3233
~electrum_setup_fixture();
3334

3435
boost::json::value get(const std::string& request);
@@ -47,4 +48,28 @@ struct electrum_setup_fixture
4748
boost::asio::ip::tcp::socket socket_{ io };
4849
};
4950

51+
struct electrum_ten_block_setup_fixture
52+
: electrum_setup_fixture
53+
{
54+
inline electrum_ten_block_setup_fixture()
55+
: electrum_setup_fixture([](test::query_t& query)
56+
{
57+
return test::setup_ten_block_store(query);
58+
})
59+
{
60+
}
61+
};
62+
63+
struct electrum_three_block_confirmed_address_setup_fixture
64+
: electrum_setup_fixture
65+
{
66+
inline electrum_three_block_confirmed_address_setup_fixture()
67+
: electrum_setup_fixture([](test::query_t& query)
68+
{
69+
return test::setup_three_block_confirmed_address_store(query);
70+
})
71+
{
72+
}
73+
};
74+
5075
#endif

test/protocols/electrum/electrum_addresses.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "../../test.hpp"
2020
#include "electrum.hpp"
2121

22-
BOOST_FIXTURE_TEST_SUITE(electrum_tests, electrum_setup_fixture)
22+
BOOST_FIXTURE_TEST_SUITE(electrum_tests, electrum_three_block_confirmed_address_setup_fixture)
2323

2424
// blockchain.address.get_balance
2525
// blockchain.address.get_history

test/protocols/electrum/electrum_fees.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "../../test.hpp"
2020
#include "electrum.hpp"
2121

22-
BOOST_FIXTURE_TEST_SUITE(electrum_tests, electrum_setup_fixture)
22+
BOOST_FIXTURE_TEST_SUITE(electrum_tests, electrum_ten_block_setup_fixture)
2323

2424
using namespace system;
2525
static const code wrong_version{ server::error::wrong_version };

0 commit comments

Comments
 (0)