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