test: Add tests for GetArg methods / settings.json type coercion
Just add tests. No changes to application behavior. Tests will be updated in the next commit changing & improving current behavior. Include a Qt test for GUI startup crash reported by Rspigler in https://github.com/bitcoin/bitcoin/issues/24457 caused by GetArg behavior that happens if settings.json contains an integer value for any of the configuration options which GUI settings can currently clash with (-dbcache, -par, -spendzeroconfchange, -signer, -upnp, -natpmp, -listen, -server, -proxy, -proxy, -onion, -onion, -lang, and -prune).
This commit is contained in:
1 parent
c9ed9927bb
commit
84b0973e35
6 files changed
+179
No files matched your search
@@ -0,0 +1,31 @@
|
||||
// Copyright (c) 2018 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 <qt/bitcoin.h>
|
||||
#include <qt/test/optiontests.h>
|
||||
#include <test/util/setup_common.h>
|
||||
#include <util/system.h>
|
||||
|
||||
#include <QSettings>
|
||||
#include <QTest>
|
||||
|
||||
#include <univalue.h>
|
||||
|
||||
//! Entry point for BitcoinApplication tests.
|
||||
void OptionTests::optionTests()
|
||||
{
|
||||
// Test regression https://github.com/bitcoin/bitcoin/issues/24457. Check
|
||||
// if setting an integer prune value causes an exception to be thrown in
|
||||
// the OptionsModel constructor.
|
||||
gArgs.LockSettings([&](util::Settings& settings) {
|
||||
settings.forced_settings.erase("prune");
|
||||
settings.rw_settings["prune"] = 3814;
|
||||
});
|
||||
gArgs.WriteSettingsFile();
|
||||
QVERIFY_EXCEPTION_THROWN(OptionsModel{}, std::runtime_error);
|
||||
gArgs.LockSettings([&](util::Settings& settings) {
|
||||
settings.rw_settings.erase("prune");
|
||||
});
|
||||
gArgs.WriteSettingsFile();
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright (c) 2019 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_QT_TEST_OPTIONTESTS_H
|
||||
#define BITCOIN_QT_TEST_OPTIONTESTS_H
|
||||
|
||||
#include <qt/optionsmodel.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class OptionTests : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit OptionTests(interfaces::Node& node) : m_node(node) {}
|
||||
|
||||
private Q_SLOTS:
|
||||
void optionTests();
|
||||
|
||||
private:
|
||||
interfaces::Node& m_node;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_QT_TEST_OPTIONTESTS_H
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <interfaces/node.h>
|
||||
#include <qt/bitcoin.h>
|
||||
#include <qt/test/apptests.h>
|
||||
#include <qt/test/optiontests.h>
|
||||
#include <qt/test/rpcnestedtests.h>
|
||||
#include <qt/test/uritests.h>
|
||||
#include <test/util/setup_common.h>
|
||||
@@ -89,6 +90,10 @@ int main(int argc, char* argv[])
|
||||
if (QTest::qExec(&app_tests) != 0) {
|
||||
fInvalid = true;
|
||||
}
|
||||
OptionTests options_tests(app.node());
|
||||
if (QTest::qExec(&options_tests) != 0) {
|
||||
fInvalid = true;
|
||||
}
|
||||
URITests test1;
|
||||
if (QTest::qExec(&test1) != 0) {
|
||||
fInvalid = true;
|
||||
|
||||
Reference in new issue
Block a user