mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
refactor: move Boost datetime usage to wallet
This means we don't need datetime in a --disable-wallet build, and it isn't included in the kernel.
This commit is contained in:
parent
f59e91511a
commit
079cf88c0d
9 changed files with 51 additions and 28 deletions
|
@ -174,6 +174,7 @@ BITCOIN_TESTS += \
|
|||
wallet/test/availablecoins_tests.cpp \
|
||||
wallet/test/init_tests.cpp \
|
||||
wallet/test/ismine_tests.cpp \
|
||||
wallet/test/rpc_util_tests.cpp \
|
||||
wallet/test/scriptpubkeyman_tests.cpp \
|
||||
wallet/test/walletload_tests.cpp
|
||||
|
||||
|
@ -186,7 +187,8 @@ BITCOIN_TESTS += wallet/test/db_tests.cpp
|
|||
endif
|
||||
|
||||
FUZZ_WALLET_SRC = \
|
||||
wallet/test/fuzz/coinselection.cpp
|
||||
wallet/test/fuzz/coinselection.cpp \
|
||||
wallet/test/fuzz/parse_iso8601.cpp
|
||||
|
||||
if USE_SQLITE
|
||||
FUZZ_WALLET_SRC += \
|
||||
|
@ -288,7 +290,6 @@ test_fuzz_fuzz_SOURCES = \
|
|||
test/fuzz/node_eviction.cpp \
|
||||
test/fuzz/p2p_transport_serialization.cpp \
|
||||
test/fuzz/parse_hd_keypath.cpp \
|
||||
test/fuzz/parse_iso8601.cpp \
|
||||
test/fuzz/parse_numbers.cpp \
|
||||
test/fuzz/parse_script.cpp \
|
||||
test/fuzz/parse_univalue.cpp \
|
||||
|
|
|
@ -307,8 +307,8 @@ CAmount ConsumeMoney(FuzzedDataProvider& fuzzed_data_provider, const std::option
|
|||
int64_t ConsumeTime(FuzzedDataProvider& fuzzed_data_provider, const std::optional<int64_t>& min, const std::optional<int64_t>& max) noexcept
|
||||
{
|
||||
// Avoid t=0 (1970-01-01T00:00:00Z) since SetMockTime(0) disables mocktime.
|
||||
static const int64_t time_min{ParseISO8601DateTime("2000-01-01T00:00:01Z")};
|
||||
static const int64_t time_max{ParseISO8601DateTime("2100-12-31T23:59:59Z")};
|
||||
static const int64_t time_min{946684801}; // 2000-01-01T00:00:01Z
|
||||
static const int64_t time_max{4133980799}; // 2100-12-31T23:59:59Z
|
||||
return fuzzed_data_provider.ConsumeIntegralInRange<int64_t>(min.value_or(time_min), max.value_or(time_max));
|
||||
}
|
||||
|
||||
|
|
|
@ -282,14 +282,10 @@ BOOST_AUTO_TEST_CASE(util_TrimString)
|
|||
BOOST_CHECK_EQUAL(TrimStringView(std::string("\x05\x04\x03\x02\x01\x00", 6), std::string("\x05\x04\x03\x02\x01\x00", 6)), "");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_FormatParseISO8601DateTime)
|
||||
BOOST_AUTO_TEST_CASE(util_FormatISO8601DateTime)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(FormatISO8601DateTime(1317425777), "2011-09-30T23:36:17Z");
|
||||
BOOST_CHECK_EQUAL(FormatISO8601DateTime(0), "1970-01-01T00:00:00Z");
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("1970-01-01T00:00:00Z"), 0);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("1960-01-01T00:00:00Z"), 0);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("2011-09-30T23:36:17Z"), 1317425777);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_FormatISO8601Date)
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
#include <util/time.h>
|
||||
#include <util/check.h>
|
||||
|
||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
|
@ -142,20 +140,6 @@ std::string FormatISO8601Date(int64_t nTime) {
|
|||
return strprintf("%04i-%02i-%02i", ts.tm_year + 1900, ts.tm_mon + 1, ts.tm_mday);
|
||||
}
|
||||
|
||||
int64_t ParseISO8601DateTime(const std::string& str)
|
||||
{
|
||||
static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0);
|
||||
static const std::locale loc(std::locale::classic(),
|
||||
new boost::posix_time::time_input_facet("%Y-%m-%dT%H:%M:%SZ"));
|
||||
std::istringstream iss(str);
|
||||
iss.imbue(loc);
|
||||
boost::posix_time::ptime ptime(boost::date_time::not_a_date_time);
|
||||
iss >> ptime;
|
||||
if (ptime.is_not_a_date_time() || epoch > ptime)
|
||||
return 0;
|
||||
return (ptime - epoch).total_seconds();
|
||||
}
|
||||
|
||||
struct timeval MillisToTimeval(int64_t nTimeout)
|
||||
{
|
||||
struct timeval timeout;
|
||||
|
|
|
@ -109,7 +109,6 @@ T GetTime()
|
|||
*/
|
||||
std::string FormatISO8601DateTime(int64_t nTime);
|
||||
std::string FormatISO8601Date(int64_t nTime);
|
||||
int64_t ParseISO8601DateTime(const std::string& str);
|
||||
|
||||
/**
|
||||
* Convert milliseconds to a struct timeval for e.g. select.
|
||||
|
|
|
@ -12,10 +12,26 @@
|
|||
|
||||
#include <univalue.h>
|
||||
|
||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||
|
||||
namespace wallet {
|
||||
static const std::string WALLET_ENDPOINT_BASE = "/wallet/";
|
||||
const std::string HELP_REQUIRING_PASSPHRASE{"\nRequires wallet passphrase to be set with walletpassphrase call if wallet is encrypted.\n"};
|
||||
|
||||
int64_t ParseISO8601DateTime(const std::string& str)
|
||||
{
|
||||
static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0);
|
||||
static const std::locale loc(std::locale::classic(),
|
||||
new boost::posix_time::time_input_facet("%Y-%m-%dT%H:%M:%SZ"));
|
||||
std::istringstream iss(str);
|
||||
iss.imbue(loc);
|
||||
boost::posix_time::ptime ptime(boost::date_time::not_a_date_time);
|
||||
iss >> ptime;
|
||||
if (ptime.is_not_a_date_time() || epoch > ptime)
|
||||
return 0;
|
||||
return (ptime - epoch).total_seconds();
|
||||
}
|
||||
|
||||
bool GetAvoidReuseFlag(const CWallet& wallet, const UniValue& param) {
|
||||
bool can_avoid_reuse = wallet.IsWalletFlagSet(WALLET_FLAG_AVOID_REUSE);
|
||||
bool avoid_reuse = param.isNull() ? can_avoid_reuse : param.get_bool();
|
||||
|
|
|
@ -45,6 +45,8 @@ std::string LabelFromValue(const UniValue& value);
|
|||
void PushParentDescriptors(const CWallet& wallet, const CScript& script_pubkey, UniValue& entry);
|
||||
|
||||
void HandleWalletError(const std::shared_ptr<CWallet> wallet, DatabaseStatus& status, bilingual_str& error);
|
||||
|
||||
int64_t ParseISO8601DateTime(const std::string& str);
|
||||
} // namespace wallet
|
||||
|
||||
#endif // BITCOIN_WALLET_RPC_UTIL_H
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <test/fuzz/FuzzedDataProvider.h>
|
||||
#include <test/fuzz/fuzz.h>
|
||||
#include <util/time.h>
|
||||
#include <wallet/rpc/util.h>
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
|
@ -20,7 +21,7 @@ FUZZ_TARGET(parse_iso8601)
|
|||
|
||||
const std::string iso8601_datetime = FormatISO8601DateTime(random_time);
|
||||
(void)FormatISO8601Date(random_time);
|
||||
const int64_t parsed_time_1 = ParseISO8601DateTime(iso8601_datetime);
|
||||
const int64_t parsed_time_1 = wallet::ParseISO8601DateTime(iso8601_datetime);
|
||||
if (random_time >= 0) {
|
||||
assert(parsed_time_1 >= 0);
|
||||
if (iso8601_datetime.length() == 20) {
|
||||
|
@ -28,6 +29,6 @@ FUZZ_TARGET(parse_iso8601)
|
|||
}
|
||||
}
|
||||
|
||||
const int64_t parsed_time_2 = ParseISO8601DateTime(random_string);
|
||||
const int64_t parsed_time_2 = wallet::ParseISO8601DateTime(random_string);
|
||||
assert(parsed_time_2 >= 0);
|
||||
}
|
24
src/wallet/test/rpc_util_tests.cpp
Normal file
24
src/wallet/test/rpc_util_tests.cpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) 2022 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <wallet/rpc/util.h>
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
namespace wallet {
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(wallet_util_tests)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_ParseISO8601DateTime)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("1970-01-01T00:00:00Z"), 0);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("1960-01-01T00:00:00Z"), 0);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("2000-01-01T00:00:01Z"), 946684801);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("2011-09-30T23:36:17Z"), 1317425777);
|
||||
BOOST_CHECK_EQUAL(ParseISO8601DateTime("2100-12-31T23:59:59Z"), 4133980799);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
} // namespace wallet
|
Loading…
Add table
Reference in a new issue