FakeFtpServerIntegrationTest.groovy revision c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabf
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 225c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.fake.filesystem.FakeWindowsFileSystem 2347fb67a4e600f339064de4c08f10279accc95e92chrismairimport org.mockftpserver.fake.filesystem.FileEntry 245c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.fake.filesystem.FileSystem 255c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.fake.user.UserAccount 265c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.AbstractGroovyTest 275c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.PortTestUtil 285c17f34e1a613c319d355112f8298c20015ef7f2chrismair 295c17f34e1a613c319d355112f8298c20015ef7f2chrismair/** 305c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Integration tests for FakeFtpServer. 315c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 325c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @version $Revision: 54 $ - $Date: 2008-05-13 21:54:53 -0400 (Tue, 13 May 2008) $ 335c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 345c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @author Chris Mair 355c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 365c17f34e1a613c319d355112f8298c20015ef7f2chrismairclass FakeFtpServerIntegrationTest extends AbstractGroovyTest { 375c17f34e1a613c319d355112f8298c20015ef7f2chrismair 38aa72126634232b9f007e110204e081807257cd4fchrismair static final SERVER = "localhost" 39aa72126634232b9f007e110204e081807257cd4fchrismair static final USERNAME = "user123" 40aa72126634232b9f007e110204e081807257cd4fchrismair static final PASSWORD = "password" 41fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair static final ACCOUNT = "account123" 42aa72126634232b9f007e110204e081807257cd4fchrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 43aa72126634232b9f007e110204e081807257cd4fchrismair static final BINARY_DATA = new byte[256] 445e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final ROOT_DIR = "c:/" 455e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final HOME_DIR = p(ROOT_DIR, "home") 46741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR_NAME = 'sub' 47aa72126634232b9f007e110204e081807257cd4fchrismair static final SUBDIR_NAME2 = "archive" 48741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 49aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME1 = "abc.txt" 50aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME2 = "SomeOtherFile.xml" 51741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 52eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair static final SYSTEM_NAME = "WINDOWS" 535c17f34e1a613c319d355112f8298c20015ef7f2chrismair 54aa72126634232b9f007e110204e081807257cd4fchrismair private FakeFtpServer ftpServer 55aa72126634232b9f007e110204e081807257cd4fchrismair private FTPClient ftpClient 565c17f34e1a613c319d355112f8298c20015ef7f2chrismair private FileSystem fileSystem 57fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair private UserAccount userAccount 585c17f34e1a613c319d355112f8298c20015ef7f2chrismair 595c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 605c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Tests 615c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 625c17f34e1a613c319d355112f8298c20015ef7f2chrismair 635aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAbor() { 645aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 655aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.abort() 665aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ABOR", 226) 675aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 69fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testAcct() { 70fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 71fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.acct(ACCOUNT) == 230 72fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 73fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAllo() { 755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.allocate(99) 775aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ALLO", 200) 785aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 795aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 805aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAppe() { 815aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def ORIGINAL_CONTENTS = '123 456 789' 825aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 835aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 845aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 855aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 865aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("Put File for local path [$FILE1]") 875aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 885aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.appendFile(FILE1, inputStream) 895aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def contents = fileSystem.createInputStream(FILE1).text 905aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("File contents=[" + contents + "]") 915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 945e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair void testCdup() { 955e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair ftpClientConnectAndLogin() 965e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair assert ftpClient.changeToParentDirectory() 975e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair verifyReplyCode("changeToParentDirectory", 200) 985e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair } 995e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair 100741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testCwd() { 101741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 102aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 103aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("changeWorkingDirectory", 250) 104741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 105741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 106741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testDele() { 107741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createFile(FILE1) 108741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 109741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 110aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.deleteFile(FILENAME1) 111aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("deleteFile", 250) 1125f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(FILENAME1) 1135f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1145f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1155f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testHelp() { 1165f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpServer.helpText = [a: 'aaa', '': 'default'] 1175f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnect() 1185f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1195f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair String help = ftpClient.listHelp() 1205f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('default') 1215f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1225f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1235f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('a') 1245f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('aaa') 1255f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1265f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1275f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('bad') 1285f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('bad') 1295f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 130741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 131741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 13247fb67a4e600f339064de4c08f10279accc95e92chrismair void testList() { 13347fb67a4e600f339064de4c08f10279accc95e92chrismair def LAST_MODIFIED = new Date() 134aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 135aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 13647fb67a4e600f339064de4c08f10279accc95e92chrismair 13747fb67a4e600f339064de4c08f10279accc95e92chrismair ftpClientConnectAndLogin() 13847fb67a4e600f339064de4c08f10279accc95e92chrismair 13947fb67a4e600f339064de4c08f10279accc95e92chrismair FTPFile[] files = ftpClient.listFiles(SUBDIR) 1405f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert files.length == 2 141aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 142aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 14347fb67a4e600f339064de4c08f10279accc95e92chrismair verifyReplyCode("list", 226) 14447fb67a4e600f339064de4c08f10279accc95e92chrismair } 1455c17f34e1a613c319d355112f8298c20015ef7f2chrismair 146fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin() { 147fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 148fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD") 149fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD) 150fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD", 230) 151fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 152fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 153fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin_WithAccount() { 154fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount.accountRequiredForLogin = true 155fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 156fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD with $ACCOUNT") 157fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD, ACCOUNT) 158fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD with $ACCOUNT", 230) 159fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 160fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 1614974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair void testMkd() { 1624974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair ftpClientConnectAndLogin() 1634974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1644974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair def DIR = p(HOME_DIR, 'NewDir') 1654974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert ftpClient.makeDirectory(DIR) 1664974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair verifyReplyCode("makeDirectory", 257) 1674974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert fileSystem.isDirectory(DIR) 1684974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair } 1694974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1705aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testMode() { 1715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 1735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("MODE", 200) 1745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 1755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 176aa72126634232b9f007e110204e081807257cd4fchrismair void testNlst() { 177aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1))) 178aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 179aa72126634232b9f007e110204e081807257cd4fchrismair 180aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 181aa72126634232b9f007e110204e081807257cd4fchrismair 182aa72126634232b9f007e110204e081807257cd4fchrismair String[] filenames = ftpClient.listNames(SUBDIR) 1835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filenames == [FILENAME1, SUBDIR_NAME2] 184aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("listNames", 226) 185aa72126634232b9f007e110204e081807257cd4fchrismair } 186aa72126634232b9f007e110204e081807257cd4fchrismair 1875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testNoop() { 1885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 1895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.sendNoOp() 1905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("NOOP", 200) 1915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testPasv_Nlst() { 1945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1))) 1955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME2))) 1965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 1975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1985aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClient.enterLocalPassiveMode(); 1995aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 2005aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair String[] filenames = ftpClient.listNames(SUBDIR) 2015aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert filenames == [FILENAME1, FILENAME2] 2025aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("listNames", 226) 2035aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2045aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 205fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testPwd() { 206fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 207fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 208fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("printWorkingDirectory", 257) 209fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 210fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 211fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testQuit() { 212fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 213fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClient.quit() 214fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("quit", 221) 215fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 216fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 2175aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testRein() { 2185aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2195aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.rein() == 220 2205aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.cdup() == 530 // now logged out 2215aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2225aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 223c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair void testRest() { 224c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair ftpClientConnectAndLogin() 225c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair assert ftpClient.rest("marker") == 350 226c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair } 227c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair 228aa72126634232b9f007e110204e081807257cd4fchrismair void testRetr() { 229aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: FILE1, contents: ASCII_DATA)) 230aa72126634232b9f007e110204e081807257cd4fchrismair 231aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 232aa72126634232b9f007e110204e081807257cd4fchrismair 233aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Get File for remotePath [$FILE1]") 234aa72126634232b9f007e110204e081807257cd4fchrismair def outputStream = new ByteArrayOutputStream() 235aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.retrieveFile(FILE1, outputStream) 236aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[${outputStream.toString()}]") 237aa72126634232b9f007e110204e081807257cd4fchrismair assert outputStream.toString() == ASCII_DATA 238aa72126634232b9f007e110204e081807257cd4fchrismair } 239aa72126634232b9f007e110204e081807257cd4fchrismair 240eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRmd() { 241eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 242eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 243eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.removeDirectory(SUBDIR) 244eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("removeDirectory", 250) 2455f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(SUBDIR) 246eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 247eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 248eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRename() { // RNFR and RNTO 249eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair fileSystem.createFile(FILE1) 250eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 251eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 252eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 253eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 254eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("rename", 250) 255eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert !fileSystem.exists(FILE1) 256eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert fileSystem.exists(FILE1 + "NEW") 257eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 258eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 2595f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testSite() { 2605f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2615f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.site("parameters,1,2,3") == 200 2625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2635f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 264aa72126634232b9f007e110204e081807257cd4fchrismair void testStor() { 265aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 266aa72126634232b9f007e110204e081807257cd4fchrismair 267aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Put File for local path [$FILE1]") 268aa72126634232b9f007e110204e081807257cd4fchrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 269aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.storeFile(FILE1, inputStream) 270aa72126634232b9f007e110204e081807257cd4fchrismair def contents = fileSystem.createInputStream(FILE1).text 271aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[" + contents + "]") 272aa72126634232b9f007e110204e081807257cd4fchrismair assert contents == ASCII_DATA 273aa72126634232b9f007e110204e081807257cd4fchrismair } 274aa72126634232b9f007e110204e081807257cd4fchrismair 2755f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testStou() { 2765f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2775f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2785f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 2795f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 2805f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2815f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def names = fileSystem.listNames(HOME_DIR) 2825f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 2835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filename 2845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def contents = fileSystem.createInputStream(p(HOME_DIR, filename)).text 2865f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair LOG.info("File contents=[" + contents + "]") 2875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert contents == ASCII_DATA 2885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2905aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testStru() { 2915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 2935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("STRU", 200) 2945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 296eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testSyst() { 297eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 298eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 299eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair def systemName = ftpClient.getSystemName() 300eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair LOG.info("system name = [$systemName]") 301eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 3025f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("getSystemName", 215) 303eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 304eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 305c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair void testType() { 306c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair ftpClientConnectAndLogin() 307c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair assert ftpClient.type(FTP.ASCII_FILE_TYPE) 308c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair verifyReplyCode("TYPE", 200) 309c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair } 310c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair 3115c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3125c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Test setup and tear-down 3135c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3145c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3155c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3165c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform initialization before each test 3175c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 3185c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3195c17f34e1a613c319d355112f8298c20015ef7f2chrismair void setUp() { 320aa72126634232b9f007e110204e081807257cd4fchrismair super.setUp() 3215c17f34e1a613c319d355112f8298c20015ef7f2chrismair 322aa72126634232b9f007e110204e081807257cd4fchrismair for (int i = 0; i < BINARY_DATA.length; i++) { 323aa72126634232b9f007e110204e081807257cd4fchrismair BINARY_DATA[i] = (byte) i 3245c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3255c17f34e1a613c319d355112f8298c20015ef7f2chrismair 326aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer = new FakeFtpServer() 327eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 328eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.systemName = SYSTEM_NAME 3295c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3305c17f34e1a613c319d355112f8298c20015ef7f2chrismair fileSystem = new FakeWindowsFileSystem() 331741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createParentDirectoriesAutomatically = true 332741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createDirectory(SUBDIR) 3335c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.fileSystem = fileSystem 3345c17f34e1a613c319d355112f8298c20015ef7f2chrismair 335fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount = new UserAccount(username: USERNAME, password: PASSWORD, 336741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair passwordRequiredForLogin: true, homeDirectory: HOME_DIR) 3375c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.userAccounts[USERNAME] = userAccount 3385c17f34e1a613c319d355112f8298c20015ef7f2chrismair 339aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.start() 340aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient = new FTPClient() 3415c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3425c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3435c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3445c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform cleanup after each test 3455c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 3465c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3475c17f34e1a613c319d355112f8298c20015ef7f2chrismair void tearDown() { 348aa72126634232b9f007e110204e081807257cd4fchrismair super.tearDown() 349aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.stop() 3505c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3515c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3525c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3535c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Internal Helper Methods 3545c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3555c17f34e1a613c319d355112f8298c20015ef7f2chrismair 356741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private ftpClientConnectAndLogin() { 357741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 358741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 359741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 360741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3615c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3625c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Connect to the server from the FTPClient 3635c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 364741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void ftpClientConnect() { 365741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair def port = PortTestUtil.getFtpServerControlPort() 366741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair LOG.info("Conecting to $SERVER on port $port") 367aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient.connect(SERVER, port) 368741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("connect", 220) 3695c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3705c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3715c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3725c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Assert that the FtpClient reply code is equal to the expected value 3735c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 374aa72126634232b9f007e110204e081807257cd4fchrismair * @param operation - the description of the operation performed used in the error message 3755c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @param expectedReplyCode - the expected FtpClient reply code 3765c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3775c17f34e1a613c319d355112f8298c20015ef7f2chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 378aa72126634232b9f007e110204e081807257cd4fchrismair int replyCode = ftpClient.getReplyCode() 379aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 380aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 3815c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3825c17f34e1a613c319d355112f8298c20015ef7f2chrismair 383741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 384aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info(ftpFile) 385aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 386aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 387aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 388741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 389741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3905c17f34e1a613c319d355112f8298c20015ef7f2chrismair}