1 #include "DHTPeerAnnounceEntry.h"
2 
3 #include <cstring>
4 
5 #include <cppunit/extensions/HelperMacros.h>
6 
7 #include "Exception.h"
8 #include "util.h"
9 #include "FileEntry.h"
10 #include "Peer.h"
11 
12 namespace aria2 {
13 
14 class DHTPeerAnnounceEntryTest : public CppUnit::TestFixture {
15 
16   CPPUNIT_TEST_SUITE(DHTPeerAnnounceEntryTest);
17   CPPUNIT_TEST(testRemoveStalePeerAddrEntry);
18   CPPUNIT_TEST(testEmpty);
19   CPPUNIT_TEST(testAddPeerAddrEntry);
20   CPPUNIT_TEST(testGetPeers);
21   CPPUNIT_TEST_SUITE_END();
22 
23 public:
24   void testRemoveStalePeerAddrEntry();
25   void testEmpty();
26   void testAddPeerAddrEntry();
27   void testGetPeers();
28 };
29 
30 CPPUNIT_TEST_SUITE_REGISTRATION(DHTPeerAnnounceEntryTest);
31 
testRemoveStalePeerAddrEntry()32 void DHTPeerAnnounceEntryTest::testRemoveStalePeerAddrEntry()
33 {
34   unsigned char infohash[DHT_ID_LENGTH];
35   memset(infohash, 0xff, DHT_ID_LENGTH);
36   DHTPeerAnnounceEntry entry(infohash);
37 
38   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6881));
39   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.2", 6882, Timer::zero()));
40   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.3", 6883));
41   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.4", 6884, Timer::zero()));
42 
43   entry.removeStalePeerAddrEntry(10_s);
44 
45   CPPUNIT_ASSERT_EQUAL((size_t)2, entry.countPeerAddrEntry());
46 
47   const std::vector<PeerAddrEntry>& peerAddrEntries =
48       entry.getPeerAddrEntries();
49   CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"),
50                        peerAddrEntries[0].getIPAddress());
51   CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.3"),
52                        peerAddrEntries[1].getIPAddress());
53 }
54 
testEmpty()55 void DHTPeerAnnounceEntryTest::testEmpty()
56 {
57   unsigned char infohash[DHT_ID_LENGTH];
58   memset(infohash, 0xff, DHT_ID_LENGTH);
59   {
60     DHTPeerAnnounceEntry entry(infohash);
61     entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6881));
62     CPPUNIT_ASSERT(!entry.empty());
63   }
64   {
65     DHTPeerAnnounceEntry entry(infohash);
66     CPPUNIT_ASSERT(entry.empty());
67   }
68 }
69 
testAddPeerAddrEntry()70 void DHTPeerAnnounceEntryTest::testAddPeerAddrEntry()
71 {
72   unsigned char infohash[DHT_ID_LENGTH];
73   memset(infohash, 0xff, DHT_ID_LENGTH);
74 
75   DHTPeerAnnounceEntry entry(infohash);
76   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6881, Timer::zero()));
77   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6882));
78 
79   CPPUNIT_ASSERT_EQUAL((size_t)2, entry.countPeerAddrEntry());
80 
81   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6881));
82 
83   CPPUNIT_ASSERT_EQUAL((size_t)2, entry.countPeerAddrEntry());
84   CPPUNIT_ASSERT(!entry.getPeerAddrEntries()[0].getLastUpdated().isZero());
85 }
86 
testGetPeers()87 void DHTPeerAnnounceEntryTest::testGetPeers()
88 {
89   unsigned char infohash[DHT_ID_LENGTH];
90   memset(infohash, 0xff, DHT_ID_LENGTH);
91 
92   DHTPeerAnnounceEntry entry(infohash);
93   {
94     std::vector<std::shared_ptr<Peer>> peers;
95     entry.getPeers(peers);
96     CPPUNIT_ASSERT_EQUAL((size_t)0, peers.size());
97   }
98 
99   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.1", 6881, Timer::zero()));
100   entry.addPeerAddrEntry(PeerAddrEntry("192.168.0.2", 6882));
101 
102   {
103     std::vector<std::shared_ptr<Peer>> peers;
104     entry.getPeers(peers);
105     CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size());
106     CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peers[0]->getIPAddress());
107     CPPUNIT_ASSERT_EQUAL((uint16_t)6881, peers[0]->getPort());
108     CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.2"), peers[1]->getIPAddress());
109     CPPUNIT_ASSERT_EQUAL((uint16_t)6882, peers[1]->getPort());
110   }
111 }
112 
113 } // namespace aria2
114