UTMetadataDataExtensionMessageTest.cc 3.3 KB

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