DHTPeerAnnounceEntryTest.cc 4.3 KB

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