1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2007 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.stub; 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.apache.commons.net.ftp.FTP; 19dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.apache.commons.net.ftp.FTPClient; 20dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.apache.commons.net.ftp.FTPFile; 21dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.apache.log4j.Logger; 22dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandHandler; 23dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandNames; 24dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.InvocationRecord; 25dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.SimpleCompositeCommandHandler; 26dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.StaticReplyCommandHandler; 27dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.stub.command.*; 28dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.test.*; 29dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.test.AbstractTestCase; 30dfb59d50631968ab1a13002ea5421ece93169851chrismair 31dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.io.ByteArrayInputStream; 32dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.io.ByteArrayOutputStream; 33dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.io.IOException; 34dfb59d50631968ab1a13002ea5421ece93169851chrismair 35dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 36dfb59d50631968ab1a13002ea5421ece93169851chrismair * Tests for StubFtpServer using the Apache Jakarta Commons Net FTP client. 37dfb59d50631968ab1a13002ea5421ece93169851chrismair * 38dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 39dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 40dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 41dfb59d50631968ab1a13002ea5421ece93169851chrismairpublic final class StubFtpServerIntegrationTest extends AbstractTestCase implements IntegrationTest { 42dfb59d50631968ab1a13002ea5421ece93169851chrismair 43dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final Logger LOG = Logger.getLogger(StubFtpServerIntegrationTest.class); 44dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String SERVER = "localhost"; 45dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String USERNAME = "user123"; 46dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String PASSWORD = "password"; 47dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String FILENAME = "abc.txt"; 48dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final String ASCII_CONTENTS = "abcdef\tghijklmnopqr"; 49dfb59d50631968ab1a13002ea5421ece93169851chrismair private static final byte[] BINARY_CONTENTS = new byte[256]; 50dfb59d50631968ab1a13002ea5421ece93169851chrismair 51dfb59d50631968ab1a13002ea5421ece93169851chrismair private StubFtpServer stubFtpServer; 52dfb59d50631968ab1a13002ea5421ece93169851chrismair private FTPClient ftpClient; 53dfb59d50631968ab1a13002ea5421ece93169851chrismair private RetrCommandHandler retrCommandHandler; 54dfb59d50631968ab1a13002ea5421ece93169851chrismair private StorCommandHandler storCommandHandler; 55dfb59d50631968ab1a13002ea5421ece93169851chrismair 56dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 57dfb59d50631968ab1a13002ea5421ece93169851chrismair // Tests 58dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 59dfb59d50631968ab1a13002ea5421ece93169851chrismair 60dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testLogin() throws Exception { 61dfb59d50631968ab1a13002ea5421ece93169851chrismair // Connect 62dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Conecting to " + SERVER); 63dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 64dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("connect", 220); 65dfb59d50631968ab1a13002ea5421ece93169851chrismair 66dfb59d50631968ab1a13002ea5421ece93169851chrismair // Login 67dfb59d50631968ab1a13002ea5421ece93169851chrismair String userAndPassword = USERNAME + "/" + PASSWORD; 68dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Logging in as " + userAndPassword); 69dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.login(USERNAME, PASSWORD); 70dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to login with " + userAndPassword, success); 71dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("login with " + userAndPassword, 230); 72dfb59d50631968ab1a13002ea5421ece93169851chrismair 73dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("isStarted", stubFtpServer.isStarted()); 74dfb59d50631968ab1a13002ea5421ece93169851chrismair assertFalse("isShutdown", stubFtpServer.isShutdown()); 75dfb59d50631968ab1a13002ea5421ece93169851chrismair 76dfb59d50631968ab1a13002ea5421ece93169851chrismair // Quit 77dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Quit"); 78dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.quit(); 79dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("quit", 221); 80dfb59d50631968ab1a13002ea5421ece93169851chrismair } 81dfb59d50631968ab1a13002ea5421ece93169851chrismair 82dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testAcct() throws Exception { 83dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 84dfb59d50631968ab1a13002ea5421ece93169851chrismair 85dfb59d50631968ab1a13002ea5421ece93169851chrismair // ACCT 86dfb59d50631968ab1a13002ea5421ece93169851chrismair int replyCode = ftpClient.acct("123456"); 87dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("acct", 230, replyCode); 88dfb59d50631968ab1a13002ea5421ece93169851chrismair } 89dfb59d50631968ab1a13002ea5421ece93169851chrismair 90dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 91dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the stop() method when no session has ever been started 92dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 93dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testStop_NoSessionEverStarted() throws Exception { 94dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Testing a stop() when no session has ever been started"); 95dfb59d50631968ab1a13002ea5421ece93169851chrismair } 96dfb59d50631968ab1a13002ea5421ece93169851chrismair 97dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testHelp() throws Exception { 98dfb59d50631968ab1a13002ea5421ece93169851chrismair // Modify HELP CommandHandler to return a predefined help message 99dfb59d50631968ab1a13002ea5421ece93169851chrismair final String HELP = "help message"; 100dfb59d50631968ab1a13002ea5421ece93169851chrismair HelpCommandHandler helpCommandHandler = (HelpCommandHandler) stubFtpServer.getCommandHandler(CommandNames.HELP); 101dfb59d50631968ab1a13002ea5421ece93169851chrismair helpCommandHandler.setHelpMessage(HELP); 102dfb59d50631968ab1a13002ea5421ece93169851chrismair 103dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 104dfb59d50631968ab1a13002ea5421ece93169851chrismair 105dfb59d50631968ab1a13002ea5421ece93169851chrismair // HELP 106dfb59d50631968ab1a13002ea5421ece93169851chrismair String help = ftpClient.listHelp(); 107dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Wrong response", help.indexOf(HELP) != -1); 108dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("listHelp", 214); 109dfb59d50631968ab1a13002ea5421ece93169851chrismair } 110dfb59d50631968ab1a13002ea5421ece93169851chrismair 111dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 112dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the LIST and SYST commands. 113dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 114dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testList() throws Exception { 115dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 116dfb59d50631968ab1a13002ea5421ece93169851chrismair 117dfb59d50631968ab1a13002ea5421ece93169851chrismair // Set directory listing 118dfb59d50631968ab1a13002ea5421ece93169851chrismair ListCommandHandler listCommandHandler = (ListCommandHandler) stubFtpServer.getCommandHandler(CommandNames.LIST); 119dfb59d50631968ab1a13002ea5421ece93169851chrismair listCommandHandler.setDirectoryListing("11-09-01 12:30PM 406348 File2350.log\n" 120dfb59d50631968ab1a13002ea5421ece93169851chrismair + "11-01-01 1:30PM <DIR> 0 archive"); 121dfb59d50631968ab1a13002ea5421ece93169851chrismair 122dfb59d50631968ab1a13002ea5421ece93169851chrismair // LIST 123dfb59d50631968ab1a13002ea5421ece93169851chrismair FTPFile[] files = ftpClient.listFiles(); 124dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("number of files", 2, files.length); 125dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, "File2350.log", 406348L); 126dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, "archive", 0L); 127dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("list", 226); 128dfb59d50631968ab1a13002ea5421ece93169851chrismair } 129dfb59d50631968ab1a13002ea5421ece93169851chrismair 130dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 131dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test the LIST, PASV and SYST commands, transferring a directory listing in passive mode 132dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 133dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testList_PassiveMode() throws Exception { 134dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 135dfb59d50631968ab1a13002ea5421ece93169851chrismair 136dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.enterLocalPassiveMode(); 137dfb59d50631968ab1a13002ea5421ece93169851chrismair 138dfb59d50631968ab1a13002ea5421ece93169851chrismair // Set directory listing 139dfb59d50631968ab1a13002ea5421ece93169851chrismair ListCommandHandler listCommandHandler = (ListCommandHandler) stubFtpServer.getCommandHandler(CommandNames.LIST); 140dfb59d50631968ab1a13002ea5421ece93169851chrismair listCommandHandler.setDirectoryListing("11-09-01 12:30PM 406348 File2350.log"); 141dfb59d50631968ab1a13002ea5421ece93169851chrismair 142dfb59d50631968ab1a13002ea5421ece93169851chrismair // LIST 143dfb59d50631968ab1a13002ea5421ece93169851chrismair FTPFile[] files = ftpClient.listFiles(); 144dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("number of files", 1, files.length); 145dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("list", 226); 146dfb59d50631968ab1a13002ea5421ece93169851chrismair } 147dfb59d50631968ab1a13002ea5421ece93169851chrismair 148dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testNlst() throws Exception { 149dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 150dfb59d50631968ab1a13002ea5421ece93169851chrismair 151dfb59d50631968ab1a13002ea5421ece93169851chrismair // Set directory listing 152dfb59d50631968ab1a13002ea5421ece93169851chrismair NlstCommandHandler nlstCommandHandler = (NlstCommandHandler) stubFtpServer.getCommandHandler(CommandNames.NLST); 153dfb59d50631968ab1a13002ea5421ece93169851chrismair nlstCommandHandler.setDirectoryListing("File1.txt\nfile2.data"); 154dfb59d50631968ab1a13002ea5421ece93169851chrismair 155dfb59d50631968ab1a13002ea5421ece93169851chrismair // NLST 156dfb59d50631968ab1a13002ea5421ece93169851chrismair String[] filenames = ftpClient.listNames(); 157dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("number of files", 2, filenames.length); 158dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals(filenames[0], "File1.txt"); 159dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals(filenames[1], "file2.data"); 160dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("listNames", 226); 161dfb59d50631968ab1a13002ea5421ece93169851chrismair } 162dfb59d50631968ab1a13002ea5421ece93169851chrismair 163dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 164dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test printing the current working directory (PWD) 165dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 166dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testPwd() throws Exception { 167dfb59d50631968ab1a13002ea5421ece93169851chrismair // Modify PWD CommandHandler to return a predefined directory 168dfb59d50631968ab1a13002ea5421ece93169851chrismair final String DIR = "some/dir"; 169dfb59d50631968ab1a13002ea5421ece93169851chrismair PwdCommandHandler pwdCommandHandler = (PwdCommandHandler) stubFtpServer.getCommandHandler(CommandNames.PWD); 170dfb59d50631968ab1a13002ea5421ece93169851chrismair pwdCommandHandler.setDirectory(DIR); 171dfb59d50631968ab1a13002ea5421ece93169851chrismair 172dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 173dfb59d50631968ab1a13002ea5421ece93169851chrismair 174dfb59d50631968ab1a13002ea5421ece93169851chrismair // PWD 175dfb59d50631968ab1a13002ea5421ece93169851chrismair String dir = ftpClient.printWorkingDirectory(); 176dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("Unable to PWD", DIR, dir); 177dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("printWorkingDirectory", 257); 178dfb59d50631968ab1a13002ea5421ece93169851chrismair } 179dfb59d50631968ab1a13002ea5421ece93169851chrismair 180dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testStat() throws Exception { 181dfb59d50631968ab1a13002ea5421ece93169851chrismair // Modify Stat CommandHandler to return predefined text 182dfb59d50631968ab1a13002ea5421ece93169851chrismair final String STATUS = "some information 123"; 183dfb59d50631968ab1a13002ea5421ece93169851chrismair StatCommandHandler statCommandHandler = (StatCommandHandler) stubFtpServer.getCommandHandler(CommandNames.STAT); 184dfb59d50631968ab1a13002ea5421ece93169851chrismair statCommandHandler.setStatus(STATUS); 185dfb59d50631968ab1a13002ea5421ece93169851chrismair 186dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 187dfb59d50631968ab1a13002ea5421ece93169851chrismair 188dfb59d50631968ab1a13002ea5421ece93169851chrismair // STAT 189dfb59d50631968ab1a13002ea5421ece93169851chrismair String status = ftpClient.getStatus(); 190dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("STAT reply", "211 " + STATUS + ".", status.trim()); 191dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("getStatus", 211); 192dfb59d50631968ab1a13002ea5421ece93169851chrismair } 193dfb59d50631968ab1a13002ea5421ece93169851chrismair 194dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 195dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test getting the status (STAT), when the reply text contains multiple lines 196dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 197dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testStat_MultilineReplyText() throws Exception { 198dfb59d50631968ab1a13002ea5421ece93169851chrismair // Modify Stat CommandHandler to return predefined text 199dfb59d50631968ab1a13002ea5421ece93169851chrismair final String STATUS = "System name: abc.def\nVersion 3.5.7\nNumber of failed logins: 2"; 200dfb59d50631968ab1a13002ea5421ece93169851chrismair final String FORMATTED_REPLY_STATUS = "211-System name: abc.def\r\nVersion 3.5.7\r\n211 Number of failed logins: 2."; 201dfb59d50631968ab1a13002ea5421ece93169851chrismair StatCommandHandler statCommandHandler = (StatCommandHandler) stubFtpServer.getCommandHandler(CommandNames.STAT); 202dfb59d50631968ab1a13002ea5421ece93169851chrismair statCommandHandler.setStatus(STATUS); 203dfb59d50631968ab1a13002ea5421ece93169851chrismair 204dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 205dfb59d50631968ab1a13002ea5421ece93169851chrismair 206dfb59d50631968ab1a13002ea5421ece93169851chrismair // STAT 207dfb59d50631968ab1a13002ea5421ece93169851chrismair String status = ftpClient.getStatus(); 208dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("STAT reply", FORMATTED_REPLY_STATUS, status.trim()); 209dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("getStatus", 211); 210dfb59d50631968ab1a13002ea5421ece93169851chrismair } 211dfb59d50631968ab1a13002ea5421ece93169851chrismair 212dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSyst() throws Exception { 213dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 214dfb59d50631968ab1a13002ea5421ece93169851chrismair 215dfb59d50631968ab1a13002ea5421ece93169851chrismair // SYST 216dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("getSystemName()", "\"WINDOWS\" system type.", ftpClient.getSystemName()); 217dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("syst", 215); 218dfb59d50631968ab1a13002ea5421ece93169851chrismair } 219dfb59d50631968ab1a13002ea5421ece93169851chrismair 220dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testCwd() throws Exception { 221dfb59d50631968ab1a13002ea5421ece93169851chrismair // Connect 222dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Conecting to " + SERVER); 223dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 224dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("connect", 220); 225dfb59d50631968ab1a13002ea5421ece93169851chrismair 226dfb59d50631968ab1a13002ea5421ece93169851chrismair // CWD 227dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.changeWorkingDirectory("dir1/dir2"); 228dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to CWD", success); 229dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("changeWorkingDirectory", 250); 230dfb59d50631968ab1a13002ea5421ece93169851chrismair } 231dfb59d50631968ab1a13002ea5421ece93169851chrismair 232dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 233dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test changing the current working directory (CWD), when it causes a remote error 234dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 235dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testCwd_Error() throws Exception { 236dfb59d50631968ab1a13002ea5421ece93169851chrismair // Override CWD CommandHandler to return error reply code 237dfb59d50631968ab1a13002ea5421ece93169851chrismair final int REPLY_CODE = 500; 238dfb59d50631968ab1a13002ea5421ece93169851chrismair StaticReplyCommandHandler cwdCommandHandler = new StaticReplyCommandHandler(REPLY_CODE); 239dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.setCommandHandler("CWD", cwdCommandHandler); 240dfb59d50631968ab1a13002ea5421ece93169851chrismair 241dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 242dfb59d50631968ab1a13002ea5421ece93169851chrismair 243dfb59d50631968ab1a13002ea5421ece93169851chrismair // CWD 244dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.changeWorkingDirectory("dir1/dir2"); 245dfb59d50631968ab1a13002ea5421ece93169851chrismair assertFalse("Expected failure", success); 246dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE); 247dfb59d50631968ab1a13002ea5421ece93169851chrismair } 248dfb59d50631968ab1a13002ea5421ece93169851chrismair 249dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testCdup() throws Exception { 250dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 251dfb59d50631968ab1a13002ea5421ece93169851chrismair 252dfb59d50631968ab1a13002ea5421ece93169851chrismair // CDUP 253dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.changeToParentDirectory(); 254dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to CDUP", success); 255dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("changeToParentDirectory", 200); 256dfb59d50631968ab1a13002ea5421ece93169851chrismair } 257dfb59d50631968ab1a13002ea5421ece93169851chrismair 258dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testDele() throws Exception { 259dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 260dfb59d50631968ab1a13002ea5421ece93169851chrismair 261dfb59d50631968ab1a13002ea5421ece93169851chrismair // DELE 262dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.deleteFile(FILENAME); 263dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to DELE", success); 264dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("deleteFile", 250); 265dfb59d50631968ab1a13002ea5421ece93169851chrismair } 266dfb59d50631968ab1a13002ea5421ece93169851chrismair 267dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testEprt() throws Exception { 268dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 269dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.sendCommand("EPRT", "|2|1080::8:800:200C:417A|5282|"); 270dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("EPRT", 200); 271dfb59d50631968ab1a13002ea5421ece93169851chrismair } 272dfb59d50631968ab1a13002ea5421ece93169851chrismair 273dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testEpsv() throws Exception { 274dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 275dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.sendCommand("EPSV"); 276dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("EPSV", 229); 277dfb59d50631968ab1a13002ea5421ece93169851chrismair } 278dfb59d50631968ab1a13002ea5421ece93169851chrismair 279dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testFeat_UseStaticReplyCommandHandler() throws IOException { 280dfb59d50631968ab1a13002ea5421ece93169851chrismair // The FEAT command is not supported out of the box 281dfb59d50631968ab1a13002ea5421ece93169851chrismair final String FEAT_TEXT = "Extensions supported:\n" + 282dfb59d50631968ab1a13002ea5421ece93169851chrismair "MLST size*;create;modify*;perm;media-type\n" + 283dfb59d50631968ab1a13002ea5421ece93169851chrismair "SIZE\n" + 284dfb59d50631968ab1a13002ea5421ece93169851chrismair "COMPRESSION\n" + 285dfb59d50631968ab1a13002ea5421ece93169851chrismair "END"; 286dfb59d50631968ab1a13002ea5421ece93169851chrismair StaticReplyCommandHandler featCommandHandler = new StaticReplyCommandHandler(211, FEAT_TEXT); 287dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.setCommandHandler("FEAT", featCommandHandler); 288dfb59d50631968ab1a13002ea5421ece93169851chrismair 289dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 290dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals(ftpClient.sendCommand("FEAT"), 211); 291dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info(ftpClient.getReplyString()); 292dfb59d50631968ab1a13002ea5421ece93169851chrismair } 293dfb59d50631968ab1a13002ea5421ece93169851chrismair 294dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testMkd() throws Exception { 295dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 296dfb59d50631968ab1a13002ea5421ece93169851chrismair 297dfb59d50631968ab1a13002ea5421ece93169851chrismair // MKD 298dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.makeDirectory("dir1/dir2"); 299dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to CWD", success); 300dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("makeDirectory", 257); 301dfb59d50631968ab1a13002ea5421ece93169851chrismair } 302dfb59d50631968ab1a13002ea5421ece93169851chrismair 303dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testNoop() throws Exception { 304dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 305dfb59d50631968ab1a13002ea5421ece93169851chrismair 306dfb59d50631968ab1a13002ea5421ece93169851chrismair // NOOP 307dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.sendNoOp(); 308dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to NOOP", success); 309dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("NOOP", 200); 310dfb59d50631968ab1a13002ea5421ece93169851chrismair } 311dfb59d50631968ab1a13002ea5421ece93169851chrismair 312dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testRest() throws Exception { 313dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 314dfb59d50631968ab1a13002ea5421ece93169851chrismair 315dfb59d50631968ab1a13002ea5421ece93169851chrismair // REST 316dfb59d50631968ab1a13002ea5421ece93169851chrismair int replyCode = ftpClient.rest("marker"); 317dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("Unable to REST", 350, replyCode); 318dfb59d50631968ab1a13002ea5421ece93169851chrismair } 319dfb59d50631968ab1a13002ea5421ece93169851chrismair 320dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testRmd() throws Exception { 321dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 322dfb59d50631968ab1a13002ea5421ece93169851chrismair 323dfb59d50631968ab1a13002ea5421ece93169851chrismair // RMD 324dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.removeDirectory("dir1/dir2"); 325dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to RMD", success); 326dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("removeDirectory", 250); 327dfb59d50631968ab1a13002ea5421ece93169851chrismair } 328dfb59d50631968ab1a13002ea5421ece93169851chrismair 329dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testRename() throws Exception { 330dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 331dfb59d50631968ab1a13002ea5421ece93169851chrismair 332dfb59d50631968ab1a13002ea5421ece93169851chrismair // Rename (RNFR, RNTO) 333dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.rename(FILENAME, "new_" + FILENAME); 334dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to RENAME", success); 335dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("rename", 250); 336dfb59d50631968ab1a13002ea5421ece93169851chrismair } 337dfb59d50631968ab1a13002ea5421ece93169851chrismair 338dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testAllo() throws Exception { 339dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 340dfb59d50631968ab1a13002ea5421ece93169851chrismair 341dfb59d50631968ab1a13002ea5421ece93169851chrismair // ALLO 342dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("ALLO", ftpClient.allocate(1024)); 343dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("ALLO with recordSize", ftpClient.allocate(1024, 64)); 344dfb59d50631968ab1a13002ea5421ece93169851chrismair } 345dfb59d50631968ab1a13002ea5421ece93169851chrismair 346dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 347dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test GET and PUT of ASCII files 348dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 349dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testTransferAsciiFile() throws Exception { 350dfb59d50631968ab1a13002ea5421ece93169851chrismair retrCommandHandler.setFileContents(ASCII_CONTENTS); 351dfb59d50631968ab1a13002ea5421ece93169851chrismair 352dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 353dfb59d50631968ab1a13002ea5421ece93169851chrismair 354dfb59d50631968ab1a13002ea5421ece93169851chrismair // Get File 355dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Get File for remotePath [" + FILENAME + "]"); 356dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 357dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue(ftpClient.retrieveFile(FILENAME, outputStream)); 358dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("File contents=[" + outputStream.toString()); 359dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", ASCII_CONTENTS, outputStream.toString()); 360dfb59d50631968ab1a13002ea5421ece93169851chrismair 361dfb59d50631968ab1a13002ea5421ece93169851chrismair // Put File 362dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Put File for local path [" + FILENAME + "]"); 363dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayInputStream inputStream = new ByteArrayInputStream(ASCII_CONTENTS.getBytes()); 364dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue(ftpClient.storeFile(FILENAME, inputStream)); 365dfb59d50631968ab1a13002ea5421ece93169851chrismair InvocationRecord invocationRecord = storCommandHandler.getInvocation(0); 366dfb59d50631968ab1a13002ea5421ece93169851chrismair byte[] contents = (byte[]) invocationRecord.getObject(StorCommandHandler.FILE_CONTENTS_KEY); 367dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("File contents=[" + contents + "]"); 368dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", ASCII_CONTENTS.getBytes(), contents); 369dfb59d50631968ab1a13002ea5421ece93169851chrismair } 370dfb59d50631968ab1a13002ea5421ece93169851chrismair 371dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 372dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test GET and PUT of binary files 373dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 374dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testTransferBinaryFiles() throws Exception { 375dfb59d50631968ab1a13002ea5421ece93169851chrismair retrCommandHandler.setFileContents(BINARY_CONTENTS); 376dfb59d50631968ab1a13002ea5421ece93169851chrismair 377dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 378dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 379dfb59d50631968ab1a13002ea5421ece93169851chrismair 380dfb59d50631968ab1a13002ea5421ece93169851chrismair // Get File 381dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Get File for remotePath [" + FILENAME + "]"); 382dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 383dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("GET", ftpClient.retrieveFile(FILENAME, outputStream)); 384dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("GET File length=" + outputStream.size()); 385dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", BINARY_CONTENTS, outputStream.toByteArray()); 386dfb59d50631968ab1a13002ea5421ece93169851chrismair 387dfb59d50631968ab1a13002ea5421ece93169851chrismair // Put File 388dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Put File for local path [" + FILENAME + "]"); 389dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayInputStream inputStream = new ByteArrayInputStream(BINARY_CONTENTS); 390dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("PUT", ftpClient.storeFile(FILENAME, inputStream)); 391dfb59d50631968ab1a13002ea5421ece93169851chrismair InvocationRecord invocationRecord = storCommandHandler.getInvocation(0); 392dfb59d50631968ab1a13002ea5421ece93169851chrismair byte[] contents = (byte[]) invocationRecord.getObject(StorCommandHandler.FILE_CONTENTS_KEY); 393dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("PUT File length=" + contents.length); 394dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", BINARY_CONTENTS, contents); 395dfb59d50631968ab1a13002ea5421ece93169851chrismair } 396dfb59d50631968ab1a13002ea5421ece93169851chrismair 397dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testStou() throws Exception { 398dfb59d50631968ab1a13002ea5421ece93169851chrismair StouCommandHandler stouCommandHandler = (StouCommandHandler) stubFtpServer.getCommandHandler(CommandNames.STOU); 399dfb59d50631968ab1a13002ea5421ece93169851chrismair stouCommandHandler.setFilename(FILENAME); 400dfb59d50631968ab1a13002ea5421ece93169851chrismair 401dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 402dfb59d50631968ab1a13002ea5421ece93169851chrismair 403dfb59d50631968ab1a13002ea5421ece93169851chrismair // Stor a File (STOU) 404dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayInputStream inputStream = new ByteArrayInputStream(ASCII_CONTENTS.getBytes()); 405dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue(ftpClient.storeUniqueFile(FILENAME, inputStream)); 406dfb59d50631968ab1a13002ea5421ece93169851chrismair InvocationRecord invocationRecord = stouCommandHandler.getInvocation(0); 407dfb59d50631968ab1a13002ea5421ece93169851chrismair byte[] contents = (byte[]) invocationRecord.getObject(StorCommandHandler.FILE_CONTENTS_KEY); 408dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("File contents=[" + contents + "]"); 409dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", ASCII_CONTENTS.getBytes(), contents); 410dfb59d50631968ab1a13002ea5421ece93169851chrismair } 411dfb59d50631968ab1a13002ea5421ece93169851chrismair 412dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testAppe() throws Exception { 413dfb59d50631968ab1a13002ea5421ece93169851chrismair AppeCommandHandler appeCommandHandler = (AppeCommandHandler) stubFtpServer.getCommandHandler(CommandNames.APPE); 414dfb59d50631968ab1a13002ea5421ece93169851chrismair 415dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 416dfb59d50631968ab1a13002ea5421ece93169851chrismair 417dfb59d50631968ab1a13002ea5421ece93169851chrismair // Append a File (APPE) 418dfb59d50631968ab1a13002ea5421ece93169851chrismair ByteArrayInputStream inputStream = new ByteArrayInputStream(ASCII_CONTENTS.getBytes()); 419dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue(ftpClient.appendFile(FILENAME, inputStream)); 420dfb59d50631968ab1a13002ea5421ece93169851chrismair InvocationRecord invocationRecord = appeCommandHandler.getInvocation(0); 421dfb59d50631968ab1a13002ea5421ece93169851chrismair byte[] contents = (byte[]) invocationRecord.getObject(AppeCommandHandler.FILE_CONTENTS_KEY); 422dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("File contents=[" + contents + "]"); 423dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("File contents", ASCII_CONTENTS.getBytes(), contents); 424dfb59d50631968ab1a13002ea5421ece93169851chrismair } 425dfb59d50631968ab1a13002ea5421ece93169851chrismair 426dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testAbor() throws Exception { 427dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 428dfb59d50631968ab1a13002ea5421ece93169851chrismair 429dfb59d50631968ab1a13002ea5421ece93169851chrismair // ABOR 430dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("ABOR", ftpClient.abort()); 431dfb59d50631968ab1a13002ea5421ece93169851chrismair } 432dfb59d50631968ab1a13002ea5421ece93169851chrismair 433dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testPasv() throws Exception { 434dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 435dfb59d50631968ab1a13002ea5421ece93169851chrismair 436dfb59d50631968ab1a13002ea5421ece93169851chrismair // PASV 437dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.enterLocalPassiveMode(); 438dfb59d50631968ab1a13002ea5421ece93169851chrismair // no reply code; the PASV command is sent only when the data connection is opened 439dfb59d50631968ab1a13002ea5421ece93169851chrismair } 440dfb59d50631968ab1a13002ea5421ece93169851chrismair 441dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testMode() throws Exception { 442dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 443dfb59d50631968ab1a13002ea5421ece93169851chrismair 444dfb59d50631968ab1a13002ea5421ece93169851chrismair // MODE 445dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 446dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to MODE", success); 447dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("setFileTransferMode", 200); 448dfb59d50631968ab1a13002ea5421ece93169851chrismair } 449dfb59d50631968ab1a13002ea5421ece93169851chrismair 450dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testStru() throws Exception { 451dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 452dfb59d50631968ab1a13002ea5421ece93169851chrismair 453dfb59d50631968ab1a13002ea5421ece93169851chrismair // STRU 454dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean success = ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 455dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("Unable to STRU", success); 456dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("setFileStructure", 200); 457dfb59d50631968ab1a13002ea5421ece93169851chrismair } 458dfb59d50631968ab1a13002ea5421ece93169851chrismair 459dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSimpleCompositeCommandHandler() throws Exception { 460dfb59d50631968ab1a13002ea5421ece93169851chrismair // Replace CWD CommandHandler with a SimpleCompositeCommandHandler 461dfb59d50631968ab1a13002ea5421ece93169851chrismair CommandHandler commandHandler1 = new StaticReplyCommandHandler(500); 462dfb59d50631968ab1a13002ea5421ece93169851chrismair CommandHandler commandHandler2 = new CwdCommandHandler(); 463dfb59d50631968ab1a13002ea5421ece93169851chrismair SimpleCompositeCommandHandler simpleCompositeCommandHandler = new SimpleCompositeCommandHandler(); 464dfb59d50631968ab1a13002ea5421ece93169851chrismair simpleCompositeCommandHandler.addCommandHandler(commandHandler1); 465dfb59d50631968ab1a13002ea5421ece93169851chrismair simpleCompositeCommandHandler.addCommandHandler(commandHandler2); 466dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.setCommandHandler("CWD", simpleCompositeCommandHandler); 467dfb59d50631968ab1a13002ea5421ece93169851chrismair 468dfb59d50631968ab1a13002ea5421ece93169851chrismair // Connect 469dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 470dfb59d50631968ab1a13002ea5421ece93169851chrismair 471dfb59d50631968ab1a13002ea5421ece93169851chrismair // CWD 472dfb59d50631968ab1a13002ea5421ece93169851chrismair assertFalse("first", ftpClient.changeWorkingDirectory("dir1/dir2")); 473dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("first", ftpClient.changeWorkingDirectory("dir1/dir2")); 474dfb59d50631968ab1a13002ea5421ece93169851chrismair } 475dfb59d50631968ab1a13002ea5421ece93169851chrismair 476dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSite() throws Exception { 477dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 478dfb59d50631968ab1a13002ea5421ece93169851chrismair 479dfb59d50631968ab1a13002ea5421ece93169851chrismair // SITE 480dfb59d50631968ab1a13002ea5421ece93169851chrismair int replyCode = ftpClient.site("parameters,1,2,3"); 481dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("SITE", 200, replyCode); 482dfb59d50631968ab1a13002ea5421ece93169851chrismair } 483dfb59d50631968ab1a13002ea5421ece93169851chrismair 484dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testSmnt() throws Exception { 485dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 486dfb59d50631968ab1a13002ea5421ece93169851chrismair 487dfb59d50631968ab1a13002ea5421ece93169851chrismair // SMNT 488dfb59d50631968ab1a13002ea5421ece93169851chrismair assertTrue("SMNT", ftpClient.structureMount("dir1/dir2")); 489dfb59d50631968ab1a13002ea5421ece93169851chrismair verifyReplyCode("structureMount", 250); 490dfb59d50631968ab1a13002ea5421ece93169851chrismair } 491dfb59d50631968ab1a13002ea5421ece93169851chrismair 492dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testRein() throws Exception { 493dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 494dfb59d50631968ab1a13002ea5421ece93169851chrismair 495dfb59d50631968ab1a13002ea5421ece93169851chrismair // REIN 496dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("REIN", 220, ftpClient.rein()); 497dfb59d50631968ab1a13002ea5421ece93169851chrismair } 498dfb59d50631968ab1a13002ea5421ece93169851chrismair 499dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 500dfb59d50631968ab1a13002ea5421ece93169851chrismair * Test that command names in lowercase or mixed upper/lower case are accepted 501dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 502dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testCommandNamesInLowerOrMixedCase() throws Exception { 503dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 504dfb59d50631968ab1a13002ea5421ece93169851chrismair 505dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("rein", 220, ftpClient.sendCommand("rein")); 506dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("rEIn", 220, ftpClient.sendCommand("rEIn")); 507dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("reiN", 220, ftpClient.sendCommand("reiN")); 508dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("Rein", 220, ftpClient.sendCommand("Rein")); 509dfb59d50631968ab1a13002ea5421ece93169851chrismair } 510dfb59d50631968ab1a13002ea5421ece93169851chrismair 511dfb59d50631968ab1a13002ea5421ece93169851chrismair public void testUnrecognizedCommand() throws Exception { 512dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClientConnect(); 513dfb59d50631968ab1a13002ea5421ece93169851chrismair 514dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("Unrecognized:XXXX", 502, ftpClient.sendCommand("XXXX")); 515dfb59d50631968ab1a13002ea5421ece93169851chrismair } 516dfb59d50631968ab1a13002ea5421ece93169851chrismair 517dfb59d50631968ab1a13002ea5421ece93169851chrismair // ------------------------------------------------------------------------- 518dfb59d50631968ab1a13002ea5421ece93169851chrismair // Test setup and tear-down 519dfb59d50631968ab1a13002ea5421ece93169851chrismair // ------------------------------------------------------------------------- 520dfb59d50631968ab1a13002ea5421ece93169851chrismair 521dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 522dfb59d50631968ab1a13002ea5421ece93169851chrismair * Perform initialization before each test 523dfb59d50631968ab1a13002ea5421ece93169851chrismair * 524dfb59d50631968ab1a13002ea5421ece93169851chrismair * @see org.mockftpserver.test.AbstractTestCase#setUp() 525dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 526dfb59d50631968ab1a13002ea5421ece93169851chrismair protected void setUp() throws Exception { 527dfb59d50631968ab1a13002ea5421ece93169851chrismair super.setUp(); 528dfb59d50631968ab1a13002ea5421ece93169851chrismair 529dfb59d50631968ab1a13002ea5421ece93169851chrismair for (int i = 0; i < BINARY_CONTENTS.length; i++) { 530dfb59d50631968ab1a13002ea5421ece93169851chrismair BINARY_CONTENTS[i] = (byte) i; 531dfb59d50631968ab1a13002ea5421ece93169851chrismair } 532dfb59d50631968ab1a13002ea5421ece93169851chrismair 533dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer = new StubFtpServer(); 534dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.setServerControlPort(PortTestUtil.getFtpServerControlPort()); 535dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.start(); 536dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient = new FTPClient(); 537dfb59d50631968ab1a13002ea5421ece93169851chrismair retrCommandHandler = (RetrCommandHandler) stubFtpServer.getCommandHandler(CommandNames.RETR); 538dfb59d50631968ab1a13002ea5421ece93169851chrismair storCommandHandler = (StorCommandHandler) stubFtpServer.getCommandHandler(CommandNames.STOR); 539dfb59d50631968ab1a13002ea5421ece93169851chrismair } 540dfb59d50631968ab1a13002ea5421ece93169851chrismair 541dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 542dfb59d50631968ab1a13002ea5421ece93169851chrismair * Perform cleanup after each test 543dfb59d50631968ab1a13002ea5421ece93169851chrismair * 544dfb59d50631968ab1a13002ea5421ece93169851chrismair * @see org.mockftpserver.test.AbstractTestCase#tearDown() 545dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 546dfb59d50631968ab1a13002ea5421ece93169851chrismair protected void tearDown() throws Exception { 547dfb59d50631968ab1a13002ea5421ece93169851chrismair super.tearDown(); 548dfb59d50631968ab1a13002ea5421ece93169851chrismair stubFtpServer.stop(); 549dfb59d50631968ab1a13002ea5421ece93169851chrismair } 550dfb59d50631968ab1a13002ea5421ece93169851chrismair 551dfb59d50631968ab1a13002ea5421ece93169851chrismair // ------------------------------------------------------------------------- 552dfb59d50631968ab1a13002ea5421ece93169851chrismair // Internal Helper Methods 553dfb59d50631968ab1a13002ea5421ece93169851chrismair // ------------------------------------------------------------------------- 554dfb59d50631968ab1a13002ea5421ece93169851chrismair 555dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 556dfb59d50631968ab1a13002ea5421ece93169851chrismair * Connect to the server from the FTPClient 557dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 558dfb59d50631968ab1a13002ea5421ece93169851chrismair private void ftpClientConnect() throws IOException { 559dfb59d50631968ab1a13002ea5421ece93169851chrismair ftpClient.connect(SERVER, PortTestUtil.getFtpServerControlPort()); 560dfb59d50631968ab1a13002ea5421ece93169851chrismair } 561dfb59d50631968ab1a13002ea5421ece93169851chrismair 562dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 563dfb59d50631968ab1a13002ea5421ece93169851chrismair * Assert that the FtpClient reply code is equal to the expected value 564dfb59d50631968ab1a13002ea5421ece93169851chrismair * 565dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param operation - the description of the operation performed; used in the error message 566dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param expectedReplyCode - the expected FtpClient reply code 567dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 568dfb59d50631968ab1a13002ea5421ece93169851chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 569dfb59d50631968ab1a13002ea5421ece93169851chrismair int replyCode = ftpClient.getReplyCode(); 570dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode); 571dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode); 572dfb59d50631968ab1a13002ea5421ece93169851chrismair } 573dfb59d50631968ab1a13002ea5421ece93169851chrismair 574dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 575dfb59d50631968ab1a13002ea5421ece93169851chrismair * Verify that the FTPFile has the specified properties 576dfb59d50631968ab1a13002ea5421ece93169851chrismair * 577dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param ftpFile - the FTPFile to verify 578dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param type - the expected file type 579dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param name - the expected file name 580dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param size - the expected file size (will be zero for a directory) 581dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 582dfb59d50631968ab1a13002ea5421ece93169851chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 583dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info(ftpFile); 584dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()); 585dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()); 586dfb59d50631968ab1a13002ea5421ece93169851chrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()); 587dfb59d50631968ab1a13002ea5421ece93169851chrismair } 588dfb59d50631968ab1a13002ea5421ece93169851chrismair 589dfb59d50631968ab1a13002ea5421ece93169851chrismair} 590