2 // Unit tests for denial-of-service detection/prevention code
4 #include <boost/test/unit_test.hpp>
5 #include <boost/foreach.hpp>
13 BOOST_AUTO_TEST_SUITE(DoS_tests)
15 BOOST_AUTO_TEST_CASE(DoS_banning)
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
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));
33 BOOST_AUTO_TEST_CASE(DoS_banscore)
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";
48 BOOST_AUTO_TEST_CASE(DoS_bantime)
51 int64 nStartTime = GetTime();
52 SetMockTime(nStartTime); // Overrides future calls to GetTime()
54 CAddress addr(0xa0b0c001);
55 CNode dummyNode(INVALID_SOCKET, addr, true);
57 dummyNode.Misbehaving(100);
58 BOOST_CHECK(CNode::IsBanned(addr.ip));
60 SetMockTime(nStartTime+60*60);
61 BOOST_CHECK(CNode::IsBanned(addr.ip));
63 SetMockTime(nStartTime+60*60*24+1);
64 BOOST_CHECK(!CNode::IsBanned(addr.ip));
68 BOOST_AUTO_TEST_SUITE_END()