BtCancelMessageTest.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "BtCancelMessage.h"
  2. #include "PeerMessageUtil.h"
  3. #include "MockBtMessageDispatcher.h"
  4. #include "MockBtContext.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  7. class BtCancelMessageTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(BtCancelMessageTest);
  9. CPPUNIT_TEST(testCreate);
  10. CPPUNIT_TEST(testGetMessage);
  11. CPPUNIT_TEST(testDoReceivedAction);
  12. CPPUNIT_TEST_SUITE_END();
  13. private:
  14. public:
  15. BtCancelMessageTest():peer(0), btContext(0) {}
  16. PeerHandle peer;
  17. MockBtContextHandle btContext;
  18. void setUp() {
  19. BtRegistry::unregisterAll();
  20. peer = new Peer("host", 6969);
  21. btContext = new MockBtContext();
  22. btContext->setInfoHash((const unsigned char*)"12345678901234567890");
  23. BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
  24. new PeerObjectCluster());
  25. PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
  26. }
  27. void testCreate();
  28. void testGetMessage();
  29. void testDoReceivedAction();
  30. class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
  31. public:
  32. int32_t index;
  33. int32_t begin;
  34. int32_t length;
  35. public:
  36. MockBtMessageDispatcher2():index(0),
  37. begin(0),
  38. length(0) {}
  39. virtual void doCancelSendingPieceAction(int32_t index, int32_t begin, int32_t length) {
  40. this->index = index;
  41. this->begin = begin;
  42. this->length = length;
  43. }
  44. };
  45. typedef SharedHandle<MockBtMessageDispatcher2> MockBtMessageDispatcher2Handle;
  46. };
  47. CPPUNIT_TEST_SUITE_REGISTRATION(BtCancelMessageTest);
  48. void BtCancelMessageTest::testCreate() {
  49. unsigned char msg[17];
  50. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 13, 8);
  51. PeerMessageUtil::setIntParam(&msg[5], 12345);
  52. PeerMessageUtil::setIntParam(&msg[9], 256);
  53. PeerMessageUtil::setIntParam(&msg[13], 1024);
  54. BtCancelMessageHandle pm = BtCancelMessage::create(&msg[4], 13);
  55. CPPUNIT_ASSERT_EQUAL((int8_t)8, pm->getId());
  56. CPPUNIT_ASSERT_EQUAL((int32_t)12345, pm->getIndex());
  57. CPPUNIT_ASSERT_EQUAL((int32_t)256, pm->getBegin());
  58. CPPUNIT_ASSERT_EQUAL((int32_t)1024, pm->getLength());
  59. // case: payload size is wrong
  60. try {
  61. unsigned char msg[18];
  62. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 14, 8);
  63. BtCancelMessage::create(&msg[4], 14);
  64. CPPUNIT_FAIL("exception must be thrown.");
  65. } catch(...) {
  66. }
  67. // case: id is wrong
  68. try {
  69. unsigned char msg[17];
  70. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 13, 9);
  71. BtCancelMessage::create(&msg[4], 13);
  72. CPPUNIT_FAIL("exception must be thrown.");
  73. } catch(...) {
  74. }
  75. }
  76. void BtCancelMessageTest::testGetMessage() {
  77. BtCancelMessage msg;
  78. msg.setIndex(12345);
  79. msg.setBegin(256);
  80. msg.setLength(1024);
  81. unsigned char data[17];
  82. PeerMessageUtil::createPeerMessageString(data, sizeof(data), 13, 8);
  83. PeerMessageUtil::setIntParam(&data[5], 12345);
  84. PeerMessageUtil::setIntParam(&data[9], 256);
  85. PeerMessageUtil::setIntParam(&data[13], 1024);
  86. CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 17) == 0);
  87. }
  88. void BtCancelMessageTest::testDoReceivedAction() {
  89. BtCancelMessage msg;
  90. msg.setIndex(1);
  91. msg.setBegin(2*16*1024);
  92. msg.setLength(16*1024);
  93. msg.setBtContext(btContext);
  94. msg.setPeer(peer);
  95. MockBtMessageDispatcher2Handle dispatcher = new MockBtMessageDispatcher2();
  96. msg.setBtMessageDispatcher(dispatcher);
  97. msg.doReceivedAction();
  98. CPPUNIT_ASSERT_EQUAL(msg.getIndex(), dispatcher->index);
  99. CPPUNIT_ASSERT_EQUAL(msg.getBegin(), dispatcher->begin);
  100. CPPUNIT_ASSERT_EQUAL(msg.getLength(), dispatcher->length);
  101. }