Forráskód Böngészése

2009-05-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Added tests for addTorrent and addMetalink command.
	* test/TestUtil.cc
	* test/TestUtil.h
	* test/XmlRpcMethodTest.cc
Tatsuhiro Tsujikawa 16 éve
szülő
commit
672b70f6c9
4 módosított fájl, 104 hozzáadás és 4 törlés
  1. 7 0
      ChangeLog
  2. 23 4
      test/TestUtil.cc
  3. 2 0
      test/TestUtil.h
  4. 72 0
      test/XmlRpcMethodTest.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2009-05-15  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Added tests for addTorrent and addMetalink command.
+	* test/TestUtil.cc
+	* test/TestUtil.h
+	* test/XmlRpcMethodTest.cc
+
 2009-05-15  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Corrected the description of --file-allocation option.

+ 23 - 4
test/TestUtil.cc

@@ -1,13 +1,17 @@
 #include "TestUtil.h"
-#include "a2io.h"
-#include "File.h"
-#include "StringFormat.h"
-#include "FatalException.h"
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <cerrno>
 #include <cstring>
+#include <sstream>
+#include <fstream>
+
+#include "a2io.h"
+#include "File.h"
+#include "StringFormat.h"
+#include "FatalException.h"
 
 namespace aria2 {
 
@@ -26,4 +30,19 @@ void createFile(const std::string& path, size_t length)
   close(fd);
 }
 
+std::string readFile(const std::string& path)
+{
+  std::stringstream ss;
+  std::ifstream in(path.c_str(), std::ios::binary);
+  char buf[4096];
+  while(1) {
+    in.read(buf, sizeof(buf));
+    ss.write(buf, in.gcount());
+    if(in.gcount() != sizeof(buf)) {
+      break;
+    }
+  }
+  return ss.str();
+}
+
 };

+ 2 - 0
test/TestUtil.h

@@ -5,4 +5,6 @@ namespace aria2 {
 
 void createFile(const std::string& filename, size_t length);
 
+std::string readFile(const std::string& path);
+
 } // namespace aria2

+ 72 - 0
test/XmlRpcMethodTest.cc

@@ -15,6 +15,7 @@
 #include "XmlRpcRequest.h"
 #include "XmlRpcResponse.h"
 #include "prefs.h"
+#include "TestUtil.h"
 
 namespace aria2 {
 
@@ -24,6 +25,8 @@ class XmlRpcMethodTest:public CppUnit::TestFixture {
 
   CPPUNIT_TEST_SUITE(XmlRpcMethodTest);
   CPPUNIT_TEST(testAddUri);
+  CPPUNIT_TEST(testAddTorrent);
+  CPPUNIT_TEST(testAddMetalink);
   CPPUNIT_TEST(testChangeOption);
   CPPUNIT_TEST(testChangeGlobalOption);
   CPPUNIT_TEST(testNoSuchMethod);
@@ -36,6 +39,7 @@ public:
   {
     RequestGroup::resetGIDCounter();
     _option.reset(new Option());
+    _option->put(PREF_DIR, "/tmp");
     _e.reset(new DownloadEngine(SharedHandle<EventPoll>(new SelectEventPoll())));
     _e->option = _option.get();
     _e->_requestGroupMan.reset
@@ -46,6 +50,8 @@ public:
   void tearDown() {}
 
   void testAddUri();
+  void testAddTorrent();
+  void testAddMetalink();
   void testChangeOption();
   void testChangeGlobalOption();
   void testNoSuchMethod();
@@ -69,6 +75,72 @@ void XmlRpcMethodTest::testAddUri()
 		       rgs.front()->getRemainingUris().front());
 }
 
+void XmlRpcMethodTest::testAddTorrent()
+{
+  AddTorrentXmlRpcMethod m;
+  XmlRpcRequest req("aria2.addTorrent", BDE::list());
+  req._params << BDE(readFile("single.torrent"));
+  BDE uris = BDE::list();
+  uris << BDE("http://localhost/aria2-0.8.2.tar.bz2");
+  req._params << uris;
+  {
+    XmlRpcResponse res = m.execute(req, _e.get());
+    CPPUNIT_ASSERT_EQUAL(0, res._code);
+    CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param.s());
+
+    SharedHandle<RequestGroup> group = _e->_requestGroupMan->findReservedGroup(1);
+    CPPUNIT_ASSERT(!group.isNull());
+    CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-0.8.2.tar.bz2"),
+			 group->getFilePath());
+    CPPUNIT_ASSERT_EQUAL((size_t)1, group->getRemainingUris().size());
+    CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/aria2-0.8.2.tar.bz2"),
+			 group->getRemainingUris()[0]);
+  }
+  // with options
+  BDE opt = BDE::dict();
+  opt[PREF_DIR] = BDE("/sink");
+  req._params << opt;
+  {
+    XmlRpcResponse res = m.execute(req, _e.get());
+    CPPUNIT_ASSERT_EQUAL(0, res._code);
+    CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-0.8.2.tar.bz2"),
+			 _e->_requestGroupMan->findReservedGroup(2)->getFilePath());
+  }
+}
+
+void XmlRpcMethodTest::testAddMetalink()
+{
+  AddMetalinkXmlRpcMethod m;
+  XmlRpcRequest req("aria2.addMetalink", BDE::list());
+  req._params << BDE(readFile("2files.metalink"));
+  {
+    XmlRpcResponse res = m.execute(req, _e.get());
+    CPPUNIT_ASSERT_EQUAL(0, res._code);
+    CPPUNIT_ASSERT_EQUAL((size_t)2, res._param.size());
+    CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param[0].s());
+    CPPUNIT_ASSERT_EQUAL(std::string("2"), res._param[1].s());
+
+    SharedHandle<RequestGroup> tar = _e->_requestGroupMan->findReservedGroup(1);
+    CPPUNIT_ASSERT(!tar.isNull());
+    CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.tar.bz2"),
+			 tar->getFilePath());
+    SharedHandle<RequestGroup> deb = _e->_requestGroupMan->findReservedGroup(2);
+    CPPUNIT_ASSERT(!deb.isNull());
+    CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.deb"),
+			 deb->getFilePath());
+  }
+  // with options
+  BDE opt = BDE::dict();
+  opt[PREF_DIR] = BDE("/sink");
+  req._params << opt;
+  {
+    XmlRpcResponse res = m.execute(req, _e.get());
+    CPPUNIT_ASSERT_EQUAL(0, res._code);
+    CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-5.0.0.tar.bz2"),
+			 _e->_requestGroupMan->findReservedGroup(3)->getFilePath());
+  }
+}
+
 void XmlRpcMethodTest::testChangeOption()
 {
   SharedHandle<RequestGroup> group