FeedbackURISelectorTest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "FeedbackURISelector.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "Exception.h"
  4. #include "util.h"
  5. #include "array_fun.h"
  6. #include "ServerStatMan.h"
  7. #include "ServerStat.h"
  8. #include "FileEntry.h"
  9. namespace aria2 {
  10. class FeedbackURISelectorTest:public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(FeedbackURISelectorTest);
  12. CPPUNIT_TEST(testSelect_withoutServerStat);
  13. CPPUNIT_TEST(testSelect);
  14. CPPUNIT_TEST(testSelect_withUsedHosts);
  15. CPPUNIT_TEST(testSelect_skipErrorHost);
  16. CPPUNIT_TEST_SUITE_END();
  17. private:
  18. FileEntry fileEntry_;
  19. std::shared_ptr<ServerStatMan> ssm;
  20. std::shared_ptr<FeedbackURISelector> sel;
  21. public:
  22. void setUp()
  23. {
  24. fileEntry_.setUris({
  25. "http://alpha/file",
  26. "ftp://alpha/file",
  27. "http://bravo/file"
  28. });
  29. ssm.reset(new ServerStatMan());
  30. sel.reset(new FeedbackURISelector(ssm));
  31. }
  32. void tearDown() {}
  33. void testSelect_withoutServerStat();
  34. void testSelect();
  35. void testSelect_withUsedHosts();
  36. void testSelect_skipErrorHost();
  37. };
  38. CPPUNIT_TEST_SUITE_REGISTRATION(FeedbackURISelectorTest);
  39. void FeedbackURISelectorTest::testSelect_withoutServerStat()
  40. {
  41. std::vector<std::pair<size_t, std::string> > usedHosts;
  42. // Without ServerStat and usedHosts, selector returns first URI
  43. std::string uri = sel->select(&fileEntry_, usedHosts);
  44. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), uri);
  45. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  46. }
  47. void FeedbackURISelectorTest::testSelect()
  48. {
  49. std::shared_ptr<ServerStat> bravo(new ServerStat("bravo", "http"));
  50. bravo->updateDownloadSpeed(100000);
  51. std::shared_ptr<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  52. alphaFTP->updateDownloadSpeed(80000);
  53. std::shared_ptr<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  54. alphaHTTP->updateDownloadSpeed(180000);
  55. alphaHTTP->setError();
  56. std::vector<std::pair<size_t, std::string> > usedHosts;
  57. ssm->add(bravo);
  58. ssm->add(alphaFTP);
  59. ssm->add(alphaHTTP);
  60. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  61. sel->select(&fileEntry_, usedHosts));
  62. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  63. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
  64. sel->select(&fileEntry_, usedHosts));
  65. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry_.getRemainingUris().size());
  66. }
  67. void FeedbackURISelectorTest::testSelect_withUsedHosts()
  68. {
  69. std::vector<std::pair<size_t, std::string> > usedHosts;
  70. usedHosts.push_back(std::make_pair(1, "bravo"));
  71. usedHosts.push_back(std::make_pair(2, "alpha"));
  72. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  73. sel->select(&fileEntry_, usedHosts));
  74. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  75. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"),
  76. sel->select(&fileEntry_, usedHosts));
  77. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry_.getRemainingUris().size());
  78. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
  79. sel->select(&fileEntry_, usedHosts));
  80. CPPUNIT_ASSERT_EQUAL((size_t)0, fileEntry_.getRemainingUris().size());
  81. }
  82. void FeedbackURISelectorTest::testSelect_skipErrorHost()
  83. {
  84. std::shared_ptr<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  85. alphaHTTP->setError();
  86. std::shared_ptr<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  87. alphaFTP->setError();
  88. std::vector<std::pair<size_t, std::string> > usedHosts;
  89. ssm->add(alphaHTTP);
  90. ssm->add(alphaFTP);
  91. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  92. sel->select(&fileEntry_, usedHosts));
  93. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  94. }
  95. } // namespace aria2