FeedbackURISelectorTest.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. SharedHandle<ServerStatMan> ssm;
  20. SharedHandle<FeedbackURISelector> sel;
  21. public:
  22. void setUp()
  23. {
  24. static const char* urisSrc[] = {
  25. "http://alpha/file",
  26. "ftp://alpha/file",
  27. "http://bravo/file"
  28. };
  29. std::vector<std::string> uris;
  30. uris.assign(vbegin(urisSrc), vend(urisSrc));
  31. fileEntry_.setUris(uris);
  32. ssm.reset(new ServerStatMan());
  33. sel.reset(new FeedbackURISelector(ssm));
  34. }
  35. void tearDown() {}
  36. void testSelect_withoutServerStat();
  37. void testSelect();
  38. void testSelect_withUsedHosts();
  39. void testSelect_skipErrorHost();
  40. };
  41. CPPUNIT_TEST_SUITE_REGISTRATION(FeedbackURISelectorTest);
  42. void FeedbackURISelectorTest::testSelect_withoutServerStat()
  43. {
  44. std::vector<std::string> usedHosts;
  45. // Without ServerStat, selector returns first URI
  46. std::string uri = sel->select(&fileEntry_, usedHosts);
  47. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), uri);
  48. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  49. }
  50. void FeedbackURISelectorTest::testSelect()
  51. {
  52. SharedHandle<ServerStat> bravo(new ServerStat("bravo", "http"));
  53. bravo->updateDownloadSpeed(100000);
  54. SharedHandle<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  55. alphaFTP->updateDownloadSpeed(80000);
  56. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  57. alphaHTTP->updateDownloadSpeed(180000);
  58. alphaHTTP->setError();
  59. std::vector<std::string> usedHosts;
  60. ssm->add(bravo);
  61. ssm->add(alphaFTP);
  62. ssm->add(alphaHTTP);
  63. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  64. sel->select(&fileEntry_, usedHosts));
  65. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  66. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
  67. sel->select(&fileEntry_, usedHosts));
  68. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry_.getRemainingUris().size());
  69. }
  70. void FeedbackURISelectorTest::testSelect_withUsedHosts()
  71. {
  72. SharedHandle<ServerStat> bravo(new ServerStat("bravo", "http"));
  73. bravo->updateDownloadSpeed(100000);
  74. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  75. alphaHTTP->updateDownloadSpeed(180000);
  76. alphaHTTP->setError();
  77. std::vector<std::string> usedHosts;
  78. usedHosts.push_back("bravo");
  79. ssm->add(bravo);
  80. ssm->add(alphaHTTP);
  81. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
  82. sel->select(&fileEntry_, usedHosts));
  83. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  84. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  85. sel->select(&fileEntry_, usedHosts));
  86. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry_.getRemainingUris().size());
  87. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"),
  88. sel->select(&fileEntry_, usedHosts));
  89. CPPUNIT_ASSERT_EQUAL((size_t)0, fileEntry_.getRemainingUris().size());
  90. }
  91. void FeedbackURISelectorTest::testSelect_skipErrorHost()
  92. {
  93. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  94. alphaHTTP->setError();
  95. SharedHandle<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  96. alphaFTP->setError();
  97. std::vector<std::string> usedHosts;
  98. ssm->add(alphaHTTP);
  99. ssm->add(alphaFTP);
  100. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  101. sel->select(&fileEntry_, usedHosts));
  102. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  103. }
  104. } // namespace aria2