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