瀏覽代碼

2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Fixed the bug that filename is percent encoded where it must be
	percent decoded in sendMdtm().
	* src/FtpConnection.cc
	* test/FtpConnectionTest.cc
Tatsuhiro Tsujikawa 15 年之前
父節點
當前提交
4785b7190c
共有 3 個文件被更改,包括 37 次插入8 次删除
  1. 7 0
      ChangeLog
  2. 1 1
      src/FtpConnection.cc
  3. 29 7
      test/FtpConnectionTest.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2010-03-07  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Fixed the bug that filename is percent encoded where it must be
+	percent decoded in sendMdtm().
+	* src/FtpConnection.cc
+	* test/FtpConnectionTest.cc
+
 2010-03-07  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	url -> uri in Request class.

+ 1 - 1
src/FtpConnection.cc

@@ -152,7 +152,7 @@ bool FtpConnection::sendMdtm()
 {
   if(_socketBuffer.sendBufferIsEmpty()) {
     std::string request = "MDTM ";
-    request += util::urlencode(req->getFile());
+    request += util::urldecode(req->getFile());
     request += "\r\n";
     logger->info(MSG_SENDING_REQUEST, cuid, request.c_str());
     _socketBuffer.pushStr(request);

+ 29 - 7
test/FtpConnectionTest.cc

@@ -30,7 +30,9 @@ class FtpConnectionTest:public CppUnit::TestFixture {
   CPPUNIT_TEST(testReceivePwdResponse_badStatus);
   CPPUNIT_TEST(testSendCwd);
   CPPUNIT_TEST(testSendCwd_baseWorkingDir);
+  CPPUNIT_TEST(testSendSize);
   CPPUNIT_TEST(testReceiveSizeResponse);
+  CPPUNIT_TEST(testSendRetr);
   CPPUNIT_TEST_SUITE_END();
 private:
   SharedHandle<SocketCore> _serverSocket;
@@ -54,7 +56,7 @@ public:
     _listenPort = addrinfo.second;
 
     SharedHandle<Request> req(new Request());
-    req->setUri("ftp://localhost/dir/file.img");
+    req->setUri("ftp://localhost/dir%20sp/hello%20world.img");
 
     _clientSocket.reset(new SocketCore());
     _clientSocket->establishConnection("localhost", _listenPort);
@@ -81,7 +83,9 @@ public:
   void testReceivePwdResponse_badStatus();
   void testSendCwd();
   void testSendCwd_baseWorkingDir();
+  void testSendSize();
   void testReceiveSizeResponse();
+  void testSendRetr();
 };
 
 
@@ -141,9 +145,9 @@ void FtpConnectionTest::testSendMdtm()
   char data[32];
   size_t len = sizeof(data);
   _serverSocket->readData(data, len);
-  CPPUNIT_ASSERT_EQUAL((size_t)15, len);
   data[len] = '\0';
-  CPPUNIT_ASSERT_EQUAL(std::string("MDTM file.img\r\n"), std::string(data));
+  CPPUNIT_ASSERT_EQUAL(std::string("MDTM hello world.img\r\n"),
+                       std::string(data));
 }
 
 void FtpConnectionTest::testReceiveMdtmResponse()
@@ -263,9 +267,8 @@ void FtpConnectionTest::testSendCwd()
   char data[32];
   size_t len = sizeof(data);
   _serverSocket->readData(data, len);
-  CPPUNIT_ASSERT_EQUAL((size_t)10, len);
   data[len] = '\0';
-  CPPUNIT_ASSERT_EQUAL(std::string("CWD /dir\r\n"), std::string(data));
+  CPPUNIT_ASSERT_EQUAL(std::string("CWD /dir sp\r\n"), std::string(data));
 }
 
 void FtpConnectionTest::testSendCwd_baseWorkingDir()
@@ -275,9 +278,18 @@ void FtpConnectionTest::testSendCwd_baseWorkingDir()
   char data[32];
   size_t len = sizeof(data);
   _serverSocket->readData(data, len);
-  CPPUNIT_ASSERT_EQUAL((size_t)15, len);
   data[len] = '\0';
-  CPPUNIT_ASSERT_EQUAL(std::string("CWD /base/dir\r\n"), std::string(data));
+  CPPUNIT_ASSERT_EQUAL(std::string("CWD /base/dir sp\r\n"), std::string(data));
+}
+
+void FtpConnectionTest::testSendSize()
+{
+  _ftp->sendSize();
+  char data[32];
+  size_t len = sizeof(data);
+  _serverSocket->readData(data, len);
+  CPPUNIT_ASSERT_EQUAL(std::string("SIZE hello world.img\r\n"),
+                       std::string(&data[0], &data[len]));
 }
 
 void FtpConnectionTest::testReceiveSizeResponse()
@@ -289,4 +301,14 @@ void FtpConnectionTest::testReceiveSizeResponse()
   CPPUNIT_ASSERT_EQUAL((uint64_t)4294967296LL, size);
 }
 
+void FtpConnectionTest::testSendRetr()
+{
+  _ftp->sendRetr();
+  char data[32];
+  size_t len = sizeof(data);
+  _serverSocket->readData(data, len);
+  CPPUNIT_ASSERT_EQUAL(std::string("RETR hello world.img\r\n"),
+                       std::string(&data[0], &data[len]));
+}
+
 } // namespace aria2