BtBitfieldMessageTest.cc 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "BtBitfieldMessage.h"
  2. #include "PeerMessageUtil.h"
  3. #include "Util.h"
  4. #include <cppunit/extensions/HelperMacros.h>
  5. using namespace std;
  6. class BtBitfieldMessageTest:public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(BtBitfieldMessageTest);
  8. CPPUNIT_TEST(testCreate);
  9. CPPUNIT_TEST(testGetMessage);
  10. CPPUNIT_TEST(testDoReceivedAction);
  11. CPPUNIT_TEST(testToString);
  12. CPPUNIT_TEST_SUITE_END();
  13. private:
  14. public:
  15. void setUp() {
  16. }
  17. void testCreate();
  18. void testGetMessage();
  19. void testDoReceivedAction();
  20. void testToString();
  21. };
  22. CPPUNIT_TEST_SUITE_REGISTRATION(BtBitfieldMessageTest);
  23. void BtBitfieldMessageTest::testCreate() {
  24. unsigned char msg[5+2];
  25. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 3, 5);
  26. unsigned char bitfield[2];
  27. memset(bitfield, 0xff, sizeof(bitfield));
  28. memcpy(&msg[5], bitfield, sizeof(bitfield));
  29. BtBitfieldMessageHandle pm = BtBitfieldMessage::create(&msg[4], 3);
  30. CPPUNIT_ASSERT_EQUAL((int8_t)5, pm->getId());
  31. CPPUNIT_ASSERT(memcmp(bitfield, pm->getBitfield(), sizeof(bitfield)) == 0);
  32. CPPUNIT_ASSERT_EQUAL((int32_t)2, pm->getBitfieldLength());
  33. // case: payload size is wrong
  34. try {
  35. unsigned char msg[5];
  36. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 1, 5);
  37. BtBitfieldMessage::create(&msg[4], 1);
  38. CPPUNIT_FAIL("exception must be thrown.");
  39. } catch(...) {
  40. }
  41. // case: id is wrong
  42. try {
  43. unsigned char msg[5+2];
  44. PeerMessageUtil::createPeerMessageString(msg, sizeof(msg), 3, 6);
  45. BtBitfieldMessage::create(&msg[4], 3);
  46. CPPUNIT_FAIL("exception must be thrown.");
  47. } catch(...) {
  48. }
  49. }
  50. void BtBitfieldMessageTest::testGetMessage() {
  51. BtBitfieldMessage msg;
  52. unsigned char bitfield[2];
  53. memset(bitfield, 0xff, sizeof(bitfield));
  54. msg.setBitfield(bitfield, sizeof(bitfield));
  55. unsigned char data[5+2];
  56. PeerMessageUtil::createPeerMessageString(data, sizeof(data), 3, 5);
  57. memcpy(&data[5], bitfield, sizeof(bitfield));
  58. CPPUNIT_ASSERT(memcmp(msg.getMessage(), data, 7) == 0);
  59. }
  60. void BtBitfieldMessageTest::testDoReceivedAction() {
  61. PeerHandle peer = new Peer("host1", 6969);
  62. peer->allocateBitfield(16*1024, 16*16*1024);
  63. BtBitfieldMessage msg;
  64. msg.setPeer(peer);
  65. unsigned char bitfield[] = { 0xff, 0xff };
  66. msg.setBitfield(bitfield, sizeof(bitfield));
  67. CPPUNIT_ASSERT_EQUAL(string("0000"), Util::toHex(peer->getBitfield(),
  68. peer->getBitfieldLength()));
  69. msg.doReceivedAction();
  70. CPPUNIT_ASSERT_EQUAL(string("ffff"), Util::toHex(peer->getBitfield(),
  71. peer->getBitfieldLength()));
  72. }
  73. void BtBitfieldMessageTest::testToString() {
  74. BtBitfieldMessage msg;
  75. unsigned char bitfield[] = { 0xff, 0xff };
  76. msg.setBitfield(bitfield, sizeof(bitfield));
  77. CPPUNIT_ASSERT_EQUAL(string("bitfield ffff"), msg.toString());
  78. }