BtExtendedMessageTest.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "BtExtendedMessage.h"
  2. #include "PeerMessageUtil.h"
  3. #include "MockBtContext.h"
  4. #include "MockExtensionMessageFactory.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. using namespace std;
  7. class BtExtendedMessageTest:public CppUnit::TestFixture {
  8. CPPUNIT_TEST_SUITE(BtExtendedMessageTest);
  9. CPPUNIT_TEST(testCreate);
  10. CPPUNIT_TEST(testGetMessage);
  11. CPPUNIT_TEST(testDoReceivedAction);
  12. CPPUNIT_TEST(testToString);
  13. CPPUNIT_TEST_SUITE_END();
  14. private:
  15. public:
  16. void setUp()
  17. {
  18. BtRegistry::unregisterAll();
  19. }
  20. void tearDown()
  21. {
  22. BtRegistry::unregisterAll();
  23. }
  24. void testCreate();
  25. void testGetMessage();
  26. void testDoReceivedAction();
  27. void testToString();
  28. };
  29. CPPUNIT_TEST_SUITE_REGISTRATION(BtExtendedMessageTest);
  30. void BtExtendedMessageTest::testCreate() {
  31. PeerHandle peer = new Peer("192.168.0.1", 6969);
  32. peer->setExtension("charlie", 1);
  33. MockBtContextHandle ctx = new MockBtContext();
  34. unsigned char infohash[20];
  35. memset(infohash, 0, sizeof(infohash));
  36. ctx->setInfoHash(infohash);
  37. MockExtensionMessageFactoryHandle exmsgFactory = new MockExtensionMessageFactory();
  38. BtRegistry::registerPeerObjectCluster(ctx->getInfoHashAsString(), new PeerObjectCluster());
  39. PeerObjectHandle peerObject = new PeerObject();
  40. peerObject->extensionMessageFactory = exmsgFactory;
  41. PEER_OBJECT_CLUSTER(ctx)->registerHandle(peer->getId(), peerObject);
  42. // payload:{4:name3:foo}->11bytes
  43. string payload = "4:name3:foo";
  44. char msg[17];// 6+11bytes
  45. PeerMessageUtil::createPeerMessageString((unsigned char*)msg, sizeof(msg), 13, 20);
  46. msg[5] = 1; // Set dummy extended message ID 1
  47. memcpy(msg+6, payload.c_str(), payload.size());
  48. BtExtendedMessageHandle pm = BtExtendedMessage::create(ctx,
  49. peer,
  50. &msg[4], 13);
  51. CPPUNIT_ASSERT_EQUAL((int8_t)20, pm->getId());
  52. // case: payload size is wrong
  53. try {
  54. char msg[5];
  55. PeerMessageUtil::createPeerMessageString((unsigned char*)msg, sizeof(msg), 1, 20);
  56. BtExtendedMessage::create(ctx, peer, &msg[4], 1);
  57. CPPUNIT_FAIL("exception must be thrown.");
  58. } catch(Exception* e) {
  59. cerr << *e << endl;
  60. delete e;
  61. }
  62. // case: id is wrong
  63. try {
  64. char msg[6];
  65. PeerMessageUtil::createPeerMessageString((unsigned char*)msg, sizeof(msg), 2, 21);
  66. BtExtendedMessage::create(ctx, peer, &msg[4], 2);
  67. CPPUNIT_FAIL("exception must be thrown.");
  68. } catch(Exception* e) {
  69. cerr << *e << endl;
  70. delete e;
  71. }
  72. }
  73. void BtExtendedMessageTest::testGetMessage() {
  74. string payload = "4:name3:foo";
  75. uint8_t extendedMessageID = 1;
  76. MockExtensionMessageHandle exmsg =
  77. new MockExtensionMessage("charlie", extendedMessageID,
  78. payload.c_str(),
  79. payload.size());
  80. BtExtendedMessage msg(exmsg);
  81. char data[17];
  82. PeerMessageUtil::createPeerMessageString((unsigned char*)data, sizeof(data), 13, 20);
  83. *(data+5) = extendedMessageID;
  84. memcpy(data+6, payload.c_str(), payload.size());
  85. CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 17) == 0);
  86. }
  87. void BtExtendedMessageTest::testDoReceivedAction() {
  88. MockExtensionMessageHandle exmsg =
  89. new MockExtensionMessage("charlie", 1, "", 0);
  90. BtExtendedMessage msg(exmsg);
  91. msg.doReceivedAction();
  92. CPPUNIT_ASSERT(exmsg->_doReceivedActionCalled);
  93. }
  94. void BtExtendedMessageTest::testToString() {
  95. string payload = "4:name3:foo";
  96. uint8_t extendedMessageID = 1;
  97. MockExtensionMessageHandle exmsg =
  98. new MockExtensionMessage("charlie", extendedMessageID,
  99. payload.c_str(),
  100. payload.size());
  101. BtExtendedMessage msg(exmsg);
  102. CPPUNIT_ASSERT_EQUAL(string("extended charlie"), msg.toString());
  103. }