diff --git a/test/Aria2ApiTest.cc b/test/Aria2ApiTest.cc new file mode 100644 index 00000000..1eb9c6ac --- /dev/null +++ b/test/Aria2ApiTest.cc @@ -0,0 +1,129 @@ +#include "aria2api.h" + +#include + +namespace aria2 { + +class Aria2ApiTest:public CppUnit::TestFixture { + + CPPUNIT_TEST_SUITE(Aria2ApiTest); + CPPUNIT_TEST(testAddUri); + CPPUNIT_TEST(testAddMetalink); + CPPUNIT_TEST(testRemovePause); + CPPUNIT_TEST(testChangePosition); + CPPUNIT_TEST_SUITE_END(); + + Session* session_; +public: + void setUp() + { + SessionConfig config; + KeyVals options; + session_ = sessionNew(options, config); + } + + void tearDown() + { + sessionFinal(session_); + } + + void testAddUri(); + void testAddMetalink(); + void testRemovePause(); + void testChangePosition(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Aria2ApiTest); + +void Aria2ApiTest::testAddUri() +{ + A2Gid gid; + std::vector uris(1); + KeyVals options; + uris[0] = "http://localhost/1"; + CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options)); + CPPUNIT_ASSERT(!isNull(gid)); + + DownloadHandle* hd = getDownloadHandle(session_, gid); + CPPUNIT_ASSERT(hd); + CPPUNIT_ASSERT_EQUAL(1, hd->getNumFiles()); + FileData file = hd->getFile(1); + CPPUNIT_ASSERT_EQUAL((size_t)1, file.uris.size()); + CPPUNIT_ASSERT_EQUAL(uris[0], file.uris[0].uri); + deleteDownloadHandle(hd); + + options.push_back(KeyVals::value_type("file-allocation", "foo")); + CPPUNIT_ASSERT_EQUAL(-1, addUri(session_, &gid, uris, options)); +} + +void Aria2ApiTest::testAddMetalink() +{ + std::string metalinkPath = A2_TEST_DIR"/metalink4.xml"; + std::vector gids; + KeyVals options; + CPPUNIT_ASSERT_EQUAL(0, addMetalink(session_, &gids, metalinkPath, options)); + CPPUNIT_ASSERT_EQUAL((size_t)2, gids.size()); + + gids.clear(); + options.push_back(KeyVals::value_type("file-allocation", "foo")); + CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath, + options)); +} + +void Aria2ApiTest::testRemovePause() +{ + A2Gid gid; + std::vector uris(1); + KeyVals options; + uris[0] = "http://localhost/1"; + CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options)); + + DownloadHandle* hd = getDownloadHandle(session_, gid); + CPPUNIT_ASSERT(hd); + CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus()); + deleteDownloadHandle(hd); + + CPPUNIT_ASSERT_EQUAL(-1, pauseDownload(session_, (A2Gid)0)); + CPPUNIT_ASSERT_EQUAL(0, pauseDownload(session_, gid)); + hd = getDownloadHandle(session_, gid); + CPPUNIT_ASSERT(hd); + CPPUNIT_ASSERT_EQUAL(DOWNLOAD_PAUSED, hd->getStatus()); + deleteDownloadHandle(hd); + + CPPUNIT_ASSERT_EQUAL(-1, unpauseDownload(session_, (A2Gid)0)); + CPPUNIT_ASSERT_EQUAL(0, unpauseDownload(session_, gid)); + hd = getDownloadHandle(session_, gid); + CPPUNIT_ASSERT(hd); + CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus()); + deleteDownloadHandle(hd); + + CPPUNIT_ASSERT_EQUAL(-1, removeDownload(session_, (A2Gid)0)); + CPPUNIT_ASSERT_EQUAL(0, removeDownload(session_, gid)); + hd = getDownloadHandle(session_, gid); + CPPUNIT_ASSERT(!hd); +} + +void Aria2ApiTest::testChangePosition() +{ + int N = 10; + std::vector gids(N); + std::vector uris(1); + KeyVals options; + uris[0] = "http://localhost/"; + for(int i = 0; i < N; ++i) { + CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gids[i], uris, options)); + } + CPPUNIT_ASSERT_EQUAL(-1, changePosition(session_, (A2Gid)0, -2, + OFFSET_MODE_CUR)); + CPPUNIT_ASSERT_EQUAL(2, changePosition(session_, gids[4], -2, + OFFSET_MODE_CUR)); + + CPPUNIT_ASSERT_EQUAL(5, changePosition(session_, gids[4], 5, + OFFSET_MODE_SET)); + + CPPUNIT_ASSERT_EQUAL(7, changePosition(session_, gids[4], -2, + OFFSET_MODE_END)); + +} + +} // namespace aria2 diff --git a/test/Makefile.am b/test/Makefile.am index 2ba15b50..6195958a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -237,6 +237,10 @@ if !HAVE_TIMEGM aria2c_SOURCES += TimegmTest.cc endif # !HAVE_TIMEGM +if ENABLE_LIBARIA2 +aria2c_SOURCES += Aria2ApiTest.cc +endif # ENABLE_LIBARIA2 + aria2c_LDADD = ../src/libaria2.la @LIBINTL@ @CPPUNIT_LIBS@ AM_CPPFLAGS = -Wall\ -I$(top_srcdir)/src\