DHTRoutingTableTest.cc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "DHTRoutingTable.h"
  2. #include "Exception.h"
  3. #include "Util.h"
  4. #include "DHTNode.h"
  5. #include "DHTBucket.h"
  6. #include "MockDHTTaskQueue.h"
  7. #include "MockDHTTaskFactory.h"
  8. #include "DHTTask.h"
  9. #include <cstring>
  10. #include <cppunit/extensions/HelperMacros.h>
  11. namespace aria2 {
  12. class DHTRoutingTableTest:public CppUnit::TestFixture {
  13. CPPUNIT_TEST_SUITE(DHTRoutingTableTest);
  14. CPPUNIT_TEST(testAddNode);
  15. CPPUNIT_TEST(testGetClosestKNodes);
  16. CPPUNIT_TEST_SUITE_END();
  17. public:
  18. void setUp() {}
  19. void tearDown() {}
  20. void testAddNode();
  21. void testGetClosestKNodes();
  22. };
  23. CPPUNIT_TEST_SUITE_REGISTRATION(DHTRoutingTableTest);
  24. void DHTRoutingTableTest::testAddNode()
  25. {
  26. DHTRoutingTable table(new DHTNode());
  27. table.setTaskFactory(new MockDHTTaskFactory());
  28. table.setTaskQueue(new MockDHTTaskQueue());
  29. uint32_t count = 0;
  30. for(int i = 0; i < 100; ++i) {
  31. if(table.addNode(new DHTNode())) {
  32. ++count;
  33. }
  34. }
  35. table.showBuckets();
  36. }
  37. static void createID(unsigned char* id, unsigned char firstChar, unsigned char lastChar)
  38. {
  39. memset(id, 0, DHT_ID_LENGTH);
  40. id[0] = firstChar;
  41. id[DHT_ID_LENGTH-1] = lastChar;
  42. }
  43. void DHTRoutingTableTest::testGetClosestKNodes()
  44. {
  45. unsigned char id[DHT_ID_LENGTH];
  46. createID(id, 0x81, 0);
  47. SharedHandle<DHTNode> localNode = new DHTNode(id);
  48. DHTRoutingTable table(localNode);
  49. SharedHandle<DHTNode> nodes1[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  50. SharedHandle<DHTNode> nodes2[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  51. SharedHandle<DHTNode> nodes3[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  52. for(size_t i = 0; i < DHTBucket::K; ++i) {
  53. createID(id, 0xf0, i);
  54. nodes1[i] = new DHTNode(id);
  55. CPPUNIT_ASSERT(table.addNode(nodes1[i]));
  56. }
  57. for(size_t i = 0; i < DHTBucket::K; ++i) {
  58. createID(id, 0x80, i);
  59. nodes2[i] = new DHTNode(id);
  60. CPPUNIT_ASSERT(table.addNode(nodes2[i]));
  61. }
  62. for(size_t i = 0; i < DHTBucket::K; ++i) {
  63. createID(id, 0x70, i);
  64. nodes3[i] = new DHTNode(id);
  65. CPPUNIT_ASSERT(table.addNode(nodes3[i]));
  66. }
  67. {
  68. createID(id, 0x80, 0x10);
  69. std::deque<SharedHandle<DHTNode> > nodes = table.getClosestKNodes(id);
  70. CPPUNIT_ASSERT_EQUAL((size_t)8, nodes.size());
  71. for(size_t i = 0; i < nodes.size(); ++i) {
  72. CPPUNIT_ASSERT(memcmp(nodes2[0]->getID(), nodes[0]->getID(), DHT_ID_LENGTH) == 0);
  73. }
  74. }
  75. }
  76. } // namespace aria2