BtPortMessageTest.cc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "BtPortMessage.h"
  2. #include "PeerMessageUtil.h"
  3. #include "Util.h"
  4. #include "Peer.h"
  5. #include "DHTNode.h"
  6. #include "MockDHTTask.h"
  7. #include "MockDHTTaskFactory.h"
  8. #include "MockDHTTaskQueue.h"
  9. #include <cstring>
  10. #include <cppunit/extensions/HelperMacros.h>
  11. namespace aria2 {
  12. class BtPortMessageTest:public CppUnit::TestFixture {
  13. CPPUNIT_TEST_SUITE(BtPortMessageTest);
  14. CPPUNIT_TEST(testCreate);
  15. CPPUNIT_TEST(testToString);
  16. CPPUNIT_TEST(testGetMessage);
  17. CPPUNIT_TEST(testDoReceivedAction);
  18. CPPUNIT_TEST_SUITE_END();
  19. private:
  20. public:
  21. void setUp() {
  22. }
  23. void testCreate();
  24. void testToString();
  25. void testGetMessage();
  26. void testDoReceivedAction();
  27. class MockDHTTaskFactory2:public MockDHTTaskFactory {
  28. public:
  29. virtual SharedHandle<DHTTask>
  30. createPingTask(const SharedHandle<DHTNode>& remoteNode, size_t numRetry)
  31. {
  32. return new MockDHTTask(remoteNode);
  33. }
  34. };
  35. };
  36. CPPUNIT_TEST_SUITE_REGISTRATION(BtPortMessageTest);
  37. void BtPortMessageTest::testCreate() {
  38. unsigned char msg[7];
  39. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 3, 9);
  40. PeerMessageUtil::setShortIntParam(&msg[5], 12345);
  41. SharedHandle<BtPortMessage> pm = BtPortMessage::create(&msg[4], 3);
  42. CPPUNIT_ASSERT_EQUAL((int8_t)9, pm->getId());
  43. CPPUNIT_ASSERT_EQUAL((uint16_t)12345, pm->getPort());
  44. // case: payload size is wrong
  45. try {
  46. unsigned char msg[8];
  47. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 4, 9);
  48. BtPortMessage::create(&msg[4], 4);
  49. CPPUNIT_FAIL("exception must be thrown.");
  50. } catch(...) {
  51. }
  52. // case: id is wrong
  53. try {
  54. unsigned char msg[7];
  55. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 3, 10);
  56. BtPortMessage::create(&msg[4], 3);
  57. CPPUNIT_FAIL("exception must be thrown.");
  58. } catch(...) {
  59. }
  60. }
  61. void BtPortMessageTest::testToString() {
  62. BtPortMessage msg(1);
  63. CPPUNIT_ASSERT_EQUAL(std::string("port port=1"), msg.toString());
  64. }
  65. void BtPortMessageTest::testGetMessage() {
  66. BtPortMessage msg(6881);
  67. unsigned char data[7];
  68. PeerMessageUtil::createPeerMessageString(data, sizeof(data), 3, 9);
  69. PeerMessageUtil::setShortIntParam(&data[5], 6881);
  70. CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 7) == 0);
  71. }
  72. void BtPortMessageTest::testDoReceivedAction()
  73. {
  74. SharedHandle<Peer> peer = new Peer("192.168.0.1", 6881);
  75. BtPortMessage msg(6881);
  76. MockDHTTaskQueue taskQueue;
  77. MockDHTTaskFactory2 taskFactory;
  78. msg.setTaskQueue(&taskQueue);
  79. msg.setTaskFactory(&taskFactory);
  80. msg.setPeer(peer);
  81. msg.doReceivedAction();
  82. CPPUNIT_ASSERT_EQUAL((size_t)1, taskQueue._immediateTaskQueue.size());
  83. SharedHandle<DHTNode> node = SharedHandle<MockDHTTask>(taskQueue._immediateTaskQueue.front())->_remoteNode;
  84. CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), node->getIPAddress());
  85. CPPUNIT_ASSERT_EQUAL((uint16_t)6881, node->getPort());
  86. }
  87. } // namespace aria2