DHTRoutingTableTest.cc 2.2 KB

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