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