BtChokeMessageTest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "BtChokeMessage.h"
  2. #include "PeerMessageUtil.h"
  3. #include "MockBtMessageDispatcher.h"
  4. #include "MockBtRequestFactory.h"
  5. #include "MockBtContext.h"
  6. #include <cppunit/extensions/HelperMacros.h>
  7. using namespace std;
  8. class BtChokeMessageTest:public CppUnit::TestFixture {
  9. CPPUNIT_TEST_SUITE(BtChokeMessageTest);
  10. CPPUNIT_TEST(testCreate);
  11. CPPUNIT_TEST(testGetMessage);
  12. CPPUNIT_TEST(testDoReceivedAction);
  13. CPPUNIT_TEST(testOnSendComplete);
  14. CPPUNIT_TEST(testToString);
  15. CPPUNIT_TEST_SUITE_END();
  16. private:
  17. public:
  18. BtChokeMessageTest():peer(0), btContext(0) {}
  19. PeerHandle peer;
  20. MockBtContextHandle btContext;
  21. void setUp() {
  22. BtRegistry::clear();
  23. peer = new Peer("host", 6969, 16*1024, 256*1024);
  24. btContext = new MockBtContext();
  25. btContext->setInfoHash((const unsigned char*)"12345678901234567890");
  26. BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
  27. new PeerObjectCluster());
  28. PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());
  29. }
  30. void testCreate();
  31. void testGetMessage();
  32. void testDoReceivedAction();
  33. void testOnSendComplete();
  34. void testToString();
  35. class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
  36. public:
  37. bool doChokedActionCalled;
  38. bool doChokingActionCalled;
  39. public:
  40. MockBtMessageDispatcher2():doChokedActionCalled(false), doChokingActionCalled(false) {}
  41. virtual void doChokedAction() {
  42. doChokedActionCalled = true;
  43. }
  44. virtual void doChokingAction() {
  45. doChokingActionCalled = true;
  46. }
  47. };
  48. typedef SharedHandle<MockBtMessageDispatcher2> MockBtMessageDispatcher2Handle;
  49. class MockBtRequestFactory2 : public MockBtRequestFactory {
  50. public:
  51. bool doChokedActionCalled;
  52. public:
  53. MockBtRequestFactory2():doChokedActionCalled(false) {}
  54. virtual void doChokedAction() {
  55. doChokedActionCalled = true;
  56. }
  57. };
  58. typedef SharedHandle<MockBtRequestFactory2> MockBtRequestFactory2Handle;
  59. };
  60. CPPUNIT_TEST_SUITE_REGISTRATION(BtChokeMessageTest);
  61. void BtChokeMessageTest::testCreate() {
  62. unsigned char msg[5];
  63. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 1, 0);
  64. BtChokeMessageHandle pm = BtChokeMessage::create(&msg[4], 1);
  65. CPPUNIT_ASSERT_EQUAL((uint8_t)0, pm->getId());
  66. // case: payload size is wrong
  67. try {
  68. unsigned char msg[6];
  69. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 2, 0);
  70. BtChokeMessage::create(&msg[4], 2);
  71. CPPUNIT_FAIL("exception must be threw.");
  72. } catch(...) {
  73. }
  74. // case: id is wrong
  75. try {
  76. unsigned char msg[5];
  77. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 1, 1);
  78. BtChokeMessage::create(&msg[4], 1);
  79. CPPUNIT_FAIL("exception must be threw.");
  80. } catch(...) {
  81. }
  82. }
  83. void BtChokeMessageTest::testGetMessage() {
  84. BtChokeMessage msg;
  85. unsigned char data[5];
  86. PeerMessageUtil::createPeerMessageString(data, sizeof(data), 1, 0);
  87. CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 5) == 0);
  88. }
  89. void BtChokeMessageTest::testDoReceivedAction() {
  90. BtChokeMessage msg;
  91. PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
  92. msg.setPeer(peer);
  93. msg.setBtContext(btContext);
  94. MockBtMessageDispatcher2Handle dispatcher = new MockBtMessageDispatcher2();
  95. msg.setBtMessageDispatcher(dispatcher);
  96. MockBtRequestFactory2Handle requestFactory = new MockBtRequestFactory2();
  97. msg.setBtRequestFactory(requestFactory);
  98. msg.doReceivedAction();
  99. CPPUNIT_ASSERT(dispatcher->doChokedActionCalled);
  100. CPPUNIT_ASSERT(peer->peerChoking);
  101. }
  102. void BtChokeMessageTest::testOnSendComplete() {
  103. BtChokeMessage msg;
  104. PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
  105. msg.setPeer(peer);
  106. msg.setBtContext(btContext);
  107. MockBtMessageDispatcher2Handle dispatcher = new MockBtMessageDispatcher2();
  108. msg.setBtMessageDispatcher(dispatcher);
  109. msg.onSendComplete();
  110. CPPUNIT_ASSERT(dispatcher->doChokingActionCalled);
  111. CPPUNIT_ASSERT(peer->amChoking);
  112. }
  113. void BtChokeMessageTest::testToString() {
  114. BtChokeMessage msg;
  115. CPPUNIT_ASSERT_EQUAL(string("choke"), msg.toString());
  116. }