BtCancelMessageTest.cc 3.8 KB

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