Bitcoin Core 28.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
optiontests.cpp
Go to the documentation of this file.
1// Copyright (c) 2018-2022 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <config/bitcoin-config.h> // IWYU pragma: keep
6
7#include <common/args.h>
8#include <init.h>
9#include <qt/bitcoin.h>
10#include <qt/guiutil.h>
11#include <qt/test/optiontests.h>
13
14#include <QSettings>
15#include <QTest>
16
17#include <univalue.h>
18
19#include <fstream>
20
25
27{
28 // reset args
31}
32
34{
35 // Set legacy QSettings and verify that they get cleared and migrated to
36 // settings.json
37 QSettings settings;
38 settings.setValue("nDatabaseCache", 600);
39 settings.setValue("nThreadsScriptVerif", 12);
40 settings.setValue("fUseUPnP", false);
41 settings.setValue("fListen", false);
42 settings.setValue("bPrune", true);
43 settings.setValue("nPruneSize", 3);
44 settings.setValue("fUseProxy", true);
45 settings.setValue("addrProxy", "proxy:123");
46 settings.setValue("fUseSeparateProxyTor", true);
47 settings.setValue("addrSeparateProxyTor", "onion:234");
48
49 settings.sync();
50
51 QVERIFY(settings.contains("nDatabaseCache"));
52 QVERIFY(settings.contains("nThreadsScriptVerif"));
53 QVERIFY(settings.contains("fUseUPnP"));
54 QVERIFY(settings.contains("fListen"));
55 QVERIFY(settings.contains("bPrune"));
56 QVERIFY(settings.contains("nPruneSize"));
57 QVERIFY(settings.contains("fUseProxy"));
58 QVERIFY(settings.contains("addrProxy"));
59 QVERIFY(settings.contains("fUseSeparateProxyTor"));
60 QVERIFY(settings.contains("addrSeparateProxyTor"));
61
62 OptionsModel options{m_node};
63 bilingual_str error;
64 QVERIFY(options.Init(error));
65 QVERIFY(!settings.contains("nDatabaseCache"));
66 QVERIFY(!settings.contains("nThreadsScriptVerif"));
67 QVERIFY(!settings.contains("fUseUPnP"));
68 QVERIFY(!settings.contains("fListen"));
69 QVERIFY(!settings.contains("bPrune"));
70 QVERIFY(!settings.contains("nPruneSize"));
71 QVERIFY(!settings.contains("fUseProxy"));
72 QVERIFY(!settings.contains("addrProxy"));
73 QVERIFY(!settings.contains("fUseSeparateProxyTor"));
74 QVERIFY(!settings.contains("addrSeparateProxyTor"));
75
76 std::ifstream file(gArgs.GetDataDirNet() / "settings.json");
77 std::string default_warning = strprintf("This file is automatically generated and updated by %s. Please do not edit this file while the node "
78 "is running, as any changes might be ignored or overwritten.",
80 QCOMPARE(std::string(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()).c_str(), "{\n"
81 " \"_warning_\": \""+ default_warning+"\",\n"
82 " \"dbcache\": \"600\",\n"
83 " \"listen\": false,\n"
84 " \"onion\": \"onion:234\",\n"
85 " \"par\": \"12\",\n"
86 " \"proxy\": \"proxy:123\",\n"
87 " \"prune\": \"2861\"\n"
88 "}\n");
89}
90
92{
93 // Test regression https://github.com/bitcoin/bitcoin/issues/24457. Ensure
94 // that setting integer prune value doesn't cause an exception to be thrown
95 // in the OptionsModel constructor
96 gArgs.LockSettings([&](common::Settings& settings) {
97 settings.forced_settings.erase("prune");
98 settings.rw_settings["prune"] = 3814;
99 });
101 bilingual_str error;
102 QVERIFY(OptionsModel{m_node}.Init(error));
103 gArgs.LockSettings([&](common::Settings& settings) {
104 settings.rw_settings.erase("prune");
105 });
107}
108
110{
111 // Test that the bug https://github.com/bitcoin-core/gui/issues/567 does not resurface.
112 // It was fixed via https://github.com/bitcoin-core/gui/pull/568.
113 // With fListen=false in ~/.config/Bitcoin/Bitcoin-Qt.conf and all else left as default,
114 // bitcoin-qt should set both -listen and -listenonion to false and start successfully.
116 s.forced_settings.erase("listen");
117 s.forced_settings.erase("listenonion");
118 });
119 QVERIFY(!gArgs.IsArgSet("-listen"));
120 QVERIFY(!gArgs.IsArgSet("-listenonion"));
121
122 QSettings settings;
123 settings.setValue("fListen", false);
124
125 bilingual_str error;
126 QVERIFY(OptionsModel{m_node}.Init(error));
127
128 const bool expected{false};
129
130 QVERIFY(gArgs.IsArgSet("-listen"));
131 QCOMPARE(gArgs.GetBoolArg("-listen", !expected), expected);
132
133 QVERIFY(gArgs.IsArgSet("-listenonion"));
134 QCOMPARE(gArgs.GetBoolArg("-listenonion", !expected), expected);
135
137
138 // cleanup
139 settings.remove("fListen");
140 QVERIFY(!settings.contains("fListen"));
142}
143
145{
146 QString filter = QString("Partially Signed Transaction (Binary) (*.psbt)");
147 QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "psbt");
148
149 filter = QString("Image (*.png *.jpg)");
150 QCOMPARE(GUIUtil::ExtractFirstSuffixFromFilter(filter), "png");
151}
ArgsManager gArgs
Definition args.cpp:41
#define PACKAGE_NAME
node::NodeContext m_node
fs::path GetDataDirNet() const
Get data directory path with appended network identifier.
Definition args.h:232
void LockSettings(Fn &&fn)
Access settings with lock held.
Definition args.h:404
void ClearPathCache()
Clear cached directory paths.
Definition args.cpp:332
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
Definition args.cpp:370
bool WriteSettingsFile(std::vector< std::string > *errors=nullptr, bool backup=false) const
Write settings file or backup settings file.
Definition args.cpp:424
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
Definition args.cpp:506
common::Settings m_previous_settings
Definition optiontests.h:29
void extractFilter()
OptionTests(interfaces::Node &node)
void integerGetArgBug()
interfaces::Node & m_node
Definition optiontests.h:28
void parametersInteraction()
void migrateSettings()
Interface from Qt to configuration data structure for Bitcoin client.
bool Init(bilingual_str &error)
Top-level interface for a bitcoin node (bitcoind process).
Definition node.h:70
bool AppInitParameterInteraction(const ArgsManager &args)
Initialization: parameter interaction.
Definition init.cpp:895
QString ExtractFirstSuffixFromFilter(const QString &filter)
Extract first suffix from filter pattern "Description (*.foo)" or "Description (*....
Definition guiutil.cpp:302
Bilingual messages:
Definition translation.h:18
Stored settings.
Definition settings.h:32
std::map< std::string, SettingsValue > forced_settings
Map of setting name to forced setting value.
Definition settings.h:34
std::map< std::string, SettingsValue > rw_settings
Map of setting name to read-write file setting value.
Definition settings.h:38
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...