mirror of https://github.com/aria2/aria2
				
				
				
			
		
			
				
	
	
		
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
#include "ServerStatMan.h"
 | 
						|
 | 
						|
#include <iostream>
 | 
						|
#include <sstream>
 | 
						|
 | 
						|
#include <cppunit/extensions/HelperMacros.h>
 | 
						|
 | 
						|
#include "ServerStat.h"
 | 
						|
#include "Exception.h"
 | 
						|
#include "util.h"
 | 
						|
 | 
						|
namespace aria2 {
 | 
						|
 | 
						|
class ServerStatManTest:public CppUnit::TestFixture {
 | 
						|
 | 
						|
  CPPUNIT_TEST_SUITE(ServerStatManTest);
 | 
						|
  CPPUNIT_TEST(testAddAndFind);
 | 
						|
  CPPUNIT_TEST(testSave);
 | 
						|
  CPPUNIT_TEST(testLoad);
 | 
						|
  CPPUNIT_TEST(testRemoveStaleServerStat);
 | 
						|
  CPPUNIT_TEST_SUITE_END();
 | 
						|
public:
 | 
						|
  void setUp() {}
 | 
						|
 | 
						|
  void tearDown() {}
 | 
						|
 | 
						|
  void testAddAndFind();
 | 
						|
  void testSave();
 | 
						|
  void testLoad();
 | 
						|
  void testRemoveStaleServerStat();
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
CPPUNIT_TEST_SUITE_REGISTRATION(ServerStatManTest);
 | 
						|
 | 
						|
void ServerStatManTest::testAddAndFind()
 | 
						|
{
 | 
						|
  SharedHandle<ServerStat> localhost_http(new ServerStat("localhost", "http"));
 | 
						|
  SharedHandle<ServerStat> localhost_ftp(new ServerStat("localhost", "ftp"));
 | 
						|
  SharedHandle<ServerStat> mirror(new ServerStat("mirror", "http"));
 | 
						|
 | 
						|
  ServerStatMan ssm;
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_http));
 | 
						|
  CPPUNIT_ASSERT(!ssm.add(localhost_http));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_ftp));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(mirror));
 | 
						|
 | 
						|
  {
 | 
						|
    SharedHandle<ServerStat> r = ssm.find("localhost", "http");
 | 
						|
    CPPUNIT_ASSERT(r);
 | 
						|
    CPPUNIT_ASSERT_EQUAL(std::string("localhost"), r->getHostname());
 | 
						|
    CPPUNIT_ASSERT_EQUAL(std::string("http"), r->getProtocol());
 | 
						|
  }
 | 
						|
  {
 | 
						|
    SharedHandle<ServerStat> r = ssm.find("mirror", "ftp");
 | 
						|
    CPPUNIT_ASSERT(!r);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void ServerStatManTest::testSave()
 | 
						|
{
 | 
						|
  SharedHandle<ServerStat> localhost_http(new ServerStat("localhost", "http"));
 | 
						|
  localhost_http->setDownloadSpeed(25000);
 | 
						|
  localhost_http->setSingleConnectionAvgSpeed(100);
 | 
						|
  localhost_http->setMultiConnectionAvgSpeed(101);
 | 
						|
  localhost_http->setCounter(5);
 | 
						|
  localhost_http->setLastUpdated(Time(1210000000));
 | 
						|
  SharedHandle<ServerStat> localhost_ftp(new ServerStat("localhost", "ftp"));
 | 
						|
  localhost_ftp->setDownloadSpeed(30000);
 | 
						|
  localhost_ftp->setLastUpdated(Time(1210000001));
 | 
						|
  SharedHandle<ServerStat> mirror(new ServerStat("mirror", "http"));
 | 
						|
  mirror->setDownloadSpeed(0);
 | 
						|
  mirror->setStatus(ServerStat::ERROR);
 | 
						|
  mirror->setLastUpdated(Time(1210000002));
 | 
						|
 | 
						|
  ServerStatMan ssm;
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_http));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_ftp));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(mirror));
 | 
						|
 | 
						|
  std::stringstream ss;
 | 
						|
  CPPUNIT_ASSERT(ssm.save(ss));
 | 
						|
  std::string out = ss.str();
 | 
						|
  CPPUNIT_ASSERT_EQUAL
 | 
						|
    (std::string
 | 
						|
     ("host=localhost, protocol=ftp,"
 | 
						|
      " dl_speed=30000,"
 | 
						|
      " sc_avg_speed=0,"
 | 
						|
      " mc_avg_speed=0,"
 | 
						|
      " last_updated=1210000001,"
 | 
						|
      " counter=0,"
 | 
						|
      " status=OK\n"
 | 
						|
 | 
						|
      "host=localhost, protocol=http,"
 | 
						|
      " dl_speed=25000,"
 | 
						|
      " sc_avg_speed=100,"
 | 
						|
      " mc_avg_speed=101,"
 | 
						|
      " last_updated=1210000000,"
 | 
						|
      " counter=5,"
 | 
						|
      " status=OK\n"
 | 
						|
 | 
						|
      "host=mirror, protocol=http,"
 | 
						|
      " dl_speed=0,"
 | 
						|
      " sc_avg_speed=0,"
 | 
						|
      " mc_avg_speed=0,"
 | 
						|
      " last_updated=1210000002,"
 | 
						|
      " counter=0,"
 | 
						|
      " status=ERROR\n"),
 | 
						|
     out);                         
 | 
						|
}
 | 
						|
 | 
						|
void ServerStatManTest::testLoad()
 | 
						|
{
 | 
						|
  std::string in =
 | 
						|
    "host=localhost, protocol=ftp, dl_speed=30000, last_updated=1210000001, status=OK\n"
 | 
						|
    "host=localhost, protocol=http, dl_speed=25000, sc_avg_speed=101, mc_avg_speed=102, last_updated=1210000000, counter=6, status=OK\n"
 | 
						|
    "host=mirror, protocol=http, dl_speed=0, last_updated=1210000002, status=ERROR\n";
 | 
						|
 | 
						|
  std::stringstream ss(in);
 | 
						|
 | 
						|
  ServerStatMan ssm;
 | 
						|
  CPPUNIT_ASSERT(ssm.load(ss));
 | 
						|
 | 
						|
  SharedHandle<ServerStat> localhost_http = ssm.find("localhost", "http");
 | 
						|
  CPPUNIT_ASSERT(localhost_http);
 | 
						|
  CPPUNIT_ASSERT_EQUAL(std::string("localhost"), localhost_http->getHostname());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(std::string("http"), localhost_http->getProtocol());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(25000),
 | 
						|
                       localhost_http->getDownloadSpeed());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(101),
 | 
						|
                       localhost_http->getSingleConnectionAvgSpeed());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(102),
 | 
						|
                       localhost_http->getMultiConnectionAvgSpeed());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(6),
 | 
						|
                       localhost_http->getCounter());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(static_cast<time_t>(1210000000),
 | 
						|
                       localhost_http->getLastUpdated().getTime());
 | 
						|
  CPPUNIT_ASSERT_EQUAL(ServerStat::OK, localhost_http->getStatus());
 | 
						|
 | 
						|
  SharedHandle<ServerStat> mirror = ssm.find("mirror", "http");
 | 
						|
  CPPUNIT_ASSERT(mirror);
 | 
						|
  CPPUNIT_ASSERT_EQUAL(ServerStat::ERROR, mirror->getStatus());
 | 
						|
}
 | 
						|
 | 
						|
void ServerStatManTest::testRemoveStaleServerStat()
 | 
						|
{
 | 
						|
  Time now;
 | 
						|
  SharedHandle<ServerStat> localhost_http(new ServerStat("localhost", "http"));
 | 
						|
  localhost_http->setDownloadSpeed(25000);
 | 
						|
  localhost_http->setLastUpdated(now);
 | 
						|
  SharedHandle<ServerStat> localhost_ftp(new ServerStat("localhost", "ftp"));
 | 
						|
  localhost_ftp->setDownloadSpeed(30000);
 | 
						|
  localhost_ftp->setLastUpdated(Time(1210000001));
 | 
						|
  SharedHandle<ServerStat> mirror(new ServerStat("mirror", "http"));
 | 
						|
  mirror->setDownloadSpeed(0);
 | 
						|
  mirror->setStatus(ServerStat::ERROR);
 | 
						|
  mirror->setLastUpdated(Time(1210000002));
 | 
						|
 | 
						|
  ServerStatMan ssm;
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_http));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(localhost_ftp));
 | 
						|
  CPPUNIT_ASSERT(ssm.add(mirror));
 | 
						|
 | 
						|
  ssm.removeStaleServerStat(24*60*60);
 | 
						|
 | 
						|
  CPPUNIT_ASSERT(ssm.find("localhost", "http"));
 | 
						|
  CPPUNIT_ASSERT(!ssm.find("localhost", "ftp"));
 | 
						|
  CPPUNIT_ASSERT(!ssm.find("mirror", "http"));
 | 
						|
}
 | 
						|
 | 
						|
} // namespace aria2
 |