1b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/* 2b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Copyright 2008 the original author or authors. 3b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 4b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * you may not use this file except in compliance with the License. 6b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * You may obtain a copy of the License at 7b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 8b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * http://www.apache.org/licenses/LICENSE-2.0 9b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 10b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Unless required by applicable law or agreed to in writing, software 11b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * See the License for the specific language governing permissions and 14b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * limitations under the License. 15b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 16b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpackage org.mockftpserver.fake 17b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 18b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.apache.commons.net.ftp.FTP 19b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.apache.commons.net.ftp.FTPClient 20b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.apache.commons.net.ftp.FTPFile 21b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.core.command.CommandNames 22b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.core.command.StaticReplyCommandHandler 23b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.FakeFtpServer 24b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.UserAccount 25b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.DirectoryEntry 26b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.FileEntry 27b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.FileSystem 28b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.UnixFakeFileSystem 29b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.WindowsFakeFileSystem 30b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.stub.command.CwdCommandHandler 31b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.test.AbstractGroovyTest 32b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.test.PortTestUtil 33b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 34b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/** 35b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Integration tests for FakeFtpServer. 36b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 37b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @version $Revision$ - $Date$ 38b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 39b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @author Chris Mair 40b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 41b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairclass FakeFtpServerIntegrationTest extends AbstractGroovyTest { 42b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 43b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final SERVER = "localhost" 44b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final USERNAME = "user123" 45b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final PASSWORD = "password" 46b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final ACCOUNT = "account123" 47b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 48b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final BINARY_DATA = new byte[256] 49b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final ROOT_DIR = "c:/" 50b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final HOME_DIR = p(ROOT_DIR, "home") 51b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final SUBDIR_NAME = 'sub' 52b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final SUBDIR_NAME2 = "archive" 53b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 54b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final FILENAME1 = "abc.txt" 55b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final FILENAME2 = "SomeOtherFile.xml" 56b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 57b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair static final SYSTEM_NAME = "WINDOWS" 58b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 59b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private FakeFtpServer ftpServer 60b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private FTPClient ftpClient 61b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private FileSystem fileSystem 62b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private UserAccount userAccount 63b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 64b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair //------------------------------------------------------------------------- 65b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Tests 66b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair //------------------------------------------------------------------------- 67b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 68b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testAbor() { 69b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 70b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.abort() 71b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("ABOR", 226) 72b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 73b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 74b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testAcct() { 75b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 76b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.acct(ACCOUNT) == 230 77b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 78b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 79b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testAllo() { 80b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 81b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.allocate(99) 82b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("ALLO", 200) 83b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 84b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 85b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testAppe() { 86b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def ORIGINAL_CONTENTS = '123 456 789' 87b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 88b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 89b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 90b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 91b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Put File for local path [$FILE1]") 92b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 93b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.appendFile(FILE1, inputStream) 94b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 95b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("File contents=[" + contents + "]") 96b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 97b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 98b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 99b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testCdup() { 100b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 101b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.changeToParentDirectory() 102b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("changeToParentDirectory", 200) 103b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 104b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 105b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testCwd() { 106b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 107b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 108b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("changeWorkingDirectory", 250) 109b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 110b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 111b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testCwd_UseStaticReplyCommandHandler() { 112b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair final int REPLY_CODE = 500; 113b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair StaticReplyCommandHandler cwdCommandHandler = new StaticReplyCommandHandler(REPLY_CODE); 114b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 115b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 116b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 117b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 118b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 119b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 120b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 121b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testCwd_UseStubCommandHandler() { 122b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair final int REPLY_CODE = 502; 123b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair CwdCommandHandler cwdCommandHandler = new CwdCommandHandler(); // Stub command handler 124b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair cwdCommandHandler.setReplyCode(REPLY_CODE); 125b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 126b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 127b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 128b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 129b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 130b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert cwdCommandHandler.getInvocation(0) 131b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 132b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 133b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testDele() { 134b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(FILE1)) 135b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 136b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 137b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.deleteFile(FILENAME1) 138b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("deleteFile", 250) 139b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert !fileSystem.exists(FILENAME1) 140b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 141b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 142b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testFeat_UseStaticReplyCommandHandler() { 143b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // The FEAT command is not supported out of the box 144b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair StaticReplyCommandHandler featCommandHandler = new StaticReplyCommandHandler(211, "No Features"); 145b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.setCommandHandler("FEAT", featCommandHandler); 146b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 147b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 148b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.sendCommand("FEAT") == 211 149b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 150b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 151b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testHelp() { 152b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.helpText = [a: 'aaa', '': 'default'] 153b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnect() 154b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 155b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair String help = ftpClient.listHelp() 156b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert help.contains('default') 157b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("listHelp", 214) 158b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 159b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair help = ftpClient.listHelp('a') 160b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert help.contains('aaa') 161b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("listHelp", 214) 162b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 163b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair help = ftpClient.listHelp('bad') 164b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert help.contains('bad') 165b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("listHelp", 214) 166b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 167b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 168b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testList() { 169b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def LAST_MODIFIED = new Date() 170b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 171b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 172b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 173b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 174b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 175b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair FTPFile[] files = ftpClient.listFiles(SUBDIR) 176b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert files.length == 2 177b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 178b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 179b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("list", 226) 180b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 181b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 182b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testList_Unix() { 183b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.systemName = 'UNIX' 184b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair userAccount.homeDirectory = '/' 185b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 186b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def unixFileSystem = new UnixFakeFileSystem() 187b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair unixFileSystem.createParentDirectoriesAutomatically = true 188b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair unixFileSystem.add(new DirectoryEntry('/')) 189b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.fileSystem = unixFileSystem 190b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 191b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def LAST_MODIFIED = new Date() 192b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair unixFileSystem.add(new FileEntry(path: p('/', FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 193b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair unixFileSystem.add(new DirectoryEntry(path: p('/', SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 194b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 195b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 196b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 197b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair FTPFile[] files = ftpClient.listFiles('/') 198b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert files.length == 2 199b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyFTPFile(files[0], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 200b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyFTPFile(files[1], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 201b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("list", 226) 202b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 203b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 204b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testLogin() { 205b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnect() 206b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Logging in as $USERNAME/$PASSWORD") 207b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.login(USERNAME, PASSWORD) 208b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("login with $USERNAME/$PASSWORD", 230) 209b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 210b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertTrue("isStarted", ftpServer.isStarted()); 211b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertFalse("isShutdown", ftpServer.isShutdown()); 212b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 213b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 214b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testLogin_WithAccount() { 215b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair userAccount.accountRequiredForLogin = true 216b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnect() 217b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Logging in as $USERNAME/$PASSWORD with $ACCOUNT") 218b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.login(USERNAME, PASSWORD, ACCOUNT) 219b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("login with $USERNAME/$PASSWORD with $ACCOUNT", 230) 220b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 221b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 222b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testMkd() { 223b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 224b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 225b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def DIR = p(HOME_DIR, 'NewDir') 226b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.makeDirectory(DIR) 227b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("makeDirectory", 257) 228b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert fileSystem.isDirectory(DIR) 229b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 230b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 231b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testMode() { 232b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 233b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 234b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("MODE", 200) 235b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 236b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 237b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testNlst() { 238b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 239b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 240b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 241b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 242b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 243b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair String[] filenames = ftpClient.listNames(SUBDIR) 244b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert filenames == [FILENAME1, SUBDIR_NAME2] 245b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("listNames", 226) 246b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 247b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 248b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testNoop() { 249b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 250b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.sendNoOp() 251b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("NOOP", 200) 252b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 253b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 254b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testPasv_Nlst() { 255b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 256b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME2))) 257b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 258b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 259b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClient.enterLocalPassiveMode(); 260b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 261b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair String[] filenames = ftpClient.listNames(SUBDIR) 262b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert filenames == [FILENAME1, FILENAME2] 263b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("listNames", 226) 264b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 265b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 266b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testPwd() { 267b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 268b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 269b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("printWorkingDirectory", 257) 270b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 271b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 272b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testQuit() { 273b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnect() 274b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClient.quit() 275b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("quit", 221) 276b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 277b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 278b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testRein() { 279b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 280b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.rein() == 220 281b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.cdup() == 530 // now logged out 282b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 283b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 284b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testRest() { 285b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 286b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.rest("marker") == 350 287b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 288b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 289b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testRetr() { 290b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ASCII_DATA)) 291b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 292b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 293b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 294b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Get File for remotePath [$FILE1]") 295b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def outputStream = new ByteArrayOutputStream() 296b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.retrieveFile(FILE1, outputStream) 297b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("File contents=[${outputStream.toString()}]") 298b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert outputStream.toString() == ASCII_DATA 299b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 300b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 301b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testRmd() { 302b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 303b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 304b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.removeDirectory(SUBDIR) 305b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("removeDirectory", 250) 306b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert !fileSystem.exists(SUBDIR) 307b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 308b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 309b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testRename() { // RNFR and RNTO 310b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new FileEntry(FILE1)) 311b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 312b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 313b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 314b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 315b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("rename", 250) 316b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert !fileSystem.exists(FILE1) 317b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert fileSystem.exists(FILE1 + "NEW") 318b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 319b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 320b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testSite() { 321b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 322b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.site("parameters,1,2,3") == 200 323b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 324b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 325b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testSmnt() { 326b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 327b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.smnt("dir") == 250 328b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 329b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 330b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testStat() { 331b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 332b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def status = ftpClient.getStatus() 333b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert status.contains('Connected') 334b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("stat", 211) 335b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 336b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 337b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testStor() { 338b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 339b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 340b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Put File for local path [$FILE1]") 341b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 342b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.storeFile(FILE1, inputStream) 343b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 344b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("File contents=[" + contents + "]") 345b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert contents == ASCII_DATA 346b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 347b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 348b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testStou() { 349b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 350b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 351b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 352b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 353b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 354b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def names = fileSystem.listNames(HOME_DIR) 355b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 356b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert filename 357b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 358b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def contents = fileSystem.getEntry(p(HOME_DIR, filename)).createInputStream().text 359b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("File contents=[" + contents + "]") 360b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert contents == ASCII_DATA 361b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 362b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 363b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testStru() { 364b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 365b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 366b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("STRU", 200) 367b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 368b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 369b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testSyst() { 370b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 371b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 372b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def systemName = ftpClient.getSystemName() 373b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("system name = [$systemName]") 374b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 375b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("getSystemName", 215) 376b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 377b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 378b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testType() { 379b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 380b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.type(FTP.ASCII_FILE_TYPE) 381b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("TYPE", 200) 382b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 383b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 384b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void testUnrecognizedCommand() { 385b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnectAndLogin() 386b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.sendCommand("XXX") == 502 387b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("XXX", 502) 388b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 389b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 390b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 391b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Test setup and tear-down 392b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 393b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 394b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 395b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Perform initialization before each test 396b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 397b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 398b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void setUp() { 399b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair super.setUp() 400b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 401b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair for (int i = 0; i < BINARY_DATA.length; i++) { 402b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair BINARY_DATA[i] = (byte) i 403b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 404b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 405b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer = new FakeFtpServer() 406b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 407b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.systemName = SYSTEM_NAME 408b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 409b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem = new WindowsFakeFileSystem() 410b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.createParentDirectoriesAutomatically = true 411b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair fileSystem.add(new DirectoryEntry(SUBDIR)) 412b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.fileSystem = fileSystem 413b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 414b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair userAccount = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 415b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.addUserAccount(userAccount) 416b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 417b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.start() 418b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClient = new FTPClient() 419b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 420b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 421b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 422b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Perform cleanup after each test 423b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 424b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 425b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair void tearDown() { 426b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair super.tearDown() 427b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpServer.stop() 428b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 429b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 430b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 431b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // Internal Helper Methods 432b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair // ------------------------------------------------------------------------- 433b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 434b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private ftpClientConnectAndLogin() { 435b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClientConnect() 436b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assert ftpClient.login(USERNAME, PASSWORD) 437b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 438b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 439b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 440b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Connect to the server from the FTPClient 441b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 442b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private void ftpClientConnect() { 443b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair def port = PortTestUtil.getFtpServerControlPort() 444b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Conecting to $SERVER on port $port") 445b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair ftpClient.connect(SERVER, port) 446b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair verifyReplyCode("connect", 220) 447b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 448b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 449b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair /** 450b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Assert that the FtpClient reply code is equal to the expected value 451b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * 452b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param operation - the description of the operation performed used in the error message 453b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @param expectedReplyCode - the expected FtpClient reply code 454b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */ 455b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 456b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair int replyCode = ftpClient.getReplyCode() 457b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 458b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 459b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 460b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 461b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 462b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair LOG.info(ftpFile) 463b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 464b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 465b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 466b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair } 467b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair 468b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair}