FakeFtpServerIntegrationTest.groovy revision c51130cfee05b7294599cc93125db801972d0746
15c17f34e1a613c319d355112f8298c20015ef7f2chrismair/* 25c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Copyright 2008 the original author or authors. 35c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 45c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 55c17f34e1a613c319d355112f8298c20015ef7f2chrismair * you may not use this file except in compliance with the License. 65c17f34e1a613c319d355112f8298c20015ef7f2chrismair * You may obtain a copy of the License at 75c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 85c17f34e1a613c319d355112f8298c20015ef7f2chrismair * http://www.apache.org/licenses/LICENSE-2.0 95c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 105c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Unless required by applicable law or agreed to in writing, software 115c17f34e1a613c319d355112f8298c20015ef7f2chrismair * distributed under the License is distributed on an "AS IS" BASIS, 125c17f34e1a613c319d355112f8298c20015ef7f2chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c17f34e1a613c319d355112f8298c20015ef7f2chrismair * See the License for the specific language governing permissions and 145c17f34e1a613c319d355112f8298c20015ef7f2chrismair * limitations under the License. 155c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 165c17f34e1a613c319d355112f8298c20015ef7f2chrismairpackage org.mockftpserver.fake.server 175c17f34e1a613c319d355112f8298c20015ef7f2chrismair 185aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismairimport org.apache.commons.net.ftp.FTP 195c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.apache.commons.net.ftp.FTPClient 20741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismairimport org.apache.commons.net.ftp.FTPFile 2147fb67a4e600f339064de4c08f10279accc95e92chrismairimport org.mockftpserver.fake.filesystem.DirectoryEntry 2247fb67a4e600f339064de4c08f10279accc95e92chrismairimport org.mockftpserver.fake.filesystem.FileEntry 235c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.fake.filesystem.FileSystem 249e1053c079532bc7e47012d63f8d9d7246df4e96chrismairimport org.mockftpserver.fake.filesystem.WindowsFakeFileSystem 255c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.fake.user.UserAccount 265c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.AbstractGroovyTest 275c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.PortTestUtil 285c17f34e1a613c319d355112f8298c20015ef7f2chrismair 29c51130cfee05b7294599cc93125db801972d0746chrismair 305c17f34e1a613c319d355112f8298c20015ef7f2chrismair/** 315c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Integration tests for FakeFtpServer. 325c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 335c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @version $Revision: 54 $ - $Date: 2008-05-13 21:54:53 -0400 (Tue, 13 May 2008) $ 345c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 355c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @author Chris Mair 365c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 375c17f34e1a613c319d355112f8298c20015ef7f2chrismairclass FakeFtpServerIntegrationTest extends AbstractGroovyTest { 385c17f34e1a613c319d355112f8298c20015ef7f2chrismair 39aa72126634232b9f007e110204e081807257cd4fchrismair static final SERVER = "localhost" 40aa72126634232b9f007e110204e081807257cd4fchrismair static final USERNAME = "user123" 41aa72126634232b9f007e110204e081807257cd4fchrismair static final PASSWORD = "password" 42fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair static final ACCOUNT = "account123" 43aa72126634232b9f007e110204e081807257cd4fchrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 44aa72126634232b9f007e110204e081807257cd4fchrismair static final BINARY_DATA = new byte[256] 455e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final ROOT_DIR = "c:/" 465e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final HOME_DIR = p(ROOT_DIR, "home") 47741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR_NAME = 'sub' 48aa72126634232b9f007e110204e081807257cd4fchrismair static final SUBDIR_NAME2 = "archive" 49741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 50aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME1 = "abc.txt" 51aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME2 = "SomeOtherFile.xml" 52741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 53eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair static final SYSTEM_NAME = "WINDOWS" 545c17f34e1a613c319d355112f8298c20015ef7f2chrismair 55aa72126634232b9f007e110204e081807257cd4fchrismair private FakeFtpServer ftpServer 56aa72126634232b9f007e110204e081807257cd4fchrismair private FTPClient ftpClient 575c17f34e1a613c319d355112f8298c20015ef7f2chrismair private FileSystem fileSystem 58fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair private UserAccount userAccount 595c17f34e1a613c319d355112f8298c20015ef7f2chrismair 605c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 615c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Tests 625c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 635c17f34e1a613c319d355112f8298c20015ef7f2chrismair 645aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAbor() { 655aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 665aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.abort() 675aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ABOR", 226) 685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 695aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 70fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testAcct() { 71fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 72fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.acct(ACCOUNT) == 230 73fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 74fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAllo() { 765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 775aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.allocate(99) 785aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ALLO", 200) 795aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 805aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 815aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAppe() { 825aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def ORIGINAL_CONTENTS = '123 456 789' 83ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 845aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 855aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 865aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 875aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("Put File for local path [$FILE1]") 885aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 895aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.appendFile(FILE1, inputStream) 90c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("File contents=[" + contents + "]") 925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 955e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair void testCdup() { 965e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair ftpClientConnectAndLogin() 975e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair assert ftpClient.changeToParentDirectory() 985e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair verifyReplyCode("changeToParentDirectory", 200) 995e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair } 1005e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair 101741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testCwd() { 102741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 103aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 104aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("changeWorkingDirectory", 250) 105741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 106741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 107741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testDele() { 108d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 109741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 110741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 111aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.deleteFile(FILENAME1) 112aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("deleteFile", 250) 1135f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(FILENAME1) 1145f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1155f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1165f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testHelp() { 1175f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpServer.helpText = [a: 'aaa', '': 'default'] 1185f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnect() 1195f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1205f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair String help = ftpClient.listHelp() 1215f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('default') 1225f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1235f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1245f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('a') 1255f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('aaa') 1265f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1275f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1285f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('bad') 1295f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('bad') 1305f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 131741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 132741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 13347fb67a4e600f339064de4c08f10279accc95e92chrismair void testList() { 13447fb67a4e600f339064de4c08f10279accc95e92chrismair def LAST_MODIFIED = new Date() 135ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 136ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 13747fb67a4e600f339064de4c08f10279accc95e92chrismair 13847fb67a4e600f339064de4c08f10279accc95e92chrismair ftpClientConnectAndLogin() 13947fb67a4e600f339064de4c08f10279accc95e92chrismair 14047fb67a4e600f339064de4c08f10279accc95e92chrismair FTPFile[] files = ftpClient.listFiles(SUBDIR) 1415f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert files.length == 2 142aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 143aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 14447fb67a4e600f339064de4c08f10279accc95e92chrismair verifyReplyCode("list", 226) 14547fb67a4e600f339064de4c08f10279accc95e92chrismair } 1465c17f34e1a613c319d355112f8298c20015ef7f2chrismair 147fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin() { 148fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 149fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD") 150fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD) 151fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD", 230) 152fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 153fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 154fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin_WithAccount() { 155fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount.accountRequiredForLogin = true 156fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 157fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD with $ACCOUNT") 158fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD, ACCOUNT) 159fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD with $ACCOUNT", 230) 160fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 161fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 1624974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair void testMkd() { 1634974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair ftpClientConnectAndLogin() 1644974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1654974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair def DIR = p(HOME_DIR, 'NewDir') 1664974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert ftpClient.makeDirectory(DIR) 1674974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair verifyReplyCode("makeDirectory", 257) 1684974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert fileSystem.isDirectory(DIR) 1694974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair } 1704974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testMode() { 1725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 1745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("MODE", 200) 1755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 1765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 177aa72126634232b9f007e110204e081807257cd4fchrismair void testNlst() { 178ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 179ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 180aa72126634232b9f007e110204e081807257cd4fchrismair 181aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 182aa72126634232b9f007e110204e081807257cd4fchrismair 183aa72126634232b9f007e110204e081807257cd4fchrismair String[] filenames = ftpClient.listNames(SUBDIR) 1845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filenames == [FILENAME1, SUBDIR_NAME2] 185aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("listNames", 226) 186aa72126634232b9f007e110204e081807257cd4fchrismair } 187aa72126634232b9f007e110204e081807257cd4fchrismair 1885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testNoop() { 1895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 1905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.sendNoOp() 1915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("NOOP", 200) 1925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1935f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testPasv_Nlst() { 195ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 196ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME2))) 1975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 1985aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1995aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClient.enterLocalPassiveMode(); 2005aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 2015aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair String[] filenames = ftpClient.listNames(SUBDIR) 2025aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert filenames == [FILENAME1, FILENAME2] 2035aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("listNames", 226) 2045aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2055aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 206fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testPwd() { 207fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 208fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 209fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("printWorkingDirectory", 257) 210fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 211fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 212fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testQuit() { 213fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 214fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClient.quit() 215fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("quit", 221) 216fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 217fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 2185aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testRein() { 2195aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2205aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.rein() == 220 2215aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.cdup() == 530 // now logged out 2225aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2235aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 224c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair void testRest() { 225c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair ftpClientConnectAndLogin() 226c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair assert ftpClient.rest("marker") == 350 227c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair } 228c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair 229aa72126634232b9f007e110204e081807257cd4fchrismair void testRetr() { 230ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ASCII_DATA)) 231aa72126634232b9f007e110204e081807257cd4fchrismair 232aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 233aa72126634232b9f007e110204e081807257cd4fchrismair 234aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Get File for remotePath [$FILE1]") 235aa72126634232b9f007e110204e081807257cd4fchrismair def outputStream = new ByteArrayOutputStream() 236aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.retrieveFile(FILE1, outputStream) 237aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[${outputStream.toString()}]") 238aa72126634232b9f007e110204e081807257cd4fchrismair assert outputStream.toString() == ASCII_DATA 239aa72126634232b9f007e110204e081807257cd4fchrismair } 240aa72126634232b9f007e110204e081807257cd4fchrismair 241eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRmd() { 242eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 243eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 244eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.removeDirectory(SUBDIR) 245eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("removeDirectory", 250) 2465f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(SUBDIR) 247eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 248eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 249eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRename() { // RNFR and RNTO 250d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 251eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 252eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 253eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 254eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 255eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("rename", 250) 256eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert !fileSystem.exists(FILE1) 257eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert fileSystem.exists(FILE1 + "NEW") 258eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 259eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 2605f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testSite() { 2615f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.site("parameters,1,2,3") == 200 2635f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2645f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 265aa72126634232b9f007e110204e081807257cd4fchrismair void testStor() { 266aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 267aa72126634232b9f007e110204e081807257cd4fchrismair 268aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Put File for local path [$FILE1]") 269aa72126634232b9f007e110204e081807257cd4fchrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 270aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.storeFile(FILE1, inputStream) 271c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 272aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[" + contents + "]") 273aa72126634232b9f007e110204e081807257cd4fchrismair assert contents == ASCII_DATA 274aa72126634232b9f007e110204e081807257cd4fchrismair } 275aa72126634232b9f007e110204e081807257cd4fchrismair 2765f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testStou() { 2775f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2785f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2795f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 2805f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 2815f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2825f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def names = fileSystem.listNames(HOME_DIR) 2835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 2845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filename 2855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 286c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(p(HOME_DIR, filename)).createInputStream().text 2875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair LOG.info("File contents=[" + contents + "]") 2885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert contents == ASCII_DATA 2895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testStru() { 2925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 2945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("STRU", 200) 2955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 297eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testSyst() { 298eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 299eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 300eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair def systemName = ftpClient.getSystemName() 301eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair LOG.info("system name = [$systemName]") 302eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 3035f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("getSystemName", 215) 304eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 305eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 306c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair void testType() { 307c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair ftpClientConnectAndLogin() 308c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair assert ftpClient.type(FTP.ASCII_FILE_TYPE) 309c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair verifyReplyCode("TYPE", 200) 310c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair } 311c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair 3125c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3135c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Test setup and tear-down 3145c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3155c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3165c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3175c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform initialization before each test 3185c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 3195c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3205c17f34e1a613c319d355112f8298c20015ef7f2chrismair void setUp() { 321aa72126634232b9f007e110204e081807257cd4fchrismair super.setUp() 3225c17f34e1a613c319d355112f8298c20015ef7f2chrismair 323aa72126634232b9f007e110204e081807257cd4fchrismair for (int i = 0; i < BINARY_DATA.length; i++) { 324aa72126634232b9f007e110204e081807257cd4fchrismair BINARY_DATA[i] = (byte) i 3255c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3265c17f34e1a613c319d355112f8298c20015ef7f2chrismair 327aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer = new FakeFtpServer() 328eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 329eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.systemName = SYSTEM_NAME 3305c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3319e1053c079532bc7e47012d63f8d9d7246df4e96chrismair fileSystem = new WindowsFakeFileSystem() 332741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createParentDirectoriesAutomatically = true 333d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new DirectoryEntry(SUBDIR)) 3345c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.fileSystem = fileSystem 3355c17f34e1a613c319d355112f8298c20015ef7f2chrismair 336fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount = new UserAccount(username: USERNAME, password: PASSWORD, 337741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair passwordRequiredForLogin: true, homeDirectory: HOME_DIR) 3385c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.userAccounts[USERNAME] = userAccount 3395c17f34e1a613c319d355112f8298c20015ef7f2chrismair 340aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.start() 341aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient = new FTPClient() 3425c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3435c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3445c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3455c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform cleanup after each test 3465c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 3475c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3485c17f34e1a613c319d355112f8298c20015ef7f2chrismair void tearDown() { 349aa72126634232b9f007e110204e081807257cd4fchrismair super.tearDown() 350aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.stop() 3515c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3525c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3535c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3545c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Internal Helper Methods 3555c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3565c17f34e1a613c319d355112f8298c20015ef7f2chrismair 357741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private ftpClientConnectAndLogin() { 358741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 359741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 360741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 361741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3625c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3635c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Connect to the server from the FTPClient 3645c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 365741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void ftpClientConnect() { 366741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair def port = PortTestUtil.getFtpServerControlPort() 367741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair LOG.info("Conecting to $SERVER on port $port") 368aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient.connect(SERVER, port) 369741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("connect", 220) 3705c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3715c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3725c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3735c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Assert that the FtpClient reply code is equal to the expected value 3745c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 375aa72126634232b9f007e110204e081807257cd4fchrismair * @param operation - the description of the operation performed used in the error message 3765c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @param expectedReplyCode - the expected FtpClient reply code 3775c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3785c17f34e1a613c319d355112f8298c20015ef7f2chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 379aa72126634232b9f007e110204e081807257cd4fchrismair int replyCode = ftpClient.getReplyCode() 380aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 381aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 3825c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3835c17f34e1a613c319d355112f8298c20015ef7f2chrismair 384741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 385aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info(ftpFile) 386aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 387aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 388aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 389741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 390741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3915c17f34e1a613c319d355112f8298c20015ef7f2chrismair}