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
pull/1/head
Tatsuhiro Tsujikawa 2010-03-07 14:17:53 +00:00
parent b0f180c99c
commit 4785b7190c
3 changed files with 37 additions and 8 deletions

View File

@ -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> 2010-03-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
url -> uri in Request class. url -> uri in Request class.

View File

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

View File

@ -30,7 +30,9 @@ class FtpConnectionTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testReceivePwdResponse_badStatus); CPPUNIT_TEST(testReceivePwdResponse_badStatus);
CPPUNIT_TEST(testSendCwd); CPPUNIT_TEST(testSendCwd);
CPPUNIT_TEST(testSendCwd_baseWorkingDir); CPPUNIT_TEST(testSendCwd_baseWorkingDir);
CPPUNIT_TEST(testSendSize);
CPPUNIT_TEST(testReceiveSizeResponse); CPPUNIT_TEST(testReceiveSizeResponse);
CPPUNIT_TEST(testSendRetr);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
private: private:
SharedHandle<SocketCore> _serverSocket; SharedHandle<SocketCore> _serverSocket;
@ -54,7 +56,7 @@ public:
_listenPort = addrinfo.second; _listenPort = addrinfo.second;
SharedHandle<Request> req(new Request()); 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.reset(new SocketCore());
_clientSocket->establishConnection("localhost", _listenPort); _clientSocket->establishConnection("localhost", _listenPort);
@ -81,7 +83,9 @@ public:
void testReceivePwdResponse_badStatus(); void testReceivePwdResponse_badStatus();
void testSendCwd(); void testSendCwd();
void testSendCwd_baseWorkingDir(); void testSendCwd_baseWorkingDir();
void testSendSize();
void testReceiveSizeResponse(); void testReceiveSizeResponse();
void testSendRetr();
}; };
@ -141,9 +145,9 @@ void FtpConnectionTest::testSendMdtm()
char data[32]; char data[32];
size_t len = sizeof(data); size_t len = sizeof(data);
_serverSocket->readData(data, len); _serverSocket->readData(data, len);
CPPUNIT_ASSERT_EQUAL((size_t)15, len);
data[len] = '\0'; 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() void FtpConnectionTest::testReceiveMdtmResponse()
@ -263,9 +267,8 @@ void FtpConnectionTest::testSendCwd()
char data[32]; char data[32];
size_t len = sizeof(data); size_t len = sizeof(data);
_serverSocket->readData(data, len); _serverSocket->readData(data, len);
CPPUNIT_ASSERT_EQUAL((size_t)10, len);
data[len] = '\0'; 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() void FtpConnectionTest::testSendCwd_baseWorkingDir()
@ -275,9 +278,18 @@ void FtpConnectionTest::testSendCwd_baseWorkingDir()
char data[32]; char data[32];
size_t len = sizeof(data); size_t len = sizeof(data);
_serverSocket->readData(data, len); _serverSocket->readData(data, len);
CPPUNIT_ASSERT_EQUAL((size_t)15, len);
data[len] = '\0'; 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() void FtpConnectionTest::testReceiveSizeResponse()
@ -289,4 +301,14 @@ void FtpConnectionTest::testReceiveSizeResponse()
CPPUNIT_ASSERT_EQUAL((uint64_t)4294967296LL, size); 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 } // namespace aria2