mirror of
https://github.com/aria2/aria2.git
synced 2025-04-07 06:27:37 +03:00
2010-03-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added changeUri XML-RPC method. This method removes/adds URIs dynamically. * doc/aria2c.1.txt * src/AbstractCommand.cc * src/DownloadContext.cc * src/DownloadContext.h * src/FileEntry.cc * src/FileEntry.h * src/Request.cc * src/Request.h * src/RequestGroup.cc * src/RequestGroupMan.cc * src/XmlRpcMethodFactory.cc * src/XmlRpcMethodImpl.cc * src/XmlRpcMethodImpl.h * test/FileEntryTest.cc * test/XmlRpcMethodTest.cc
This commit is contained in:
parent
61b2b88c29
commit
b1713e6373
18 changed files with 461 additions and 12 deletions
|
@ -75,6 +75,8 @@ class XmlRpcMethodTest:public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(testChangePosition);
|
||||
CPPUNIT_TEST(testChangePosition_fail);
|
||||
CPPUNIT_TEST(testGetSessionInfo);
|
||||
CPPUNIT_TEST(testChangeUri);
|
||||
CPPUNIT_TEST(testChangeUri_fail);
|
||||
CPPUNIT_TEST(testSystemMulticall);
|
||||
CPPUNIT_TEST(testSystemMulticall_fail);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
@ -135,6 +137,8 @@ public:
|
|||
void testChangePosition();
|
||||
void testChangePosition_fail();
|
||||
void testGetSessionInfo();
|
||||
void testChangeUri();
|
||||
void testChangeUri_fail();
|
||||
void testSystemMulticall();
|
||||
void testSystemMulticall_fail();
|
||||
};
|
||||
|
@ -779,6 +783,131 @@ void XmlRpcMethodTest::testChangePosition_fail()
|
|||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
}
|
||||
|
||||
void XmlRpcMethodTest::testChangeUri()
|
||||
{
|
||||
SharedHandle<FileEntry> files[3];
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
files[i].reset(new FileEntry());
|
||||
}
|
||||
files[1]->addUri("http://example.org/aria2.tar.bz2");
|
||||
files[1]->addUri("http://example.org/mustremove1");
|
||||
files[1]->addUri("http://example.org/mustremove2");
|
||||
SharedHandle<DownloadContext> dctx(new DownloadContext());
|
||||
dctx->setFileEntries(&files[0], &files[3]);
|
||||
SharedHandle<RequestGroup> group(new RequestGroup(_option));
|
||||
group->setDownloadContext(dctx);
|
||||
_e->_requestGroupMan->addReservedGroup(group);
|
||||
|
||||
ChangeUriXmlRpcMethod m;
|
||||
XmlRpcRequest req(ChangeUriXmlRpcMethod::getMethodName(), BDE::list());
|
||||
req._params << std::string("1"); // GID
|
||||
req._params << 1; // index of FileEntry
|
||||
BDE removeuris = BDE::list();
|
||||
removeuris << std::string("http://example.org/mustremove1");
|
||||
removeuris << std::string("http://example.org/mustremove2");
|
||||
removeuris << std::string("http://example.org/notexist");
|
||||
req._params << removeuris;
|
||||
BDE adduris = BDE::list();
|
||||
adduris << std::string("http://example.org/added1");
|
||||
adduris << std::string("http://example.org/added2");
|
||||
adduris << std::string("baduri");
|
||||
adduris << std::string("http://example.org/added3");
|
||||
req._params << adduris;
|
||||
XmlRpcResponse res = m.execute(req, _e.get());
|
||||
CPPUNIT_ASSERT_EQUAL(0, res._code);
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)2, res._param[0].i());
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)3, res._param[1].i());
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, files[0]->getRemainingUris().size());
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, files[2]->getRemainingUris().size());
|
||||
std::deque<std::string> uris = files[1]->getRemainingUris();
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)4, uris.size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/aria2.tar.bz2"),uris[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added1"), uris[1]);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added2"), uris[2]);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added3"), uris[3]);
|
||||
|
||||
// Change adduris
|
||||
adduris = BDE::list();
|
||||
adduris << std::string("http://example.org/added1-1");
|
||||
adduris << std::string("http://example.org/added1-2");
|
||||
req._params[3] = adduris;
|
||||
// Set position parameter
|
||||
req._params << 2;
|
||||
res = m.execute(req, _e.get());
|
||||
CPPUNIT_ASSERT_EQUAL(0, res._code);
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)0, res._param[0].i());
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)2, res._param[1].i());
|
||||
uris = files[1]->getRemainingUris();
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)6, uris.size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added1-1"), uris[2]);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added1-2"), uris[3]);
|
||||
|
||||
// Change index of FileEntry
|
||||
req._params[1] = 0;
|
||||
// Set position far beyond the size of uris in FileEntry.
|
||||
req._params[4] = 1000;
|
||||
res = m.execute(req, _e.get());
|
||||
CPPUNIT_ASSERT_EQUAL(0, res._code);
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)0, res._param[0].i());
|
||||
CPPUNIT_ASSERT_EQUAL((int64_t)2, res._param[1].i());
|
||||
uris = files[0]->getRemainingUris();
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, uris.size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added1-1"), uris[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("http://example.org/added1-2"), uris[1]);
|
||||
}
|
||||
|
||||
void XmlRpcMethodTest::testChangeUri_fail()
|
||||
{
|
||||
SharedHandle<FileEntry> files[3];
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
files[i].reset(new FileEntry());
|
||||
}
|
||||
SharedHandle<DownloadContext> dctx(new DownloadContext());
|
||||
dctx->setFileEntries(&files[0], &files[3]);
|
||||
SharedHandle<RequestGroup> group(new RequestGroup(_option));
|
||||
group->setDownloadContext(dctx);
|
||||
_e->_requestGroupMan->addReservedGroup(group);
|
||||
|
||||
ChangeUriXmlRpcMethod m;
|
||||
XmlRpcRequest req(ChangeUriXmlRpcMethod::getMethodName(), BDE::list());
|
||||
req._params << std::string("1"); // GID
|
||||
req._params << 0; // index of FileEntry
|
||||
BDE removeuris = BDE::list();
|
||||
req._params << removeuris;
|
||||
BDE adduris = BDE::list();
|
||||
req._params << adduris;
|
||||
XmlRpcResponse res = m.execute(req, _e.get());
|
||||
CPPUNIT_ASSERT_EQUAL(0, res._code);
|
||||
|
||||
req._params[0] = std::string("2");
|
||||
res = m.execute(req, _e.get());
|
||||
// RPC request fails because GID#2 does not exist.
|
||||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
|
||||
req._params[0] = std::string("1");
|
||||
req._params[1] = 3;
|
||||
res = m.execute(req, _e.get());
|
||||
// RPC request fails because FileEntry#3 does not exist.
|
||||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
|
||||
req._params[1] = std::string("0");
|
||||
res = m.execute(req, _e.get());
|
||||
// RPC request fails because index of FileEntry is string.
|
||||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
|
||||
req._params[1] = 0;
|
||||
req._params[2] = std::string("http://url");
|
||||
res = m.execute(req, _e.get());
|
||||
// RPC request fails because 3rd param is not list.
|
||||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
|
||||
req._params[2] = BDE::list();
|
||||
req._params[3] = std::string("http://url");
|
||||
res = m.execute(req, _e.get());
|
||||
// RPC request fails because 4th param is not list.
|
||||
CPPUNIT_ASSERT_EQUAL(1, res._code);
|
||||
}
|
||||
|
||||
void XmlRpcMethodTest::testGetSessionInfo()
|
||||
{
|
||||
GetSessionInfoXmlRpcMethod m;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue