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