mirror of https://github.com/aria2/aria2
2008-08-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Save temporary file first and rename to the destination on success. Added test cases. * src/RequestGroupMan.cc * test/RequestGroupManTest.ccpull/1/head
parent
a12be22ecb
commit
ef2478b246
|
@ -1,3 +1,10 @@
|
||||||
|
2008-08-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Save temporary file first and rename to the destination on success.
|
||||||
|
Added test cases.
|
||||||
|
* src/RequestGroupMan.cc
|
||||||
|
* test/RequestGroupManTest.cc
|
||||||
|
|
||||||
2008-08-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2008-08-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Fixed the bug that the number of connected peer is exceeding the limit
|
Fixed the bug that the number of connected peer is exceeding the limit
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#include "InOrderURISelector.h"
|
#include "InOrderURISelector.h"
|
||||||
#include "Option.h"
|
#include "Option.h"
|
||||||
#include "prefs.h"
|
#include "prefs.h"
|
||||||
|
#include "File.h"
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
@ -498,13 +499,14 @@ bool RequestGroupMan::loadServerStat(const std::string& filename)
|
||||||
|
|
||||||
bool RequestGroupMan::saveServerStat(const std::string& filename) const
|
bool RequestGroupMan::saveServerStat(const std::string& filename) const
|
||||||
{
|
{
|
||||||
std::ofstream out(filename.c_str());
|
std::string tempfile = filename+"__temp";
|
||||||
|
std::ofstream out(tempfile.c_str());
|
||||||
if(!out) {
|
if(!out) {
|
||||||
_logger->error("Failed to open ServerStat file %s for write.",
|
_logger->error("Failed to open ServerStat file %s for write.",
|
||||||
filename.c_str());
|
tempfile.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(_serverStatMan->save(out)) {
|
if(_serverStatMan->save(out) && File(tempfile).renameTo(filename)) {
|
||||||
_logger->notice("ServerStat file %s saved successfully.", filename.c_str());
|
_logger->notice("ServerStat file %s saved successfully.", filename.c_str());
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
#include "DownloadResult.h"
|
#include "DownloadResult.h"
|
||||||
#include "FileEntry.h"
|
#include "FileEntry.h"
|
||||||
#include "ServerStatMan.h"
|
#include "ServerStatMan.h"
|
||||||
|
#include "ServerStat.h"
|
||||||
|
#include "File.h"
|
||||||
|
#include <fstream>
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
@ -16,6 +19,8 @@ class RequestGroupManTest : public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST_SUITE(RequestGroupManTest);
|
CPPUNIT_TEST_SUITE(RequestGroupManTest);
|
||||||
CPPUNIT_TEST(testIsSameFileBeingDownloaded);
|
CPPUNIT_TEST(testIsSameFileBeingDownloaded);
|
||||||
CPPUNIT_TEST(testGetInitialCommands);
|
CPPUNIT_TEST(testGetInitialCommands);
|
||||||
|
CPPUNIT_TEST(testLoadServerStat);
|
||||||
|
CPPUNIT_TEST(testSaveServerStat);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -28,6 +33,8 @@ public:
|
||||||
|
|
||||||
void testIsSameFileBeingDownloaded();
|
void testIsSameFileBeingDownloaded();
|
||||||
void testGetInitialCommands();
|
void testGetInitialCommands();
|
||||||
|
void testLoadServerStat();
|
||||||
|
void testSaveServerStat();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,4 +76,39 @@ void RequestGroupManTest::testGetInitialCommands()
|
||||||
// TODO implement later
|
// TODO implement later
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RequestGroupManTest::testSaveServerStat()
|
||||||
|
{
|
||||||
|
Option option;
|
||||||
|
RequestGroupMan rm(std::deque<SharedHandle<RequestGroup> >(), 0, &option);
|
||||||
|
SharedHandle<ServerStat> ss_localhost(new ServerStat("localhost", "http"));
|
||||||
|
rm.addServerStat(ss_localhost);
|
||||||
|
File f("/tmp/aria2_RequestGroupManTest_testSaveServerStat");
|
||||||
|
if(f.exists()) {
|
||||||
|
f.remove();
|
||||||
|
}
|
||||||
|
CPPUNIT_ASSERT(rm.saveServerStat(f.getPath()));
|
||||||
|
CPPUNIT_ASSERT(f.isFile());
|
||||||
|
|
||||||
|
f.remove();
|
||||||
|
CPPUNIT_ASSERT(f.mkdirs());
|
||||||
|
CPPUNIT_ASSERT(!rm.saveServerStat(f.getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void RequestGroupManTest::testLoadServerStat()
|
||||||
|
{
|
||||||
|
File f("/tmp/aria2_RequestGroupManTest_testLoadServerStat");
|
||||||
|
std::ofstream o(f.getPath().c_str());
|
||||||
|
o << "host=localhost, protocol=http, dl_speed=0, last_updated=1219505257,"
|
||||||
|
<< "status=OK";
|
||||||
|
o.close();
|
||||||
|
|
||||||
|
Option option;
|
||||||
|
RequestGroupMan rm(std::deque<SharedHandle<RequestGroup> >(), 0, &option);
|
||||||
|
CPPUNIT_ASSERT(rm.loadServerStat(f.getPath()));
|
||||||
|
SharedHandle<ServerStat> ss_localhost = rm.findServerStat("localhost",
|
||||||
|
"http");
|
||||||
|
CPPUNIT_ASSERT(!ss_localhost.isNull());
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("localhost"), ss_localhost->getHostname());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
Loading…
Reference in New Issue