| 64 | } |
| 65 | |
| 66 | void UTMetadataDataExtensionMessageTest::testDoReceivedAction() |
| 67 | { |
| 68 | auto diskAdaptor = std::make_shared<DirectDiskAdaptor>(); |
| 69 | ByteArrayDiskWriter* diskWriter; |
| 70 | { |
| 71 | auto dw = make_unique<ByteArrayDiskWriter>(); |
| 72 | diskWriter = dw.get(); |
| 73 | diskAdaptor->setDiskWriter(std::move(dw)); |
| 74 | } |
| 75 | auto pieceStorage = make_unique<MockPieceStorage>(); |
| 76 | pieceStorage->setDiskAdaptor(diskAdaptor); |
| 77 | auto tracker = make_unique<UTMetadataRequestTracker>(); |
| 78 | auto dctx = make_unique<DownloadContext>(); |
| 79 | |
| 80 | std::string piece0 = std::string(METADATA_PIECE_SIZE, '0'); |
| 81 | std::string piece1 = std::string(METADATA_PIECE_SIZE, '1'); |
| 82 | std::string metadata = piece0 + piece1; |
| 83 | |
| 84 | unsigned char infoHash[INFO_HASH_LENGTH]; |
| 85 | message_digest::digest(infoHash, INFO_HASH_LENGTH, |
| 86 | MessageDigest::sha1().get(), metadata.data(), |
| 87 | metadata.size()); |
| 88 | { |
| 89 | auto attrs = make_unique<TorrentAttribute>(); |
| 90 | attrs->infoHash = std::string(&infoHash[0], &infoHash[20]); |
| 91 | dctx->setAttribute(CTX_ATTR_BT, std::move(attrs)); |
| 92 | } |
| 93 | UTMetadataDataExtensionMessage m(1); |
| 94 | m.setPieceStorage(pieceStorage.get()); |
| 95 | m.setUTMetadataRequestTracker(tracker.get()); |
| 96 | m.setDownloadContext(dctx.get()); |
| 97 | |
| 98 | m.setIndex(1); |
| 99 | m.setData(piece1); |
| 100 | |
| 101 | tracker->add(1); |
| 102 | m.doReceivedAction(); |
| 103 | CPPUNIT_ASSERT(!tracker->tracks(1)); |
| 104 | |
| 105 | pieceStorage->setDownloadFinished(true); |
| 106 | // If piece is not tracked, it is ignored. |
| 107 | m.setIndex(0); |
| 108 | m.setData(piece0); |
| 109 | m.doReceivedAction(); |
| 110 | |
| 111 | tracker->add(0); |
| 112 | m.doReceivedAction(); |
| 113 | |
| 114 | CPPUNIT_ASSERT_EQUAL(metadata, diskWriter->getString()); |
| 115 | } |
| 116 | |
| 117 | } // namespace aria2 |
nothing calls this directly
no test coverage detected