FeedbackURISelectorTest.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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::pair<size_t, std::string> > usedHosts;
  45. // Without ServerStat and usedHosts, 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::pair<size_t, 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. std::vector<std::pair<size_t, std::string> > usedHosts;
  73. usedHosts.push_back(std::make_pair(1, "bravo"));
  74. usedHosts.push_back(std::make_pair(2, "alpha"));
  75. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  76. sel->select(&fileEntry_, usedHosts));
  77. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  78. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"),
  79. sel->select(&fileEntry_, usedHosts));
  80. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry_.getRemainingUris().size());
  81. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"),
  82. sel->select(&fileEntry_, usedHosts));
  83. CPPUNIT_ASSERT_EQUAL((size_t)0, fileEntry_.getRemainingUris().size());
  84. }
  85. void FeedbackURISelectorTest::testSelect_skipErrorHost()
  86. {
  87. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  88. alphaHTTP->setError();
  89. SharedHandle<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  90. alphaFTP->setError();
  91. std::vector<std::pair<size_t, std::string> > usedHosts;
  92. ssm->add(alphaHTTP);
  93. ssm->add(alphaFTP);
  94. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"),
  95. sel->select(&fileEntry_, usedHosts));
  96. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry_.getRemainingUris().size());
  97. }
  98. } // namespace aria2