DHTPeerAnnounceEntryTest.cc 4.7 KB

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