test_main.cpp raw

   1  // Copyright (c) 2009-present 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 <bitcoin-build-config.h> // IWYU pragma: keep
   6  
   7  #include <interfaces/init.h>
   8  #include <interfaces/node.h>
   9  #include <qt/bitcoin.h>
  10  #include <qt/guiconstants.h>
  11  #include <qt/test/apptests.h>
  12  #include <qt/test/optiontests.h>
  13  #include <qt/test/rpcnestedtests.h>
  14  #include <qt/test/uritests.h>
  15  #include <test/util/setup_common.h>
  16  #include <util/chaintype.h>
  17  
  18  #ifdef ENABLE_WALLET
  19  #include <qt/test/addressbooktests.h>
  20  #include <qt/test/wallettests.h>
  21  #endif // ENABLE_WALLET
  22  
  23  #include <QApplication>
  24  #include <QDebug>
  25  #include <QObject>
  26  #include <QSettings>
  27  #include <QTest>
  28  
  29  #include <functional>
  30  
  31  const std::function<std::vector<const char*>()> G_TEST_COMMAND_LINE_ARGUMENTS{};
  32  
  33  const std::function<std::string()> G_TEST_GET_FULL_NAME{};
  34  
  35  // This is all you need to run all the tests
  36  int main(int argc, char* argv[])
  37  {
  38      // Initialize persistent globals with the testing setup state for sanity.
  39      // E.g. -datadir in gArgs is set to a temp directory dummy value (instead
  40      // of defaulting to the default datadir), or globalChainParams is set to
  41      // regtest params.
  42      //
  43      // All tests must use their own testing setup (if needed).
  44      fs::create_directories([] {
  45          BasicTestingSetup dummy{ChainType::REGTEST};
  46          return gArgs.GetDataDirNet() / "blocks";
  47      }());
  48  
  49      std::unique_ptr<interfaces::Init> init = interfaces::MakeGuiInit(argc, argv);
  50      gArgs.ForceSetArg("-listen", "0");
  51      gArgs.ForceSetArg("-listenonion", "0");
  52      gArgs.ForceSetArg("-discover", "0");
  53      gArgs.ForceSetArg("-dnsseed", "0");
  54      gArgs.ForceSetArg("-fixedseeds", "0");
  55      gArgs.ForceSetArg("-natpmp", "0");
  56  
  57      std::string error;
  58      if (!gArgs.ReadConfigFiles(error, true)) qWarning() << error.c_str();
  59  
  60      // Prefer the "minimal" platform for the test instead of the normal default
  61      // platform ("xcb", "windows", or "cocoa") so tests can't unintentionally
  62      // interfere with any background GUIs and don't require extra resources.
  63      #if defined(WIN32)
  64          if (getenv("QT_QPA_PLATFORM") == nullptr) _putenv_s("QT_QPA_PLATFORM", "minimal");
  65      #else
  66          setenv("QT_QPA_PLATFORM", "minimal", 0 /* overwrite */);
  67      #endif
  68  
  69  
  70      QCoreApplication::setOrganizationName(QAPP_ORG_NAME);
  71      QCoreApplication::setApplicationName(QAPP_APP_NAME_DEFAULT "-test");
  72  
  73      int num_test_failures{0};
  74  
  75      {
  76          BitcoinApplication app;
  77          app.createNode(*init);
  78  
  79          AppTests app_tests(app);
  80          num_test_failures += QTest::qExec(&app_tests);
  81  
  82          OptionTests options_tests(app.node());
  83          num_test_failures += QTest::qExec(&options_tests);
  84  
  85          URITests test1;
  86          num_test_failures += QTest::qExec(&test1);
  87  
  88          RPCNestedTests test3(app.node());
  89          num_test_failures += QTest::qExec(&test3);
  90  
  91  #ifdef ENABLE_WALLET
  92          WalletTests test5(app.node());
  93          num_test_failures += QTest::qExec(&test5);
  94  
  95          AddressBookTests test6(app.node());
  96          num_test_failures += QTest::qExec(&test6);
  97  #endif
  98  
  99          if (num_test_failures) {
 100              qWarning("\nFailed tests: %d\n", num_test_failures);
 101          } else {
 102              qDebug("\nAll tests passed.\n");
 103          }
 104      }
 105  
 106      QSettings settings;
 107      settings.clear();
 108  
 109      return num_test_failures;
 110  }
 111