ServerStatURISelectorTest.cc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "ServerStatURISelector.h"
  2. #include "Exception.h"
  3. #include "Util.h"
  4. #include "array_fun.h"
  5. #include "ServerStatMan.h"
  6. #include "ServerStat.h"
  7. #include <iostream>
  8. #include <cppunit/extensions/HelperMacros.h>
  9. namespace aria2 {
  10. class ServerStatURISelectorTest:public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(ServerStatURISelectorTest);
  12. CPPUNIT_TEST(testSelect_withoutServerStat);
  13. CPPUNIT_TEST(testSelect);
  14. CPPUNIT_TEST(testSelect_skipErrorHost);
  15. CPPUNIT_TEST_SUITE_END();
  16. private:
  17. std::deque<std::string> uris;
  18. SharedHandle<ServerStatMan> ssm;
  19. SharedHandle<ServerStatURISelector> sel;
  20. public:
  21. void setUp()
  22. {
  23. static const char* urisSrc[] = {
  24. "http://alpha/file",
  25. "ftp://alpha/file",
  26. "http://bravo/file"
  27. };
  28. uris.assign(&urisSrc[0], &urisSrc[arrayLength(urisSrc)]);
  29. ssm.reset(new ServerStatMan());
  30. sel.reset(new ServerStatURISelector(ssm));
  31. }
  32. void tearDown() {}
  33. void testSelect_withoutServerStat();
  34. void testSelect();
  35. void testSelect_skipErrorHost();
  36. };
  37. CPPUNIT_TEST_SUITE_REGISTRATION(ServerStatURISelectorTest);
  38. void ServerStatURISelectorTest::testSelect_withoutServerStat()
  39. {
  40. // Without ServerStat, selector returns first URI
  41. std::string uri = sel->select(uris);
  42. CPPUNIT_ASSERT_EQUAL(std::string("http://alpha/file"), uri);
  43. CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
  44. }
  45. void ServerStatURISelectorTest::testSelect()
  46. {
  47. SharedHandle<ServerStat> bravo(new ServerStat("bravo", "http"));
  48. bravo->updateDownloadSpeed(100000);
  49. SharedHandle<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  50. alphaFTP->updateDownloadSpeed(80000);
  51. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  52. alphaHTTP->updateDownloadSpeed(180000);
  53. alphaHTTP->setError();
  54. ssm->add(bravo);
  55. ssm->add(alphaFTP);
  56. ssm->add(alphaHTTP);
  57. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), sel->select(uris));
  58. CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
  59. CPPUNIT_ASSERT_EQUAL(std::string("ftp://alpha/file"), sel->select(uris));
  60. CPPUNIT_ASSERT_EQUAL((size_t)1, uris.size());
  61. }
  62. void ServerStatURISelectorTest::testSelect_skipErrorHost()
  63. {
  64. SharedHandle<ServerStat> alphaHTTP(new ServerStat("alpha", "http"));
  65. alphaHTTP->setError();
  66. SharedHandle<ServerStat> alphaFTP(new ServerStat("alpha", "ftp"));
  67. alphaFTP->setError();
  68. ssm->add(alphaHTTP);
  69. ssm->add(alphaFTP);
  70. // See error URIs are removed from URI List.
  71. CPPUNIT_ASSERT_EQUAL(std::string("http://bravo/file"), sel->select(uris));
  72. CPPUNIT_ASSERT_EQUAL((size_t)0, uris.size());
  73. }
  74. } // namespace aria2