UTMetadataRequestFactoryTest.cc 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "UTMetadataRequestFactory.h"
  2. #include <vector>
  3. #include <deque>
  4. #include <cppunit/extensions/HelperMacros.h>
  5. #include "MockPieceStorage.h"
  6. #include "DownloadContext.h"
  7. #include "Peer.h"
  8. #include "BtMessage.h"
  9. #include "extension_message_test_helper.h"
  10. #include "BtHandshakeMessage.h"
  11. #include "ExtensionMessage.h"
  12. #include "UTMetadataRequestTracker.h"
  13. namespace aria2 {
  14. class UTMetadataRequestFactoryTest : public CppUnit::TestFixture {
  15. CPPUNIT_TEST_SUITE(UTMetadataRequestFactoryTest);
  16. CPPUNIT_TEST(testCreate);
  17. CPPUNIT_TEST_SUITE_END();
  18. public:
  19. void testCreate();
  20. class MockPieceStorage2 : public MockPieceStorage {
  21. public:
  22. std::deque<size_t> missingIndexes;
  23. virtual std::shared_ptr<Piece>
  24. getMissingPiece(const std::shared_ptr<Peer>& peer,
  25. const std::vector<size_t>& exlucdedIndexes,
  26. cuid_t cuid) CXX11_OVERRIDE
  27. {
  28. if (missingIndexes.empty()) {
  29. return nullptr;
  30. }
  31. else {
  32. size_t index = missingIndexes.front();
  33. missingIndexes.pop_front();
  34. return std::make_shared<Piece>(index, 0);
  35. }
  36. }
  37. };
  38. };
  39. CPPUNIT_TEST_SUITE_REGISTRATION(UTMetadataRequestFactoryTest);
  40. void UTMetadataRequestFactoryTest::testCreate()
  41. {
  42. UTMetadataRequestFactory factory;
  43. DownloadContext dctx{METADATA_PIECE_SIZE, METADATA_PIECE_SIZE * 2};
  44. factory.setDownloadContext(&dctx);
  45. MockPieceStorage2 ps;
  46. ps.missingIndexes.push_back(0);
  47. ps.missingIndexes.push_back(1);
  48. WrapExtBtMessageFactory messageFactory;
  49. factory.setBtMessageFactory(&messageFactory);
  50. auto peer = std::make_shared<Peer>("peer", 6880);
  51. peer->allocateSessionResource(0, 0);
  52. factory.setPeer(peer);
  53. UTMetadataRequestTracker tracker;
  54. factory.setUTMetadataRequestTracker(&tracker);
  55. auto msgs = factory.create(1, &ps);
  56. CPPUNIT_ASSERT_EQUAL((size_t)1, msgs.size());
  57. msgs = factory.create(1, &ps);
  58. CPPUNIT_ASSERT_EQUAL((size_t)1, msgs.size());
  59. msgs = factory.create(1, &ps);
  60. CPPUNIT_ASSERT_EQUAL((size_t)0, msgs.size());
  61. }
  62. } // namespace aria2