forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathcoinjoin_basemanager_tests.cpp
More file actions
74 lines (63 loc) · 2.18 KB
/
coinjoin_basemanager_tests.cpp
File metadata and controls
74 lines (63 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright (c) 2025 The Dash Core developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <test/util/setup_common.h>
#include <coinjoin/coinjoin.h>
#include <cstddef>
#include <uint256.h>
#include <boost/test/unit_test.hpp>
class TestBaseManager : public CCoinJoinBaseManager
{
public:
void PushQueue(const CCoinJoinQueue& q)
{
LOCK(cs_vecqueue);
vecCoinJoinQueue.push_back(q);
}
size_t QueueSize() const
{
LOCK(cs_vecqueue);
return vecCoinJoinQueue.size();
}
void CallCheckQueue() { CheckQueue(); }
};
BOOST_FIXTURE_TEST_SUITE(coinjoin_basemanager_tests, BasicTestingSetup)
static CCoinJoinQueue MakeQueue(int denom, int64_t nTime, bool fReady, const COutPoint& outpoint)
{
CCoinJoinQueue q;
q.nDenom = denom;
q.masternodeOutpoint = outpoint;
q.m_protxHash = uint256::ONE;
q.nTime = nTime;
q.fReady = fReady;
return q;
}
BOOST_AUTO_TEST_CASE(checkqueue_removes_timeouts)
{
TestBaseManager man;
const int denom = CoinJoin::AmountToDenomination(CoinJoin::GetSmallestDenomination());
const int64_t now = GetAdjustedTime();
// Non-expired
man.PushQueue(MakeQueue(denom, now, false, COutPoint(uint256S("11"), 0)));
// Expired (too old)
man.PushQueue(MakeQueue(denom, now - COINJOIN_QUEUE_TIMEOUT - 1, false, COutPoint(uint256S("12"), 0)));
BOOST_CHECK_EQUAL(man.QueueSize(), 2U);
man.CallCheckQueue();
// One should be removed
BOOST_CHECK_EQUAL(man.QueueSize(), 1U);
}
BOOST_AUTO_TEST_CASE(getqueueitem_marks_tried_once)
{
TestBaseManager man;
const int denom = CoinJoin::AmountToDenomination(CoinJoin::GetSmallestDenomination());
const int64_t now = GetAdjustedTime();
CCoinJoinQueue dsq = MakeQueue(denom, now, false, COutPoint(uint256S("21"), 0));
man.PushQueue(dsq);
CCoinJoinQueue picked;
// First retrieval should succeed
BOOST_CHECK(man.GetQueueItemAndTry(picked));
// No other items left to try (picked is marked tried inside)
CCoinJoinQueue picked2;
BOOST_CHECK(!man.GetQueueItemAndTry(picked2));
}
BOOST_AUTO_TEST_SUITE_END()