UTMetadataDataExtensionMessageTest.cc 3.3 KB

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