UTMetadataDataExtensionMessageTest.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "UTMetadataDataExtensionMessage.h"
  2. #include <iostream>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. #include "BtConstants.h"
  5. #include "PieceStorage.h"
  6. #include "DownloadContext.h"
  7. #include "DirectDiskAdaptor.h"
  8. #include "ByteArrayDiskWriter.h"
  9. #include "DownloadContext.h"
  10. #include "MockPieceStorage.h"
  11. #include "UTMetadataRequestTracker.h"
  12. #include "bittorrent_helper.h"
  13. #include "MessageDigest.h"
  14. #include "message_digest_helper.h"
  15. namespace aria2 {
  16. class UTMetadataDataExtensionMessageTest:public CppUnit::TestFixture {
  17. CPPUNIT_TEST_SUITE(UTMetadataDataExtensionMessageTest);
  18. CPPUNIT_TEST(testGetExtensionMessageID);
  19. CPPUNIT_TEST(testGetBencodedData);
  20. CPPUNIT_TEST(testToString);
  21. CPPUNIT_TEST(testDoReceivedAction);
  22. CPPUNIT_TEST_SUITE_END();
  23. public:
  24. void testGetExtensionMessageID();
  25. void testGetBencodedData();
  26. void testToString();
  27. void testDoReceivedAction();
  28. };
  29. CPPUNIT_TEST_SUITE_REGISTRATION(UTMetadataDataExtensionMessageTest);
  30. void UTMetadataDataExtensionMessageTest::testGetExtensionMessageID()
  31. {
  32. UTMetadataDataExtensionMessage msg(1);
  33. CPPUNIT_ASSERT_EQUAL((uint8_t)1, msg.getExtensionMessageID());
  34. }
  35. void UTMetadataDataExtensionMessageTest::testGetBencodedData()
  36. {
  37. std::string data(METADATA_PIECE_SIZE, '0');
  38. UTMetadataDataExtensionMessage msg(1);
  39. msg.setIndex(1);
  40. msg.setTotalSize(data.size());
  41. msg.setData(data);
  42. CPPUNIT_ASSERT_EQUAL
  43. (std::string("d8:msg_typei1e5:piecei1e10:total_sizei16384ee")+data,
  44. msg.getPayload());
  45. }
  46. void UTMetadataDataExtensionMessageTest::testToString()
  47. {
  48. UTMetadataDataExtensionMessage msg(1);
  49. msg.setIndex(100);
  50. CPPUNIT_ASSERT_EQUAL(std::string("ut_metadata data piece=100"),
  51. msg.toString());
  52. }
  53. void UTMetadataDataExtensionMessageTest::testDoReceivedAction()
  54. {
  55. SharedHandle<DirectDiskAdaptor> diskAdaptor(new DirectDiskAdaptor());
  56. SharedHandle<ByteArrayDiskWriter> diskWriter(new ByteArrayDiskWriter());
  57. diskAdaptor->setDiskWriter(diskWriter);
  58. SharedHandle<MockPieceStorage> pieceStorage(new MockPieceStorage());
  59. pieceStorage->setDiskAdaptor(diskAdaptor);
  60. SharedHandle<UTMetadataRequestTracker> tracker
  61. (new UTMetadataRequestTracker());
  62. SharedHandle<DownloadContext> dctx(new DownloadContext());
  63. SharedHandle<TorrentAttribute> attrs(new TorrentAttribute());
  64. std::string piece0 = std::string(METADATA_PIECE_SIZE, '0');
  65. std::string piece1 = std::string(METADATA_PIECE_SIZE, '1');
  66. std::string metadata = piece0+piece1;
  67. unsigned char infoHash[INFO_HASH_LENGTH];
  68. message_digest::digest(infoHash, INFO_HASH_LENGTH,
  69. MessageDigest::sha1(),
  70. metadata.data(), metadata.size());
  71. attrs->infoHash = std::string(&infoHash[0], &infoHash[20]);
  72. dctx->setAttribute(bittorrent::BITTORRENT, attrs);
  73. UTMetadataDataExtensionMessage m(1);
  74. m.setPieceStorage(pieceStorage);
  75. m.setUTMetadataRequestTracker(tracker.get());
  76. m.setDownloadContext(dctx);
  77. m.setIndex(1);
  78. m.setData(piece1);
  79. tracker->add(1);
  80. m.doReceivedAction();
  81. CPPUNIT_ASSERT(!tracker->tracks(1));
  82. pieceStorage->setDownloadFinished(true);
  83. // If piece is not tracked, it is ignored.
  84. m.setIndex(0);
  85. m.setData(piece0);
  86. m.doReceivedAction();
  87. tracker->add(0);
  88. m.doReceivedAction();
  89. CPPUNIT_ASSERT_EQUAL(metadata, diskWriter->getString());
  90. }
  91. } // namespace aria2