diff --git a/Makefile.am b/Makefile.am
index f3279ef4..fd5e7d6e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -65,6 +65,7 @@ test_libbitcoin_database_test_SOURCES = \
test/store.cpp \
test/test.cpp \
test/test.hpp \
+ test/types.cpp \
test/file/rotator.cpp \
test/file/utilities.cpp \
test/locks/file_lock.cpp \
@@ -88,27 +89,48 @@ test_libbitcoin_database_test_SOURCES = \
test/primitives/linkage.cpp \
test/primitives/manager.cpp \
test/primitives/nomap.cpp \
- test/query/archive_read.cpp \
- test/query/archive_write.cpp \
- test/query/confirm.cpp \
- test/query/consensus.cpp \
- test/query/context.cpp \
+ test/query/amounts.cpp \
+ test/query/confirmed.cpp \
test/query/extent.cpp \
- test/query/fees.cpp \
+ test/query/fee_rate.cpp \
+ test/query/filters.cpp \
test/query/height.cpp \
test/query/initialize.cpp \
+ test/query/locator.cpp \
test/query/merkle.cpp \
- test/query/network.cpp \
- test/query/objects.cpp \
- test/query/optional.cpp \
- test/query/translate.cpp \
- test/query/validate.cpp \
- test/query/wire.cpp \
+ test/query/properties_block.cpp \
+ test/query/properties_tx.cpp \
+ test/query/sequences.cpp \
+ test/query/sizes.cpp \
+ test/query/address/address_balance.cpp \
+ test/query/address/address_history.cpp \
+ test/query/address/address_outpoints.cpp \
+ test/query/address/address_unspent.cpp \
+ test/query/archive/chain_reader.cpp \
+ test/query/archive/chain_writer.cpp \
+ test/query/archive/wire_reader.cpp \
+ test/query/archive/wire_writer.cpp \
+ test/query/consensus/consensus_block.cpp \
+ test/query/consensus/consensus_chain_state.cpp \
+ test/query/consensus/consensus_compact.cpp \
+ test/query/consensus/consensus_forks.cpp \
+ test/query/consensus/consensus_populate.cpp \
+ test/query/consensus/consensus_prevouts.cpp \
+ test/query/consensus/consensus_states.cpp \
+ test/query/consensus/consensus_strong.cpp \
+ test/query/consensus/consensus_transaction.cpp \
+ test/query/consensus/consensus_work.cpp \
+ test/query/navigate/navigate_arraymap.cpp \
+ test/query/navigate/navigate_forward.cpp \
+ test/query/navigate/navigate_hashmap.cpp \
+ test/query/navigate/navigate_natural.cpp \
+ test/query/navigate/navigate_reverse.cpp \
test/tables/archives/header.cpp \
test/tables/archives/input.cpp \
+ test/tables/archives/ins.cpp \
test/tables/archives/output.cpp \
+ test/tables/archives/outs.cpp \
test/tables/archives/point.cpp \
- test/tables/archives/puts.cpp \
test/tables/archives/transaction.cpp \
test/tables/archives/txs.cpp \
test/tables/caches/duplicate.cpp \
@@ -202,12 +224,12 @@ include_bitcoin_database_impl_query_address_HEADERS = \
include/bitcoin/database/impl/query/address/address_outpoints.ipp \
include/bitcoin/database/impl/query/address/address_unspent.ipp
-include_bitcoin_database_impl_query_archivaldir = ${includedir}/bitcoin/database/impl/query/archival
-include_bitcoin_database_impl_query_archival_HEADERS = \
- include/bitcoin/database/impl/query/archival/chain_reader.ipp \
- include/bitcoin/database/impl/query/archival/chain_writer.ipp \
- include/bitcoin/database/impl/query/archival/wire_reader.ipp \
- include/bitcoin/database/impl/query/archival/wire_writer.ipp
+include_bitcoin_database_impl_query_archivedir = ${includedir}/bitcoin/database/impl/query/archive
+include_bitcoin_database_impl_query_archive_HEADERS = \
+ include/bitcoin/database/impl/query/archive/chain_reader.ipp \
+ include/bitcoin/database/impl/query/archive/chain_writer.ipp \
+ include/bitcoin/database/impl/query/archive/wire_reader.ipp \
+ include/bitcoin/database/impl/query/archive/wire_writer.ipp
include_bitcoin_database_impl_query_consensusdir = ${includedir}/bitcoin/database/impl/query/consensus
include_bitcoin_database_impl_query_consensus_HEADERS = \
diff --git a/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj b/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj
index f1f1c41a..3c94bc21 100644
--- a/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj
+++ b/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj
@@ -147,31 +147,52 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
$(IntDir)test_query_height.obj
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
@@ -188,6 +209,7 @@
$(IntDir)test_test.obj
+
diff --git a/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj.filters b/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj.filters
index 175e235e..510a16a5 100644
--- a/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj.filters
+++ b/builds/msvc/vs2022/libbitcoin-database-test/libbitcoin-database-test.vcxproj.filters
@@ -28,20 +28,32 @@
{5C4DA53A-8C06-4DA6-0000-000000000006}
+
+ {5C4DA53A-8C06-4DA6-0000-000000000008}
+
+
+ {5C4DA53A-8C06-4DA6-0000-000000000009}
+
+
+ {5C4DA53A-8C06-4DA6-0000-00000000000A}
+
+
+ {5C4DA53A-8C06-4DA6-0000-00000000000B}
+
{5C4DA53A-8C06-4DA6-0000-000000000007}
- {5C4DA53A-8C06-4DA6-0000-000000000008}
+ {5C4DA53A-8C06-4DA6-0000-00000000000C}
- {5C4DA53A-8C06-4DA6-0000-000000000009}
+ {5C4DA53A-8C06-4DA6-0000-00000000000D}
- {5C4DA53A-8C06-4DA6-0000-00000000000A}
+ {5C4DA53A-8C06-4DA6-0000-00000000000E}
- {5C4DA53A-8C06-4DA6-0000-00000000000B}
+ {5C4DA53A-8C06-4DA6-0000-00000000000F}
@@ -108,25 +120,73 @@
src\primitives
-
- src\query
+
+ src\query\address
-
- src\query
+
+ src\query\address
-
- src\query
+
+ src\query\address
-
+
+ src\query\address
+
+
src\query
-
+
+ src\query\archive
+
+
+ src\query\archive
+
+
+ src\query\archive
+
+
+ src\query\archive
+
+
src\query
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
+
+ src\query\consensus
+
src\query
-
+
+ src\query
+
+
src\query
@@ -135,25 +195,37 @@
src\query
-
+
src\query
-
+
src\query
-
- src\query
+
+ src\query\navigate
+
+
+ src\query\navigate
+
+
+ src\query\navigate
-
+
+ src\query\navigate
+
+
+ src\query\navigate
+
+
src\query
-
+
src\query
-
+
src\query
-
+
src\query
@@ -168,13 +240,16 @@
src\tables\archives
+
+ src\tables\archives
+
src\tables\archives
-
+
src\tables\archives
-
+
src\tables\archives
@@ -213,6 +288,9 @@
src
+
+ src
+
diff --git a/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj b/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj
index e7472b71..fd204553 100644
--- a/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj
+++ b/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj
@@ -221,10 +221,10 @@
-
-
-
-
+
+
+
+
diff --git a/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj.filters b/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj.filters
index 15623d74..7783cf66 100644
--- a/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj.filters
+++ b/builds/msvc/vs2022/libbitcoin-database/libbitcoin-database.vcxproj.filters
@@ -34,7 +34,7 @@
{62D7FBEE-4D52-424A-0000-000000000002}
-
+
{62D7FBEE-4D52-424A-0000-000000000003}
@@ -364,17 +364,17 @@
include\bitcoin\database\impl\query
-
- include\bitcoin\database\impl\query\archival
+
+ include\bitcoin\database\impl\query\archive
-
- include\bitcoin\database\impl\query\archival
+
+ include\bitcoin\database\impl\query\archive
-
- include\bitcoin\database\impl\query\archival
+
+ include\bitcoin\database\impl\query\archive
-
- include\bitcoin\database\impl\query\archival
+
+ include\bitcoin\database\impl\query\archive
include\bitcoin\database\impl\query
diff --git a/include/bitcoin/database/impl/query/archival/chain_reader.ipp b/include/bitcoin/database/impl/query/archive/chain_reader.ipp
similarity index 98%
rename from include/bitcoin/database/impl/query/archival/chain_reader.ipp
rename to include/bitcoin/database/impl/query/archive/chain_reader.ipp
index e8be7b35..b2156208 100644
--- a/include/bitcoin/database/impl/query/archival/chain_reader.ipp
+++ b/include/bitcoin/database/impl/query/archive/chain_reader.ipp
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_CHAIN_READER_IPP
-#define LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_CHAIN_READER_IPP
+#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVE_CHAIN_READER_IPP
+#define LIBBITCOIN_DATABASE_QUERY_ARCHIVE_CHAIN_READER_IPP
#include
#include
diff --git a/include/bitcoin/database/impl/query/archival/chain_writer.ipp b/include/bitcoin/database/impl/query/archive/chain_writer.ipp
similarity index 99%
rename from include/bitcoin/database/impl/query/archival/chain_writer.ipp
rename to include/bitcoin/database/impl/query/archive/chain_writer.ipp
index 8da8afcd..95ce1da1 100644
--- a/include/bitcoin/database/impl/query/archival/chain_writer.ipp
+++ b/include/bitcoin/database/impl/query/archive/chain_writer.ipp
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_CHAIN_WRITER_IPP
-#define LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_CHAIN_WRITER_IPP
+#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVE_CHAIN_WRITER_IPP
+#define LIBBITCOIN_DATABASE_QUERY_ARCHIVE_CHAIN_WRITER_IPP
#include
#include
diff --git a/include/bitcoin/database/impl/query/archival/wire_reader.ipp b/include/bitcoin/database/impl/query/archive/wire_reader.ipp
similarity index 97%
rename from include/bitcoin/database/impl/query/archival/wire_reader.ipp
rename to include/bitcoin/database/impl/query/archive/wire_reader.ipp
index 90b60851..5f95ce49 100644
--- a/include/bitcoin/database/impl/query/archival/wire_reader.ipp
+++ b/include/bitcoin/database/impl/query/archive/wire_reader.ipp
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_WIRE_READER_IPP
-#define LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_WIRE_READER_IPP
+#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVE_WIRE_READER_IPP
+#define LIBBITCOIN_DATABASE_QUERY_ARCHIVE_WIRE_READER_IPP
#include
#include
diff --git a/include/bitcoin/database/impl/query/archival/wire_writer.ipp b/include/bitcoin/database/impl/query/archive/wire_writer.ipp
similarity index 90%
rename from include/bitcoin/database/impl/query/archival/wire_writer.ipp
rename to include/bitcoin/database/impl/query/archive/wire_writer.ipp
index eea0105a..98c5c1b1 100644
--- a/include/bitcoin/database/impl/query/archival/wire_writer.ipp
+++ b/include/bitcoin/database/impl/query/archive/wire_writer.ipp
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_WIRE_WRITER_IPP
-#define LIBBITCOIN_DATABASE_QUERY_ARCHIVAL_WIRE_WRITER_IPP
+#ifndef LIBBITCOIN_DATABASE_QUERY_ARCHIVE_WIRE_WRITER_IPP
+#define LIBBITCOIN_DATABASE_QUERY_ARCHIVE_WIRE_WRITER_IPP
#include
diff --git a/include/bitcoin/database/query.hpp b/include/bitcoin/database/query.hpp
index 42721972..107f663f 100644
--- a/include/bitcoin/database/query.hpp
+++ b/include/bitcoin/database/query.hpp
@@ -855,10 +855,10 @@ BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)
#include
#include
-#include
-#include
-#include
-#include
+#include
+#include
+#include
+#include
#include
#include
diff --git a/include/bitcoin/database/types.hpp b/include/bitcoin/database/types.hpp
index 9aeac010..8bcc7c62 100644
--- a/include/bitcoin/database/types.hpp
+++ b/include/bitcoin/database/types.hpp
@@ -24,8 +24,6 @@
#include
#include
#include
-
-// Types pulls in tables etc, query and store both pull in types.
#include
namespace libbitcoin {
@@ -72,17 +70,13 @@ using data_chunk = system::data_chunk;
/// Common system::chain aliases.
/// ---------------------------------------------------------------------------
-using checkpoint = system::chain::checkpoint;
-using outpoint = system::chain::outpoint;
using inpoint = system::chain::point;
+using outpoint = system::chain::outpoint;
+using checkpoint = system::chain::checkpoint;
/// Common carriers.
/// ---------------------------------------------------------------------------
-/// Sorted and deduped.
-using outpoints = std::set;
-using inpoints = std::set;
-
using counts = std::pair;
using sizes = std::pair;
using heights = std_vector;
@@ -96,36 +90,40 @@ using fee_rate_sets = std::vector;
struct span
{
- size_t size() const NOEXCEPT { return end - begin; }
+ inline size_t size() const NOEXCEPT { return end - begin; }
size_t begin;
size_t end;
};
-struct BCD_API history
+struct BCD_API unspent
{
struct less_than
{
- bool operator()(const history& a, const history& b) NOEXCEPT;
+ bool operator()(const unspent& a, const unspent& b) NOEXCEPT;
};
- checkpoint tx{};
- uint64_t fee{};
+ outpoint tx{};
+ size_t height{};
size_t position{};
};
-using histories = std::set;
-struct BCD_API unspent
+struct BCD_API history
{
struct less_than
{
- bool operator()(const unspent& a, const unspent& b) NOEXCEPT;
+ bool operator()(const history& a, const history& b) NOEXCEPT;
};
- outpoint tx{};
- size_t height{};
+ checkpoint tx{};
+ uint64_t fee{};
size_t position{};
};
+
+/// Sorted and deduped.
+using inpoints = std::set;
+using outpoints = std::set;
using unspents = std::set;
+using histories = std::set;
} // namespace database
} // namespace libbitcoin
diff --git a/test/mocks/blocks.cpp b/test/mocks/blocks.cpp
index 7ba6ca7a..4659cd23 100644
--- a/test/mocks/blocks.cpp
+++ b/test/mocks/blocks.cpp
@@ -81,6 +81,13 @@ const block block7{ block7_data, true };
const block block8{ block8_data, true };
const block block9{ block9_data, true };
+system::hash_digest genesis_address() NOEXCEPT
+{
+ static const auto address = genesis.transactions_ptr()->front()->
+ outputs_ptr()->front()->script().hash();
+ return address;
+}
+
bool setup_three_block_store(query_t& query) NOEXCEPT
{
return query.initialize(genesis) &&
diff --git a/test/mocks/blocks.hpp b/test/mocks/blocks.hpp
index 82bc02ce..f802e78f 100644
--- a/test/mocks/blocks.hpp
+++ b/test/mocks/blocks.hpp
@@ -101,6 +101,7 @@ extern const system::chain::block block_spend_internal_2b;
extern const system::chain::block block_missing_prevout_2b;
extern const system::chain::block block_valid_spend_internal_2b;
+system::hash_digest genesis_address() NOEXCEPT;
bool setup_three_block_store(query_t& query) NOEXCEPT;
bool setup_three_block_witness_store(query_t& query) NOEXCEPT;
diff --git a/test/query/address/address_balance.cpp b/test/query/address/address_balance.cpp
new file mode 100644
index 00000000..71325747
--- /dev/null
+++ b/test/query/address/address_balance.cpp
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2011-2026 libbitcoin developers (see AUTHORS)
+ *
+ * This file is part of libbitcoin.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
+
+BOOST_FIXTURE_TEST_SUITE(query_address_tests, test::directory_setup_fixture)
+
+// TODO: get_unconfirmed_balance
+// get_confirmed_balance
+// TODO: get_balance
+
+BOOST_AUTO_TEST_CASE(query_address__get_confirmed_balance__turbo_genesis__expected)
+{
+ settings settings{};
+ settings.path = TEST_DIRECTORY;
+ test::chunk_store store{ settings };
+ test::query_accessor query{ store };
+ BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
+ BOOST_REQUIRE(query.initialize(test::genesis));
+
+ uint64_t out{};
+ std::atomic_bool cancel{};
+ BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, test::genesis_address(), true));
+ BOOST_REQUIRE_EQUAL(out, 5000000000u);
+}
+
+BOOST_AUTO_TEST_CASE(query_address__get_confirmed_balance__genesis__expected)
+{
+ settings settings{};
+ settings.path = TEST_DIRECTORY;
+ test::chunk_store store{ settings };
+ test::query_accessor query{ store };
+ BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
+ BOOST_REQUIRE(query.initialize(test::genesis));
+
+ uint64_t out{};
+ std::atomic_bool cancel{};
+ BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, test::genesis_address()));
+ BOOST_REQUIRE_EQUAL(out, 5000000000u);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/query/address/address_history.cpp b/test/query/address/address_history.cpp
new file mode 100644
index 00000000..66af766d
--- /dev/null
+++ b/test/query/address/address_history.cpp
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011-2026 libbitcoin developers (see AUTHORS)
+ *
+ * This file is part of libbitcoin.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
+
+BOOST_FIXTURE_TEST_SUITE(query_address_tests, test::directory_setup_fixture)
+
+// get_unconfirmed_address
+// get_confirmed_address
+// get_address
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/query/optional.cpp b/test/query/address/address_outpoints.cpp
similarity index 51%
rename from test/query/optional.cpp
rename to test/query/address/address_outpoints.cpp
index b716a8a3..8dedabf5 100644
--- a/test/query/optional.cpp
+++ b/test/query/address/address_outpoints.cpp
@@ -16,41 +16,15 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#include "../test.hpp"
-#include "../mocks/blocks.hpp"
-#include "../mocks/chunk_store.hpp"
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
-BOOST_FIXTURE_TEST_SUITE(query_optional_tests, test::directory_setup_fixture)
-
-system::hash_digest genesis_address()
-{
- static const auto address = test::genesis.transactions_ptr()->front()->
- outputs_ptr()->front()->script().hash();
-
- return address;
-}
-
-// to_address_outputs
-
-BOOST_AUTO_TEST_CASE(query_optional__to_address_outputs__genesis__expected)
-{
- settings settings{};
- settings.path = TEST_DIRECTORY;
- test::chunk_store store{ settings };
- test::query_accessor query{ store };
- BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
- BOOST_REQUIRE(query.initialize(test::genesis));
-
- output_links out{};
- std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.to_address_outputs(cancel, out, genesis_address()));
- BOOST_REQUIRE_EQUAL(out.size(), 1u);
- BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0));
-}
+BOOST_FIXTURE_TEST_SUITE(query_address_tests, test::directory_setup_fixture)
// get_address_outputs
-BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__turbo_genesis__expected)
+BOOST_AUTO_TEST_CASE(query_address__get_address_outputs__turbo_genesis__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -61,12 +35,12 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__turbo_genesis__expecte
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_address_outputs(cancel, out, genesis_address(), true));
+ BOOST_REQUIRE(!query.get_address_outputs(cancel, out, test::genesis_address(), true));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0));
}
-BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__genesis__expected)
+BOOST_AUTO_TEST_CASE(query_address__get_address_outputs__genesis__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -77,12 +51,12 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__genesis__expected)
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_address_outputs(cancel, out, genesis_address()));
+ BOOST_REQUIRE(!query.get_address_outputs(cancel, out, test::genesis_address()));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0));
}
-BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__cancel__canceled_false)
+BOOST_AUTO_TEST_CASE(query_address__get_address_outputs__cancel__canceled_false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -93,13 +67,13 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__cancel__canceled_false
outpoints out{};
std::atomic_bool cancel{ true };
- BOOST_REQUIRE_EQUAL(query.get_address_outputs(cancel, out, genesis_address()), error::canceled);
+ BOOST_REQUIRE_EQUAL(query.get_address_outputs(cancel, out, test::genesis_address()), error::canceled);
BOOST_REQUIRE(out.empty());
}
// get_confirmed_unspent_outputs
-BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__turbo_genesis__expected)
+BOOST_AUTO_TEST_CASE(query_address__get_confirmed_unspent_outputs__turbo_genesis__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -110,12 +84,12 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__turbo_genesi
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, genesis_address(), true));
+ BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, test::genesis_address(), true));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), 0);
}
-BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__genesis__expected)
+BOOST_AUTO_TEST_CASE(query_address__get_confirmed_unspent_outputs__genesis__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -126,14 +100,14 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__genesis__exp
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, genesis_address()));
+ BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, test::genesis_address()));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), 0);
}
// get_minimum_unspent_outputs
-BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__turbo_above__excluded)
+BOOST_AUTO_TEST_CASE(query_address__get_minimum_unspent_outputs__turbo_above__excluded)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -144,11 +118,11 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__turbo_above__e
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address(), 5000000001, true));
+ BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, test::genesis_address(), 5000000001, true));
BOOST_REQUIRE(out.empty());
}
-BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__above__excluded)
+BOOST_AUTO_TEST_CASE(query_address__get_minimum_unspent_outputs__above__excluded)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -159,11 +133,11 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__above__exclude
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address(), 5000000001));
+ BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, test::genesis_address(), 5000000001));
BOOST_REQUIRE(out.empty());
}
-BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__at__included)
+BOOST_AUTO_TEST_CASE(query_address__get_minimum_unspent_outputs__at__included)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -174,12 +148,12 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__at__included)
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address(), 5000000000));
+ BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, test::genesis_address(), 5000000000));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), 0);
}
-BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__below__included)
+BOOST_AUTO_TEST_CASE(query_address__get_minimum_unspent_outputs__below__included)
{
settings settings{};
settings.path = TEST_DIRECTORY;
@@ -190,74 +164,12 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__below__include
outpoints out{};
std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address(), 0));
+ BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, test::genesis_address(), 0));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), 0);
- BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address(), 4999999999));
+ BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, test::genesis_address(), 4999999999));
BOOST_REQUIRE_EQUAL(out.size(), 1u);
////BOOST_REQUIRE_EQUAL(out.front(), 0);
}
-// get_confirmed_balance
-
-BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_balance__turbo_genesis__expected)
-{
- settings settings{};
- settings.path = TEST_DIRECTORY;
- test::chunk_store store{ settings };
- test::query_accessor query{ store };
- BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
- BOOST_REQUIRE(query.initialize(test::genesis));
-
- uint64_t out{};
- std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, genesis_address(), true));
- BOOST_REQUIRE_EQUAL(out, 5000000000u);
-}
-
-BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_balance__genesis__expected)
-{
- settings settings{};
- settings.path = TEST_DIRECTORY;
- test::chunk_store store{ settings };
- test::query_accessor query{ store };
- BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
- BOOST_REQUIRE(query.initialize(test::genesis));
-
- uint64_t out{};
- std::atomic_bool cancel{};
- BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, genesis_address()));
- BOOST_REQUIRE_EQUAL(out, 5000000000u);
-}
-
-////BOOST_AUTO_TEST_CASE(query_optional__set_filter__get_filter_and_head__expected)
-////{
-//// const auto& filter_head0 = system::null_hash;
-//// const auto filter0 = system::base16_chunk("0102030405060708090a0b0c0d0e0f");
-//// const auto& filter_head1 = system::one_hash;
-//// const auto filter1 = system::base16_chunk("102030405060708090a0b0c0d0e0f0102030405060708090a0b0c0d0e0f0");
-////
-//// settings settings{};
-//// settings.path = TEST_DIRECTORY;
-//// test::chunk_store store{ settings };
-//// test::query_accessor query{ store };
-//// BOOST_REQUIRE_EQUAL(store.create(test::events_handler), error::success);
-//// BOOST_REQUIRE(query.initialize(test::genesis));
-//// BOOST_REQUIRE(query.set(test::block1a, context{}, false, false));
-//// BOOST_REQUIRE(query.set_filter(0, filter_head0, filter0));
-//// BOOST_REQUIRE(query.set_filter(1, filter_head1, filter1));
-////
-//// hash_digest head{};
-//// BOOST_REQUIRE(query.get_filter_head(head, 0));
-//// BOOST_REQUIRE_EQUAL(head, filter_head0);
-//// BOOST_REQUIRE(query.get_filter_head(head, 1));
-//// BOOST_REQUIRE_EQUAL(head, filter_head1);
-////
-//// system::data_chunk out{};
-//// BOOST_REQUIRE(query.get_filter(out, 0));
-//// BOOST_REQUIRE_EQUAL(out, filter0);
-//// BOOST_REQUIRE(query.get_filter(out, 1));
-//// BOOST_REQUIRE_EQUAL(out, filter1);
-////}
-
BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/query/address/address_unspent.cpp b/test/query/address/address_unspent.cpp
new file mode 100644
index 00000000..0482c55d
--- /dev/null
+++ b/test/query/address/address_unspent.cpp
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2011-2026 libbitcoin developers (see AUTHORS)
+ *
+ * This file is part of libbitcoin.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
+
+BOOST_FIXTURE_TEST_SUITE(query_address_tests, test::directory_setup_fixture)
+
+// get_unconfirmed_unspent
+// get_confirmed_unspent
+// get_unspent
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/query/objects.cpp b/test/query/amounts.cpp
similarity index 83%
rename from test/query/objects.cpp
rename to test/query/amounts.cpp
index 086ed58f..68b3c51f 100644
--- a/test/query/objects.cpp
+++ b/test/query/amounts.cpp
@@ -20,13 +20,6 @@
#include "../mocks/blocks.hpp"
#include "../mocks/chunk_store.hpp"
-BOOST_FIXTURE_TEST_SUITE(query_objects_tests, test::directory_setup_fixture)
-
-////const auto events_handler = [](auto, auto) {};
-
-BOOST_AUTO_TEST_CASE(query_objects_test)
-{
- BOOST_REQUIRE(true);
-}
+BOOST_FIXTURE_TEST_SUITE(query_amounts_tests, test::directory_setup_fixture)
BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/query/archive_read.cpp b/test/query/archive/chain_reader.cpp
similarity index 86%
rename from test/query/archive_read.cpp
rename to test/query/archive/chain_reader.cpp
index c296cba8..10b69b70 100644
--- a/test/query/archive_read.cpp
+++ b/test/query/archive/chain_reader.cpp
@@ -16,27 +16,24 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#include "../test.hpp"
-#include "../mocks/blocks.hpp"
-#include "../mocks/chunk_store.hpp"
-
-BOOST_FIXTURE_TEST_SUITE(query_archive_read_tests, test::directory_setup_fixture)
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
// ensure context::flags is same size as chain_context::flags.
-static_assert(is_same_type);
+static_assert(is_same_type < database::context::flag_t::integer, decltype(system::chain::context{}.flags) > );
-// nop event handler.
-const auto events_handler = [](auto, auto) {};
+BOOST_FIXTURE_TEST_SUITE(query_chain_reader_tests, test::directory_setup_fixture)
// is_coinbase
-BOOST_AUTO_TEST_CASE(query_archive_read__is_coinbase__coinbase__true)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_coinbase__coinbase__true)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, context{}, false, false));
BOOST_CHECK(query.set(test::block2, context{}, false, false));
@@ -47,13 +44,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__is_coinbase__coinbase__true)
BOOST_CHECK(query.is_coinbase(3));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__is_coinbase__non_coinbase__false)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_coinbase__non_coinbase__false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{}, false, false));
BOOST_CHECK(query.set(test::block2a, context{}, false, false));
@@ -67,13 +64,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__is_coinbase__non_coinbase__false)
// is_tx_segregated
-BOOST_AUTO_TEST_CASE(query_archive_read__is_tx_segregated__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_tx_segregated__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK_EQUAL(store.create(events_handler), error::success);
+ BOOST_CHECK_EQUAL(store.create(test::events_handler), error::success);
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{}, false, false));
BOOST_CHECK(!query.is_tx_segregated(0));
@@ -83,13 +80,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__is_tx_segregated__always__expected)
// is_block_segregated
-BOOST_AUTO_TEST_CASE(query_archive_read__is_block_segregated__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_block_segregated__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK_EQUAL(store.create(events_handler), error::success);
+ BOOST_CHECK_EQUAL(store.create(test::events_handler), error::success);
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{}, false, false));
BOOST_CHECK(!query.is_block_segregated(0));
@@ -99,25 +96,25 @@ BOOST_AUTO_TEST_CASE(query_archive_read__is_block_segregated__always__expected)
// is_milestone
-BOOST_AUTO_TEST_CASE(query_archive_read__is_milestone__genesis__false)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_milestone__genesis__false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK_EQUAL(store.create(events_handler), error::success);
+ BOOST_CHECK_EQUAL(store.create(test::events_handler), error::success);
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(!query.is_milestone(0));
BOOST_CHECK(!query.is_milestone(1));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__is_milestone__set__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__is_milestone__set__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK_EQUAL(store.create(events_handler), error::success);
+ BOOST_CHECK_EQUAL(store.create(test::events_handler), error::success);
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, context{}, true, false));
BOOST_CHECK(query.set(test::block2, context{}, false, false));;
@@ -126,7 +123,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__is_milestone__set__expected)
BOOST_CHECK(!query.is_milestone(2));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_header__invalid_parent__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_header__invalid_parent__expected)
{
constexpr auto root = system::base16_array("119192939495969798999a9b9c9d9e9f229192939495969798999a9b9c9d9e9f");
constexpr auto block_hash = system::base16_array("85d0b02a16f6d645aa865fad4a8666f5e7bb2b0c4392a5d675496d6c3defa1f2");
@@ -169,7 +166,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_header__invalid_parent__expected)
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
store.header_head() = expected_header_head;
store.header_body() = expected_header_body;
@@ -177,7 +174,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_header__invalid_parent__expected)
BOOST_CHECK(!query.get_header(header_link::terminal));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_header__default__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_header__default__expected)
{
constexpr auto root = system::base16_array("119192939495969798999a9b9c9d9e9f229192939495969798999a9b9c9d9e9f");
constexpr auto block_hash = system::base16_array("85d0b02a16f6d645aa865fad4a8666f5e7bb2b0c4392a5d675496d6c3defa1f2");
@@ -231,7 +228,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_header__default__expected)
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
////store.header_head() = expected_header_head;
////store.header_body() = expected_header_body;
@@ -248,36 +245,36 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_header__default__expected)
BOOST_CHECK_EQUAL(pointer1->hash(), block_hash);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_keys__not_found__empty)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_keys__not_found__empty)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.get_tx_keys(query.to_header(system::null_hash)).empty());
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_header_key__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_header_key__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK_EQUAL(query.get_header_key(0), test::genesis.hash());
BOOST_CHECK_EQUAL(query.get_header_key(1), system::null_hash);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_point_key__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_point_key__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK_EQUAL(query.get_point_hash(0), system::null_hash);
@@ -297,13 +294,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_point_key__always__expected)
////BOOST_CHECK_EQUAL(query.get_point_hash(6), system::null_hash);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_key__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_key__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK_EQUAL(query.get_tx_key(0), test::genesis.transactions_ptr()->front()->hash(false));
BOOST_CHECK_EQUAL(query.get_tx_key(1), system::null_hash);
@@ -314,13 +311,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_key__always__expected)
BOOST_CHECK_EQUAL(query.get_tx_key(3), system::null_hash);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_height1__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_height1__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, context{ 0, 1, 0 }, false, false));
BOOST_CHECK(query.set(test::block2, context{ 0, 2, 0 }, false, false));
@@ -344,13 +341,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_height1__always__expected)
BOOST_CHECK(!query.get_height(out, 6));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_height2__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_height2__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, context{ 0, 1, 0 }, false, false));
BOOST_CHECK(query.set(test::block2, context{ 0, 2, 0 }, false, false));
@@ -374,13 +371,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_height2__always__expected)
BOOST_CHECK(!query.get_height(out, system::one_hash));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_height__not_strong__false)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_height__not_strong__false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::tx4));
@@ -388,13 +385,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_height__not_strong__false)
BOOST_CHECK(!query.get_tx_height(out, 1));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_position__strong__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_position__strong__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{ 0, 1, 0 }, false, false));
BOOST_CHECK(query.set(test::block2a, context{ 0, 2, 0 }, false, false));
@@ -433,13 +430,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_position__strong__expected)
BOOST_CHECK_EQUAL(query.get_position_tx(3, 0), 4u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_position__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_position__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{ 0, 1, 0 }, false, false));
BOOST_CHECK(query.set(test::block2a, context{ 0, 2, 0 }, false, false));
@@ -475,13 +472,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_position__always__expected)
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_position_tx__always__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_position_tx__always__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, context{ 0, 1, 0 }, false, false));
BOOST_CHECK(query.set(test::block2a, context{ 0, 2, 0 }, false, false));
@@ -496,13 +493,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_position_tx__always__expected)
BOOST_CHECK(query.get_position_tx({}, 0).is_terminal());
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_sizes__coinbase__204)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_sizes__coinbase__204)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
size_t light{};
@@ -512,52 +509,52 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_sizes__coinbase__204)
BOOST_CHECK_EQUAL(heavy, 204u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_tx_count__coinbase__1)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_tx_count__coinbase__1)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK_EQUAL(query.get_tx_count(0), 1u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_witness__not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_witness__not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(!query.get_witness(query.to_point({}, {})));
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_input_script__not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_input_script__not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(!query.get_input_script(query.to_point(tx_link{}, {})));
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_input__not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_input__not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(!query.get_input(query.to_point(tx_link{}, {}), false));
BOOST_CHECK(!query.get_input(query.to_tx(system::null_hash), {}, false));
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_input__genesis__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_input__genesis__expected)
{
settings settings{};
settings.header_buckets = 8;
@@ -566,7 +563,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_input__genesis__expected)
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.set(test::genesis, test::context, false, false));
const auto tx = test::genesis.transactions_ptr()->front();
@@ -577,55 +574,55 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_input__genesis__expected)
BOOST_CHECK(input->script() == *query.get_input_script(point));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_inputs__tx_not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_inputs__tx_not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(!query.get_inputs(1, false));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_inputs__found__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_inputs__found__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::tx4));
BOOST_CHECK_EQUAL(query.get_inputs(1, false)->size(), 2u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_output_script__not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_output_script__not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(!query.get_output_script(query.to_output(system::null_hash, 0u)));
BOOST_CHECK(!query.get_output(0));
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_output__not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_output__not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(!query.get_output(query.to_tx(system::null_hash), 0u));
BOOST_CHECK(!query.get_output(query.to_output(system::null_hash, 0u)));
BOOST_CHECK(!query.get_output(0));
- BOOST_CHECK(!store.close(events_handler));
+ BOOST_CHECK(!store.close(test::events_handler));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_output__genesis__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_output__genesis__expected)
{
settings settings{};
settings.header_buckets = 8;
@@ -634,7 +631,7 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_output__genesis__expected)
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.set(test::genesis, test::context, false, false));
const auto tx = test::genesis.transactions_ptr()->front();
@@ -645,48 +642,48 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_output__genesis__expected)
BOOST_CHECK(output->script() == *query.get_output_script(query.to_output(tx->hash(false), 0u)));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_outputs__tx_not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_outputs__tx_not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(!query.get_outputs(1));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_outputs__found__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_outputs__found__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::tx4));
BOOST_CHECK_EQUAL(query.get_outputs(1)->size(), 1u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_transactions__tx_not_found__nullptr)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_transactions__tx_not_found__nullptr)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::tx4));
BOOST_CHECK(!query.get_transactions(3, false));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_transactions__found__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_transactions__found__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, test::context, false, false));
BOOST_CHECK(query.set(test::block2a, test::context, false, false));
@@ -696,13 +693,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_transactions__found__expected)
BOOST_CHECK_EQUAL(query.get_transactions(2, false)->size(), 2u);
}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_spenders__unspent_or_not_found__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_spenders__unspent_or_not_found__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, test::context, false, false));
BOOST_CHECK(query.set(test::block2, test::context, false, false));
@@ -734,13 +731,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_spenders__unspent_or_not_found__exp
////BOOST_CHECK(query.get_spenders_index(3, 1, true)->empty());
}
-////BOOST_AUTO_TEST_CASE(query_archive_read__get_spenders__found_and_spent__expected)
+////BOOST_AUTO_TEST_CASE(query_chain_reader__get_spenders__found_and_spent__expected)
////{
//// settings settings{};
//// settings.path = TEST_DIRECTORY;
//// test::chunk_store store{ settings };
//// test::query_accessor query{ store };
-//// BOOST_CHECK(!store.create(events_handler));
+//// BOOST_CHECK(!store.create(test::events_handler));
//// BOOST_CHECK(query.initialize(test::genesis));
////
//// // Neither of the two block1a outputs spent yet.
@@ -790,13 +787,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__get_spenders__unspent_or_not_found__exp
//// BOOST_CHECK(*query.get_spenders_index(1, 1, true)->back() == *(*block_inputs).back());
////}
-BOOST_AUTO_TEST_CASE(query_archive_read__get_value__genesis__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__get_value__genesis__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
uint64_t value{};
@@ -823,13 +820,13 @@ const auto& clean_(const auto& block_or_tx) NOEXCEPT
}
// First four blocks have only coinbase txs.
-BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__null_prevouts__true)
+BOOST_AUTO_TEST_CASE(query_chain_reader__populate_with_metadata__null_prevouts__true)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, test::context, false, false));
BOOST_CHECK(query.set(test::block2, test::context, false, false));
@@ -846,13 +843,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__null_prevouts__
BOOST_CHECK(query.populate_with_metadata(copy3));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__partial_prevouts__false)
+BOOST_AUTO_TEST_CASE(query_chain_reader__populate_with_metadata__partial_prevouts__false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, test::context, false, false));
BOOST_CHECK(query.set(test::block2a, test::context, false, false));
@@ -880,13 +877,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__partial_prevout
BOOST_CHECK(query.populate_with_metadata(*tx4.inputs_ptr()->at(1)));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__metadata__expected)
+BOOST_AUTO_TEST_CASE(query_chain_reader__populate_with_metadata__metadata__expected)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, test::context, false, false));
BOOST_CHECK(query.set(test::block2a, test::context, false, false));
@@ -932,13 +929,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__populate_with_metadata__metadata__expec
// ----------------------------------------------------------------------------
// First four blocks have only coinbase txs.
-BOOST_AUTO_TEST_CASE(query_archive_read__populate_without_metadata__null_prevouts__true)
+BOOST_AUTO_TEST_CASE(query_chain_reader__populate_without_metadata__null_prevouts__true)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1, test::context, false, false));
BOOST_CHECK(query.set(test::block2, test::context, false, false));
@@ -949,13 +946,13 @@ BOOST_AUTO_TEST_CASE(query_archive_read__populate_without_metadata__null_prevout
BOOST_CHECK(query.populate_without_metadata(test::block3));
}
-BOOST_AUTO_TEST_CASE(query_archive_read__populate_without_metadata__partial_prevouts__false)
+BOOST_AUTO_TEST_CASE(query_chain_reader__populate_without_metadata__partial_prevouts__false)
{
settings settings{};
settings.path = TEST_DIRECTORY;
test::chunk_store store{ settings };
test::query_accessor query{ store };
- BOOST_CHECK(!store.create(events_handler));
+ BOOST_CHECK(!store.create(test::events_handler));
BOOST_CHECK(query.initialize(test::genesis));
BOOST_CHECK(query.set(test::block1a, test::context, false, false));
BOOST_CHECK(query.set(test::block2a, test::context, false, false));
diff --git a/test/query/archive_write.cpp b/test/query/archive/chain_writer.cpp
similarity index 90%
rename from test/query/archive_write.cpp
rename to test/query/archive/chain_writer.cpp
index 8c71c95f..11273b5b 100644
--- a/test/query/archive_write.cpp
+++ b/test/query/archive/chain_writer.cpp
@@ -16,20 +16,17 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-#include "../test.hpp"
-#include "../mocks/blocks.hpp"
-#include "../mocks/chunk_store.hpp"
-
-BOOST_FIXTURE_TEST_SUITE(query_archive_write_tests, test::directory_setup_fixture)
+#include "../../test.hpp"
+#include "../../mocks/blocks.hpp"
+#include "../../mocks/chunk_store.hpp"
// ensure context::flags is same size as chain_context::flags.
-static_assert(is_same_type);
+static_assert(is_same_type < database::context::flag_t::integer, decltype(system::chain::context{}.flags) > );
-// nop event handler.
-const auto events_handler = [](auto, auto) {};
+BOOST_FIXTURE_TEST_SUITE(query_chain_writer_tests, test::directory_setup_fixture)
// slow test (mmap)
-BOOST_AUTO_TEST_CASE(query_archive_write__set_header__mmap_get_header__expected)
+BOOST_AUTO_TEST_CASE(query_chain_writer__set_header__mmap_get_header__expected)
{
constexpr auto milestone = false;
constexpr auto parent = system::null_hash;
@@ -50,7 +47,7 @@ BOOST_AUTO_TEST_CASE(query_archive_write__set_header__mmap_get_header__expected)
settings.path = TEST_DIRECTORY;
store