1 #include "DHTMessageTracker.h"
2
3 #include <cppunit/extensions/HelperMacros.h>
4
5 #include "Exception.h"
6 #include "util.h"
7 #include "MockDHTMessage.h"
8 #include "MockDHTMessageCallback.h"
9 #include "DHTNode.h"
10 #include "DHTMessageTrackerEntry.h"
11 #include "DHTRoutingTable.h"
12 #include "MockDHTMessageFactory.h"
13
14 namespace aria2 {
15
16 class DHTMessageTrackerTest : public CppUnit::TestFixture {
17
18 CPPUNIT_TEST_SUITE(DHTMessageTrackerTest);
19 CPPUNIT_TEST(testMessageArrived);
20 CPPUNIT_TEST(testHandleTimeout);
21 CPPUNIT_TEST_SUITE_END();
22
23 public:
setUp()24 void setUp() {}
25
tearDown()26 void tearDown() {}
27
28 void testMessageArrived();
29
30 void testHandleTimeout();
31 };
32
33 CPPUNIT_TEST_SUITE_REGISTRATION(DHTMessageTrackerTest);
34
testMessageArrived()35 void DHTMessageTrackerTest::testMessageArrived()
36 {
37 auto localNode = std::make_shared<DHTNode>();
38 auto routingTable = make_unique<DHTRoutingTable>(localNode);
39 auto factory = make_unique<MockDHTMessageFactory>();
40 factory->setLocalNode(localNode);
41
42 auto r1 = std::make_shared<DHTNode>();
43 r1->setIPAddress("192.168.0.1");
44 r1->setPort(6881);
45 auto r2 = std::make_shared<DHTNode>();
46 r2->setIPAddress("192.168.0.2");
47 r2->setPort(6882);
48 auto r3 = std::make_shared<DHTNode>();
49 r3->setIPAddress("192.168.0.3");
50 r3->setPort(6883);
51
52 auto m1 = make_unique<MockDHTMessage>(localNode, r1);
53 auto m2 = make_unique<MockDHTMessage>(localNode, r2);
54 auto m3 = make_unique<MockDHTMessage>(localNode, r3);
55
56 DHTMessageTracker tracker;
57 tracker.setRoutingTable(routingTable.get());
58 tracker.setMessageFactory(factory.get());
59 tracker.addMessage(m1.get(), DHT_MESSAGE_TIMEOUT);
60 tracker.addMessage(m2.get(), DHT_MESSAGE_TIMEOUT);
61 tracker.addMessage(m3.get(), DHT_MESSAGE_TIMEOUT);
62
63 {
64 Dict resDict;
65 resDict.put("t", m2->getTransactionID());
66
67 auto p =
68 tracker.messageArrived(&resDict, r2->getIPAddress(), r2->getPort());
69 auto& reply = p.first;
70
71 CPPUNIT_ASSERT(reply);
72 CPPUNIT_ASSERT(!tracker.getEntryFor(m2.get()));
73 CPPUNIT_ASSERT_EQUAL((size_t)2, tracker.countEntry());
74 }
75 {
76 Dict resDict;
77 resDict.put("t", m3->getTransactionID());
78
79 auto p =
80 tracker.messageArrived(&resDict, r3->getIPAddress(), r3->getPort());
81 auto& reply = p.first;
82
83 CPPUNIT_ASSERT(reply);
84 CPPUNIT_ASSERT(!tracker.getEntryFor(m3.get()));
85 CPPUNIT_ASSERT_EQUAL((size_t)1, tracker.countEntry());
86 }
87 {
88 Dict resDict;
89 resDict.put("t", m1->getTransactionID());
90
91 auto p = tracker.messageArrived(&resDict, "192.168.1.100", 6889);
92 auto& reply = p.first;
93
94 CPPUNIT_ASSERT(!reply);
95 }
96 }
97
testHandleTimeout()98 void DHTMessageTrackerTest::testHandleTimeout() {}
99
100 } // namespace aria2
101