void FTPStreamFactoryTest::testMissingPasswordProvider() { FTPStreamFactory::setPasswordProvider(0); DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("221 Good bye"); URI uri; uri.setScheme("ftp"); uri.setHost("localhost"); uri.setPort(server.port()); uri.setPath("/test.txt;type=a"); uri.setUserInfo("user"); try { FTPStreamFactory sf; std::auto_ptr<std::istream> pStr(sf.open(uri)); fail("no password provider - must throw"); } catch (FTPException&) { } }
void POP3ClientSessionTest::testRetrieveHeader() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse( "+OK Here comes the message\r\n" "From: [email protected]\r\n" "To: [email protected]\r\n" "Subject: test\r\n" "\r\n" "." ); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); server.clearCommands(); MessageHeader header; session.retrieveHeader(1, header); std::string cmd = server.popCommand(); assert (cmd == "TOP 1 0"); assert (header.get("From") == "*****@*****.**"); assert (header.get("To") == "*****@*****.**"); assert (header.get("Subject") == "test"); session.close(); }
void FTPStreamFactoryTest::testDownload() { FTPStreamFactory::setPasswordProvider(0); DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); server.addResponse("200 Type set to A"); DialogServer dataServer(false); dataServer.addResponse("line1\r\nline2"); std::ostringstream epsv; epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; server.addResponse(epsv.str()); server.addResponse("150 sending data\r\n226 Transfer complete"); server.addResponse("221 Good bye"); URI uri; uri.setScheme("ftp"); uri.setHost("localhost"); uri.setPort(server.port()); uri.setPath("/test.txt;type=a"); FTPStreamFactory sf; std::auto_ptr<std::istream> pStr(sf.open(uri)); std::ostringstream dataStr; StreamCopier::copyStream(*pStr.get(), dataStr); pStr.reset(); std::string s(dataStr.str()); assert (s == "line1\r\nline2\r\n"); }
void FTPClientSessionTest::testLogin1() { DialogServer server; server.addResponse("220 localhost FTP ready"); FTPClientSession session("localhost", server.port()); assert (session.isOpen()); assert (!session.isLoggedIn()); login(server, session); assert (session.isOpen()); assert (session.isLoggedIn()); server.addResponse("221 Good Bye"); session.logout(); assert (session.isOpen()); assert (!session.isLoggedIn()); server.clearCommands(); server.clearResponses(); login(server, session); assert (session.isOpen()); assert (session.isLoggedIn()); server.addResponse("221 Good Bye"); session.close(); assert (!session.isOpen()); assert (!session.isLoggedIn()); }
void FTPClientSessionTest::testList() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.login("user", "password"); server.clearCommands(); DialogServer dataServer(false); dataServer.addResponse("file1\r\nfile2"); std::ostringstream epsv; epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; server.addResponse(epsv.str()); server.addResponse("150 sending data\r\n226 Transfer complete"); std::istream& istr = session.beginList(); std::ostringstream dataStr; StreamCopier::copyStream(istr, dataStr); session.endList(); std::string s(dataStr.str()); assert (s == "file1\r\nfile2\r\n"); std::string cmd = server.popCommand(); assert (cmd.substr(0, 4) == "EPSV"); cmd = server.popCommand(); assert (cmd == "NLST"); server.addResponse("221 Good Bye"); session.close(); }
void FTPClientSessionTest::testDownloadPASV() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.login("user", "password"); server.clearCommands(); server.addResponse("500 EPSV not understood"); DialogServer dataServer(false); dataServer.addResponse("This is some data"); std::ostringstream pasv; pasv << "227 Entering Passive Mode (127,0,0,1," << (dataServer.port()/256) << "," << (dataServer.port() % 256) << ")"; server.addResponse(pasv.str()); server.addResponse("150 sending data\r\n226 Transfer complete"); std::istream& istr = session.beginDownload("test.txt"); std::ostringstream dataStr; StreamCopier::copyStream(istr, dataStr); session.endDownload(); std::string s(dataStr.str()); assert (s == "This is some data\r\n"); server.addResponse("221 Good Bye"); session.close(); }
void POP3ClientSessionTest::testList() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse( "+OK Here comes da list\r\n" "1 1234\r\n" "2 5678\r\n" "3 987\r\n" ".\r\n" ); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); server.clearCommands(); std::vector<POP3ClientSession::MessageInfo> infos; session.listMessages(infos); std::string cmd = server.popCommand(); assert (cmd == "LIST"); assert (infos.size() == 3); assert (infos[0].id == 1); assert (infos[0].size == 1234); assert (infos[1].id == 2); assert (infos[1].size == 5678); assert (infos[2].id == 3); assert (infos[2].size == 987); session.close(); }
void FTPClientSessionTest::testLogin2() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); Poco::UInt16 serverPort = server.port(); FTPClientSession session("localhost", serverPort, "user", "password"); assert (session.isOpen()); assert (session.isLoggedIn()); server.addResponse("221 Good Bye"); session.close(); assert (!session.isOpen()); assert (!session.isLoggedIn()); server.clearCommands(); server.clearResponses(); server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); session.open("localhost", serverPort, "user", "password"); assert (session.isOpen()); assert (session.isLoggedIn()); server.addResponse("221 Good Bye"); session.close(); assert (!session.isOpen()); assert (!session.isLoggedIn()); }
void FTPClientSessionTest::testDownloadPORT() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.setPassive(false); session.login("user", "password"); server.clearCommands(); server.addResponse("500 EPRT not understood"); server.addResponse("200 PORT OK"); server.addResponse("150 Sending data\r\n226 Transfer complete"); ActiveDownloader dl(session); ActiveResult<std::string> result = dl.download("test.txt"); std::string cmd = server.popCommandWait(); assert (cmd.substr(0, 4) == "EPRT"); cmd = server.popCommandWait(); assert (cmd.substr(0, 4) == "PORT"); std::string dummy; int x, lo, hi; for (std::string::iterator it = cmd.begin(); it != cmd.end(); ++it) { if (*it == ',') *it = ' '; } std::istringstream istr(cmd); istr >> dummy >> x >> x >> x >> x >> hi >> lo; int port = hi*256 + lo; cmd = server.popCommandWait(); assert (cmd == "RETR test.txt"); SocketAddress sa("localhost", (Poco::UInt16) port); DialogSocket dataSock; dataSock.connect(sa); std::string data("This is some data"); dataSock.sendString(data); dataSock.close(); result.wait(); std::string received = result.data(); assert (received == data); server.addResponse("221 Good Bye"); session.close(); }
void SMTPClientSessionTest::testLoginEHLO() { DialogServer server; server.addResponse("220 localhost SMTP ready"); server.addResponse("250 Hello localhost"); server.addResponse("221 Bye"); SMTPClientSession session("localhost", server.port()); session.login("localhost"); std::string cmd = server.popCommand(); assert (cmd == "EHLO localhost"); session.close(); cmd = server.popCommand(); assert (cmd == "QUIT"); }
void SMTPClientSessionTest::testSend() { DialogServer server; server.addResponse("220 localhost SMTP ready"); server.addResponse("250 Hello localhost"); server.addResponse("250 OK"); server.addResponse("250 OK"); server.addResponse("354 Send data"); server.addResponse("250 OK"); server.addResponse("221 Bye"); SMTPClientSession session("localhost", server.port()); session.login("localhost"); MailMessage message; message.setSender("*****@*****.**"); message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, "*****@*****.**", "Jane Doe")); message.setSubject("Test Message"); message.setContent("Hello\r\nblah blah\r\n\r\nJohn\r\n"); server.clearCommands(); session.sendMessage(message); std::string cmd = server.popCommandWait(); assert (cmd == "MAIL FROM: <*****@*****.**>"); cmd = server.popCommandWait(); assert (cmd == "RCPT TO: <*****@*****.**>"); cmd = server.popCommandWait(); assert (cmd == "DATA"); cmd = server.popCommandWait(); assert (cmd.substr(0, 4) == "Date"); cmd = server.popCommandWait(); assert (cmd == "Content-Type: text/plain"); cmd = server.popCommandWait(); assert (cmd == "From: [email protected]"); cmd = server.popCommandWait(); assert (cmd == "Subject: Test Message"); cmd = server.popCommandWait(); assert (cmd == "Content-Transfer-Encoding: quoted-printable"); cmd = server.popCommandWait(); assert (cmd == "To: Jane Doe <*****@*****.**>"); cmd = server.popCommandWait(); assert (cmd == "Hello"); cmd = server.popCommandWait(); assert (cmd == "blah blah"); cmd = server.popCommandWait(); assert (cmd == "John"); cmd = server.popCommandWait(); assert (cmd == "."); session.close(); }
void FTPClientSessionTest::testLoginFailed1() { DialogServer server; server.addResponse("421 localhost FTP not ready"); FTPClientSession session("localhost", server.port()); try { session.login("user", "password"); fail("server not ready - must throw"); } catch (FTPException&) { } server.addResponse("221 Good Bye"); session.close(); }
void SMTPClientSessionTest::testLoginFailed() { DialogServer server; server.addResponse("500 No SMTP service here"); server.addResponse("221 Bye"); SMTPClientSession session("localhost", server.port()); try { session.login("localhost"); fail("cannot login - must throw"); } catch (SMTPException&) { } session.close(); }
void POP3ClientSessionTest::testDeleteMessage() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse("+OK DELETED"); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); server.clearCommands(); session.deleteMessage(42); std::string cmd = server.popCommand(); assert (cmd == "DELE 42"); session.close(); }
void FTPClientSessionTest::testLogin3() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session; assert (!session.isOpen()); assert (!session.isLoggedIn()); session.open("localhost", server.port(), "user", "password"); server.addResponse("221 Good Bye"); session.close(); assert (!session.isOpen()); assert (!session.isLoggedIn()); }
void FTPClientSessionTest::testDownloadEPRT() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.setPassive(false); session.login("user", "password"); server.clearCommands(); server.addResponse("200 EPRT OK"); server.addResponse("150 Sending data\r\n226 Transfer complete"); ActiveDownloader dl(session); ActiveResult<std::string> result = dl.download("test.txt"); std::string cmd = server.popCommandWait(); assert (cmd.substr(0, 4) == "EPRT"); std::string dummy; char c; int d; int port; std::istringstream istr(cmd); istr >> dummy >> c >> d >> c >> d >> c >> d >> c >> d >> c >> d >> c >> port >> c; cmd = server.popCommandWait(); assert (cmd == "RETR test.txt"); SocketAddress sa("localhost", (Poco::UInt16) port); DialogSocket dataSock; dataSock.connect(sa); std::string data("This is some data"); dataSock.sendString(data); dataSock.close(); result.wait(); std::string received = result.data(); assert (received == data); server.addResponse("221 Good Bye"); session.close(); }
void POP3ClientSessionTest::testLogin() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); std::string cmd = server.popCommand(); assert (cmd == "USER user"); cmd = server.popCommand(); assert (cmd == "PASS secret"); session.close(); cmd = server.popCommand(); assert (cmd == "QUIT"); }
void POP3ClientSessionTest::testMessageCount() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse("+OK 42 12345"); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); server.clearCommands(); int n = session.messageCount(); std::string cmd = server.popCommand(); assert (cmd == "STAT"); assert (n == 42); session.close(); }
void POP3ClientSessionTest::testLoginFail() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("-ERR PASS"); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); try { session.login("user", "secret"); fail("login failed - must throw"); } catch (POP3Exception&) { } session.close(); }
void FTPClientSessionTest::testLoginFailed2() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("530 Login incorrect"); FTPClientSession session("localhost", server.port()); try { session.login("user", "password"); fail("login incorrect - must throw"); } catch (FTPException&) { } server.addResponse("221 Good Bye"); session.close(); }
void FTPClientSessionTest::testLogin() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.login("user", "password"); std::string cmd = server.popCommand(); assert (cmd == "USER user"); cmd = server.popCommand(); assert (cmd == "PASS password"); cmd = server.popCommand(); assert (cmd == "TYPE I"); assert (session.getFileType() == FTPClientSession::TYPE_BINARY); server.addResponse("221 Good Bye"); session.close(); }
void POP3ClientSessionTest::testRetrieveMessage() { DialogServer server; server.addResponse("+OK POP3 Ready..."); server.addResponse("+OK USER"); server.addResponse("+OK PASS"); server.addResponse( "+OK Here comes the message\r\n" "From: [email protected]\r\n" "To: [email protected]\r\n" "Subject: test\r\n" "\r\n" "Hello Jane,\r\n" "\r\n" "blah blah blah...\r\n" "....\r\n" "\r\n" "Yours, John\r\n" ".\r\n" ); server.addResponse("+OK QUIT"); POP3ClientSession session("localhost", server.port()); session.login("user", "secret"); server.clearCommands(); MailMessage message; session.retrieveMessage(1, message); std::string cmd = server.popCommand(); assert (cmd == "RETR 1"); assert (message.getContent() == "Hello Jane,\r\n" "\r\n" "blah blah blah...\r\n" "...\r\n" "\r\n" "Yours, John\r\n" ); session.close(); }
void FTPClientSessionTest::testCommands() { DialogServer server; server.addResponse("220 localhost FTP ready"); server.addResponse("331 Password required"); server.addResponse("230 Welcome"); server.addResponse("200 Type set to I"); FTPClientSession session("localhost", server.port()); session.login("user", "password"); std::string cmd = server.popCommand(); assert (cmd == "USER user"); cmd = server.popCommand(); assert (cmd == "PASS password"); cmd = server.popCommand(); assert (cmd == "TYPE I"); // systemType server.clearCommands(); server.addResponse("215 UNIX Type: L8 Version: dummyFTP 1.0"); std::string type = session.systemType(); cmd = server.popCommand(); assert (cmd == "SYST"); assert (type == "UNIX Type: L8 Version: dummyFTP 1.0"); // getWorkingDirectory server.addResponse("257 \"/usr/test\" is current directory"); std::string cwd = session.getWorkingDirectory(); cmd = server.popCommand(); assert (cmd == "PWD"); assert (cwd == "/usr/test"); // getWorkingDirectory (quotes in filename) server.addResponse("257 \"\"\"quote\"\"\" is current directory"); cwd = session.getWorkingDirectory(); cmd = server.popCommand(); assert (cmd == "PWD"); assert (cwd == "\"quote\""); // setWorkingDirectory server.addResponse("250 CWD OK"); session.setWorkingDirectory("test"); cmd = server.popCommand(); assert (cmd == "CWD test"); server.addResponse("250 CDUP OK"); session.cdup(); cmd = server.popCommand(); assert (cmd == "CDUP"); // rename server.addResponse("350 File exists, send destination name"); server.addResponse("250 Rename OK"); session.rename("old.txt", "new.txt"); cmd = server.popCommand(); assert (cmd == "RNFR old.txt"); cmd = server.popCommand(); assert (cmd == "RNTO new.txt"); // rename (failing) server.addResponse("550 not found"); try { session.rename("old.txt", "new.txt"); fail("not found - must throw"); } catch (FTPException&) { } server.clearCommands(); // remove server.addResponse("250 delete ok"); session.remove("test.txt"); cmd = server.popCommand(); assert (cmd == "DELE test.txt"); // remove (failing) server.addResponse("550 not found"); try { session.remove("test.txt"); fail("not found - must throw"); } catch (FTPException&) { } server.clearCommands(); // createDirectory server.addResponse("257 dir created"); session.createDirectory("foo"); cmd = server.popCommand(); assert (cmd == "MKD foo"); // createDirectory (failing) server.addResponse("550 exists"); try { session.createDirectory("foo"); fail("not found - must throw"); } catch (FTPException&) { } server.clearCommands(); // removeDirectory server.addResponse("250 RMD OK"); session.removeDirectory("foo"); cmd = server.popCommand(); assert (cmd == "RMD foo"); // removeDirectory (failing) server.addResponse("550 not found"); try { session.removeDirectory("foo"); fail("not found - must throw"); } catch (FTPException&) { } server.clearCommands(); server.addResponse("221 Good Bye"); session.close(); }