stats_tests.cpp raw

   1  // Copyright (c) 2016 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 <stats/stats.h>
   6  
   7  #include <test/util/setup_common.h>
   8  #include <util/time.h>
   9  
  10  #include <boost/test/unit_test.hpp>
  11  
  12  BOOST_FIXTURE_TEST_SUITE(stats_tests, BasicTestingSetup)
  13  
  14  BOOST_AUTO_TEST_CASE(stats)
  15  {
  16      CStats::DefaultStats()->setMaxMemoryUsageTarget(CStats::DEFAULT_MAX_STATS_MEMORY);
  17  
  18      uint64_t start = GetTime();
  19      SetMockTime(start);
  20  
  21      CStats::DefaultStats()->addMempoolSample(0, 1, 1);
  22      SetMockTime(start + 1);
  23      CStats::DefaultStats()->addMempoolSample(0, 2, 2); //1second should be to short
  24      SetMockTime(start + 5);
  25      CStats::DefaultStats()->addMempoolSample(3, 4, 3);
  26  
  27      uint64_t queryFromTime = start;
  28      uint64_t queryToTime = start + 3600;
  29      mempoolSamples_t samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  30  
  31      BOOST_CHECK_EQUAL(samples[0].m_time_delta, 0U);
  32      BOOST_CHECK_EQUAL(samples[1].m_time_delta, 5U);
  33      BOOST_CHECK_EQUAL(samples[1].m_tx_count, 3);
  34      BOOST_CHECK_EQUAL(samples[1].m_dyn_mem_usage, 4);
  35  
  36      // check retrieving a subset of the available samples
  37      queryFromTime = start;
  38      queryToTime = start;
  39      samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  40      BOOST_CHECK_EQUAL(samples.size(), 1U);
  41  
  42      // add some samples
  43      for (int i = 0; i < 10000; i++) {
  44          SetMockTime(start + 10 + i * 5);
  45          CStats::DefaultStats()->addMempoolSample(i, i + 1, i + 2);
  46      }
  47  
  48      queryFromTime = start + 3600;
  49      queryToTime = start + 3600;
  50      samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  51      BOOST_CHECK_EQUAL(samples.size(), 1U); //get a single sample
  52  
  53      queryFromTime = start;
  54      queryToTime = start + 3600;
  55      samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  56      BOOST_CHECK(samples.size() >= 3600 / 5);
  57  
  58      // reduce max memory and add 100 samples to ensure it triggers the cleanup
  59      CStats::DefaultStats()->setMaxMemoryUsageTarget(10 * 1024);
  60      for (int i = 10000; i < 10100; i++) {
  61          SetMockTime(start + 10 + i * 5);
  62          CStats::DefaultStats()->addMempoolSample(i, i + 1, i + 2);
  63      }
  64  
  65      queryFromTime = start;
  66      queryToTime = start + 100;
  67      samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  68      BOOST_CHECK_EQUAL(samples.size(), 1U);
  69  
  70      queryFromTime = 0; // no range limits
  71      queryToTime = 0;   // no range  limits
  72      samples = CStats::DefaultStats()->mempoolGetValuesInRange(queryFromTime, queryToTime);
  73      BOOST_CHECK_EQUAL(samples.size() < 1000U, true);
  74  }
  75  
  76  BOOST_AUTO_TEST_SUITE_END()
  77