test_main.cpp raw

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