BtPortMessageTest.cc 2.7 KB

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