Moved checkpoints out of main, to prep for using them to help prevent DoS attacks
[novacoin.git] / src / test / DoS_tests.cpp
1 //
2 // Unit tests for denial-of-service detection/prevention code
3 //
4 #include <boost/test/unit_test.hpp>
5 #include <boost/foreach.hpp>
6
7 #include "../main.h"
8 #include "../net.h"
9 #include "../util.h"
10
11 using namespace std;
12
13 BOOST_AUTO_TEST_SUITE(DoS_tests)
14
15 BOOST_AUTO_TEST_CASE(DoS_banning)
16 {
17     CNode::ClearBanned();
18     CAddress addr1(0xa0b0c001);
19     CNode dummyNode1(INVALID_SOCKET, addr1, true);
20     dummyNode1.Misbehaving(100); // Should get banned
21     BOOST_CHECK(CNode::IsBanned(addr1.ip));
22     BOOST_CHECK(!CNode::IsBanned(addr1.ip|0x0000ff00)); // Different ip, not banned
23
24     CAddress addr2(0xa0b0c002);
25     CNode dummyNode2(INVALID_SOCKET, addr2, true);
26     dummyNode2.Misbehaving(50);
27     BOOST_CHECK(!CNode::IsBanned(addr2.ip)); // 2 not banned yet...
28     BOOST_CHECK(CNode::IsBanned(addr1.ip));  // ... but 1 still should be
29     dummyNode2.Misbehaving(50);
30     BOOST_CHECK(CNode::IsBanned(addr2.ip));
31 }    
32
33 BOOST_AUTO_TEST_CASE(DoS_banscore)
34 {
35     CNode::ClearBanned();
36     mapArgs["-banscore"] = "111"; // because 11 is my favorite number
37     CAddress addr1(0xa0b0c001);
38     CNode dummyNode1(INVALID_SOCKET, addr1, true);
39     dummyNode1.Misbehaving(100);
40     BOOST_CHECK(!CNode::IsBanned(addr1.ip));
41     dummyNode1.Misbehaving(10);
42     BOOST_CHECK(!CNode::IsBanned(addr1.ip));
43     dummyNode1.Misbehaving(1);
44     BOOST_CHECK(CNode::IsBanned(addr1.ip));
45     mapArgs["-banscore"] = "100";
46 }
47
48 BOOST_AUTO_TEST_CASE(DoS_bantime)
49 {
50     CNode::ClearBanned();
51     int64 nStartTime = GetTime();
52     SetMockTime(nStartTime); // Overrides future calls to GetTime()
53
54     CAddress addr(0xa0b0c001);
55     CNode dummyNode(INVALID_SOCKET, addr, true);
56
57     dummyNode.Misbehaving(100);
58     BOOST_CHECK(CNode::IsBanned(addr.ip));
59
60     SetMockTime(nStartTime+60*60);
61     BOOST_CHECK(CNode::IsBanned(addr.ip));
62
63     SetMockTime(nStartTime+60*60*24+1);
64     BOOST_CHECK(!CNode::IsBanned(addr.ip));
65 }    
66
67 BOOST_AUTO_TEST_SUITE_END()