DHTPeerAnnounceEntryTest.cc 4.4 KB

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