FakeFtpServerIntegrationTest.groovy revision 75520503341f870a8d2a27e0a82cca14f8aa6a4b
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 */ 16bd576ae311a45a994ae6b457fb2e5bb0ffe0d6b5chrismairpackage org.mockftpserver.fake 175c17f34e1a613c319d355112f8298c20015ef7f2chrismair 185aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismairimport org.apache.commons.net.ftp.FTP 195c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.apache.commons.net.ftp.FTPClient 20741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismairimport org.apache.commons.net.ftp.FTPFile 21dc2f0785d93e376be101f61f005729222061870fchrismairimport org.mockftpserver.core.command.CommandNames 22848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismairimport org.mockftpserver.core.command.StaticReplyCommandHandler 23bd576ae311a45a994ae6b457fb2e5bb0ffe0d6b5chrismairimport org.mockftpserver.fake.FakeFtpServer 24bd576ae311a45a994ae6b457fb2e5bb0ffe0d6b5chrismairimport org.mockftpserver.fake.UserAccount 250da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.DirectoryEntry 260da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.FileEntry 270da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.FileSystem 280da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.UnixFakeFileSystem 290da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.WindowsFakeFileSystem 300da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.stub.command.CwdCommandHandler 315c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.AbstractGroovyTest 325c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.PortTestUtil 335c17f34e1a613c319d355112f8298c20015ef7f2chrismair 345c17f34e1a613c319d355112f8298c20015ef7f2chrismair/** 355c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Integration tests for FakeFtpServer. 365c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 372a0a3f946dba517a01cc26278f905156857c9c91chrismair * @version $Revision$ - $Date$ 385c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 395c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @author Chris Mair 405c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 415c17f34e1a613c319d355112f8298c20015ef7f2chrismairclass FakeFtpServerIntegrationTest extends AbstractGroovyTest { 425c17f34e1a613c319d355112f8298c20015ef7f2chrismair 43aa72126634232b9f007e110204e081807257cd4fchrismair static final SERVER = "localhost" 44aa72126634232b9f007e110204e081807257cd4fchrismair static final USERNAME = "user123" 45aa72126634232b9f007e110204e081807257cd4fchrismair static final PASSWORD = "password" 46fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair static final ACCOUNT = "account123" 47aa72126634232b9f007e110204e081807257cd4fchrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 48aa72126634232b9f007e110204e081807257cd4fchrismair static final BINARY_DATA = new byte[256] 495e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final ROOT_DIR = "c:/" 505e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final HOME_DIR = p(ROOT_DIR, "home") 51741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR_NAME = 'sub' 52aa72126634232b9f007e110204e081807257cd4fchrismair static final SUBDIR_NAME2 = "archive" 53741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 54aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME1 = "abc.txt" 55aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME2 = "SomeOtherFile.xml" 56741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 57eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair static final SYSTEM_NAME = "WINDOWS" 585c17f34e1a613c319d355112f8298c20015ef7f2chrismair 59aa72126634232b9f007e110204e081807257cd4fchrismair private FakeFtpServer ftpServer 60aa72126634232b9f007e110204e081807257cd4fchrismair private FTPClient ftpClient 615c17f34e1a613c319d355112f8298c20015ef7f2chrismair private FileSystem fileSystem 62fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair private UserAccount userAccount 635c17f34e1a613c319d355112f8298c20015ef7f2chrismair 645c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 655c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Tests 665c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 675c17f34e1a613c319d355112f8298c20015ef7f2chrismair 685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAbor() { 695aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 705aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.abort() 715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ABOR", 226) 725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 74fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testAcct() { 75fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 76fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.acct(ACCOUNT) == 230 77fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 78fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 795aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAllo() { 805aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 815aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.allocate(99) 825aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ALLO", 200) 835aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 845aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 855aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAppe() { 865aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def ORIGINAL_CONTENTS = '123 456 789' 87ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 885aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 895aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 905aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("Put File for local path [$FILE1]") 925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.appendFile(FILE1, inputStream) 94c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("File contents=[" + contents + "]") 965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 985aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 995e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair void testCdup() { 1005e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair ftpClientConnectAndLogin() 1015e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair assert ftpClient.changeToParentDirectory() 1025e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair verifyReplyCode("changeToParentDirectory", 200) 1035e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair } 1045e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair 105741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testCwd() { 106741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 107aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 108aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("changeWorkingDirectory", 250) 109741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 110741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 11138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair /** 11238fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair * Test that a CWD to ".." properly resolves the current dir (without the "..") so that PWD returns the parent 11338fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair */ 11438fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair void testCwd_DotDot_Pwd() { 11538fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair ftpClientConnectAndLogin() 11638fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory("..") 11738fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair verifyReplyCode("changeWorkingDirectory", 250) 11838fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(ROOT_DIR) 11938fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory("home") 12038fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(HOME_DIR) 12138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair } 12238fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair 12338fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair /** 12438fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair * Test that a CWD to "." properly resolves the current dir (without the ".") so that PWD returns the parent 12538fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair */ 12638fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair void testCwd_Dot_Pwd() { 12738fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair ftpClientConnectAndLogin() 12838fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory(".") 12938fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair verifyReplyCode("changeWorkingDirectory", 250) 13038fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(HOME_DIR) 13138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair } 13238fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair 133848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair void testCwd_UseStaticReplyCommandHandler() { 134848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair final int REPLY_CODE = 500; 135848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair StaticReplyCommandHandler cwdCommandHandler = new StaticReplyCommandHandler(REPLY_CODE); 136dc2f0785d93e376be101f61f005729222061870fchrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 1370da0f84ad9831bea470896e79b5ec207c83f258echrismair 1380da0f84ad9831bea470896e79b5ec207c83f258echrismair ftpClientConnectAndLogin() 1390da0f84ad9831bea470896e79b5ec207c83f258echrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 1400da0f84ad9831bea470896e79b5ec207c83f258echrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 1410da0f84ad9831bea470896e79b5ec207c83f258echrismair } 1420da0f84ad9831bea470896e79b5ec207c83f258echrismair 1430da0f84ad9831bea470896e79b5ec207c83f258echrismair void testCwd_UseStubCommandHandler() { 1440da0f84ad9831bea470896e79b5ec207c83f258echrismair final int REPLY_CODE = 502; 1450da0f84ad9831bea470896e79b5ec207c83f258echrismair CwdCommandHandler cwdCommandHandler = new CwdCommandHandler(); // Stub command handler 1460da0f84ad9831bea470896e79b5ec207c83f258echrismair cwdCommandHandler.setReplyCode(REPLY_CODE); 147dc2f0785d93e376be101f61f005729222061870fchrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 1480da0f84ad9831bea470896e79b5ec207c83f258echrismair 149848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair ftpClientConnectAndLogin() 150848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 1510da0f84ad9831bea470896e79b5ec207c83f258echrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 1520da0f84ad9831bea470896e79b5ec207c83f258echrismair assert cwdCommandHandler.getInvocation(0) 153848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair } 154848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair 155741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testDele() { 156d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 157741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 158741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 159aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.deleteFile(FILENAME1) 160aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("deleteFile", 250) 1615f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(FILENAME1) 1625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1635f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 16475520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair void testEprt() { 16575520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair ftpClientConnectAndLogin() 16675520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair assert ftpClient.sendCommand("EPRT", "|2|1080::8:800:200C:417A|5282|") == 200 16775520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair } 16875520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair 16975520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair void testEpsv() { 17075520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair ftpClientConnectAndLogin() 17175520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair assert ftpClient.sendCommand("EPSV") == 229 17275520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair } 17375520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair 174dc2f0785d93e376be101f61f005729222061870fchrismair void testFeat_UseStaticReplyCommandHandler() { 175dc2f0785d93e376be101f61f005729222061870fchrismair // The FEAT command is not supported out of the box 176dc2f0785d93e376be101f61f005729222061870fchrismair StaticReplyCommandHandler featCommandHandler = new StaticReplyCommandHandler(211, "No Features"); 177dc2f0785d93e376be101f61f005729222061870fchrismair ftpServer.setCommandHandler("FEAT", featCommandHandler); 178dc2f0785d93e376be101f61f005729222061870fchrismair 179dc2f0785d93e376be101f61f005729222061870fchrismair ftpClientConnectAndLogin() 180dc2f0785d93e376be101f61f005729222061870fchrismair assert ftpClient.sendCommand("FEAT") == 211 181dc2f0785d93e376be101f61f005729222061870fchrismair } 182dc2f0785d93e376be101f61f005729222061870fchrismair 1835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testHelp() { 1845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpServer.helpText = [a: 'aaa', '': 'default'] 1855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnect() 1865f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair String help = ftpClient.listHelp() 1885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('default') 1895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('a') 1925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('aaa') 1935f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1945f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1955f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('bad') 1965f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('bad') 1975f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 198741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 199741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 20047fb67a4e600f339064de4c08f10279accc95e92chrismair void testList() { 20147fb67a4e600f339064de4c08f10279accc95e92chrismair def LAST_MODIFIED = new Date() 202ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 203ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 20447fb67a4e600f339064de4c08f10279accc95e92chrismair 20547fb67a4e600f339064de4c08f10279accc95e92chrismair ftpClientConnectAndLogin() 20647fb67a4e600f339064de4c08f10279accc95e92chrismair 20747fb67a4e600f339064de4c08f10279accc95e92chrismair FTPFile[] files = ftpClient.listFiles(SUBDIR) 2085f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert files.length == 2 209aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 210aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 21147fb67a4e600f339064de4c08f10279accc95e92chrismair verifyReplyCode("list", 226) 21247fb67a4e600f339064de4c08f10279accc95e92chrismair } 2135c17f34e1a613c319d355112f8298c20015ef7f2chrismair 214412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair void testList_Unix() { 215412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpServer.systemName = 'UNIX' 216412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair userAccount.homeDirectory = '/' 217412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 218412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair def unixFileSystem = new UnixFakeFileSystem() 219412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.createParentDirectoriesAutomatically = true 220412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new DirectoryEntry('/')) 221412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpServer.fileSystem = unixFileSystem 222412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 223412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair def LAST_MODIFIED = new Date() 224412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new FileEntry(path: p('/', FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 225412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new DirectoryEntry(path: p('/', SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 226412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 227412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpClientConnectAndLogin() 228412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 229412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair FTPFile[] files = ftpClient.listFiles('/') 230412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair assert files.length == 2 231412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair verifyFTPFile(files[0], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 232412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair verifyFTPFile(files[1], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 233412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair verifyReplyCode("list", 226) 234412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair } 235412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 236fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin() { 237fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 238fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD") 239fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD) 240fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD", 230) 241f2152557999c6eeca3b2018166ddad4c015ddd89chrismair 242f2152557999c6eeca3b2018166ddad4c015ddd89chrismair assertTrue("isStarted", ftpServer.isStarted()); 243f2152557999c6eeca3b2018166ddad4c015ddd89chrismair assertFalse("isShutdown", ftpServer.isShutdown()); 244fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 245fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 246fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin_WithAccount() { 247fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount.accountRequiredForLogin = true 248fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 249fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD with $ACCOUNT") 250fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD, ACCOUNT) 251fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD with $ACCOUNT", 230) 252fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 253fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 2544974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair void testMkd() { 2554974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair ftpClientConnectAndLogin() 2564974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 2574974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair def DIR = p(HOME_DIR, 'NewDir') 2584974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert ftpClient.makeDirectory(DIR) 2594974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair verifyReplyCode("makeDirectory", 257) 2604974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert fileSystem.isDirectory(DIR) 2614974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair } 2624974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 2635aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testMode() { 2645aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2655aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 2665aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("MODE", 200) 2675aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 269aa72126634232b9f007e110204e081807257cd4fchrismair void testNlst() { 270ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 271ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 272aa72126634232b9f007e110204e081807257cd4fchrismair 273aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 274aa72126634232b9f007e110204e081807257cd4fchrismair 275aa72126634232b9f007e110204e081807257cd4fchrismair String[] filenames = ftpClient.listNames(SUBDIR) 2765f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filenames == [FILENAME1, SUBDIR_NAME2] 277aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("listNames", 226) 278aa72126634232b9f007e110204e081807257cd4fchrismair } 279aa72126634232b9f007e110204e081807257cd4fchrismair 2805f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testNoop() { 2815f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2825f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.sendNoOp() 2835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("NOOP", 200) 2845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2865aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testPasv_Nlst() { 287ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 288ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME2))) 2895aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 2905aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClient.enterLocalPassiveMode(); 2925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 2935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair String[] filenames = ftpClient.listNames(SUBDIR) 2945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert filenames == [FILENAME1, FILENAME2] 2955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("listNames", 226) 2965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 298fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testPwd() { 299fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 300fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 301fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("printWorkingDirectory", 257) 302fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 303fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 304fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testQuit() { 305fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 306fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClient.quit() 307fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("quit", 221) 308fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 309fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 3105aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testRein() { 3115aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 3125aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.rein() == 220 3135aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.cdup() == 530 // now logged out 3145aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 3155aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 316c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair void testRest() { 317c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair ftpClientConnectAndLogin() 318c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair assert ftpClient.rest("marker") == 350 319c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair } 320c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair 321aa72126634232b9f007e110204e081807257cd4fchrismair void testRetr() { 322ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ASCII_DATA)) 323aa72126634232b9f007e110204e081807257cd4fchrismair 324aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 325aa72126634232b9f007e110204e081807257cd4fchrismair 326aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Get File for remotePath [$FILE1]") 327aa72126634232b9f007e110204e081807257cd4fchrismair def outputStream = new ByteArrayOutputStream() 328aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.retrieveFile(FILE1, outputStream) 329aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[${outputStream.toString()}]") 330aa72126634232b9f007e110204e081807257cd4fchrismair assert outputStream.toString() == ASCII_DATA 331aa72126634232b9f007e110204e081807257cd4fchrismair } 332aa72126634232b9f007e110204e081807257cd4fchrismair 333eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRmd() { 334eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 335eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 336eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.removeDirectory(SUBDIR) 337eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("removeDirectory", 250) 3385f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(SUBDIR) 339eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 340eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 341eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRename() { // RNFR and RNTO 342d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 343eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 344eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 345eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 346eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 347eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("rename", 250) 348eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert !fileSystem.exists(FILE1) 349eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert fileSystem.exists(FILE1 + "NEW") 350eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 351eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 3525f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testSite() { 3535f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 3545f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.site("parameters,1,2,3") == 200 3555f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 3565f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3571901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair void testSmnt() { 3581901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair ftpClientConnectAndLogin() 3591901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair assert ftpClient.smnt("dir") == 250 3601901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair } 3611901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair 3623fc03edff55387bae91315653eae3ed0ca9b1f2achrismair void testStat() { 3633fc03edff55387bae91315653eae3ed0ca9b1f2achrismair ftpClientConnectAndLogin() 3643fc03edff55387bae91315653eae3ed0ca9b1f2achrismair def status = ftpClient.getStatus() 3653fc03edff55387bae91315653eae3ed0ca9b1f2achrismair assert status.contains('Connected') 3663fc03edff55387bae91315653eae3ed0ca9b1f2achrismair verifyReplyCode("stat", 211) 3673fc03edff55387bae91315653eae3ed0ca9b1f2achrismair } 3683fc03edff55387bae91315653eae3ed0ca9b1f2achrismair 369aa72126634232b9f007e110204e081807257cd4fchrismair void testStor() { 370aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 371aa72126634232b9f007e110204e081807257cd4fchrismair 372aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Put File for local path [$FILE1]") 373aa72126634232b9f007e110204e081807257cd4fchrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 374aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.storeFile(FILE1, inputStream) 375c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 376aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[" + contents + "]") 377aa72126634232b9f007e110204e081807257cd4fchrismair assert contents == ASCII_DATA 378aa72126634232b9f007e110204e081807257cd4fchrismair } 379aa72126634232b9f007e110204e081807257cd4fchrismair 3805f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testStou() { 3815f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 3825f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 3845f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 3855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3865f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def names = fileSystem.listNames(HOME_DIR) 3875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 3885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filename 3895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 390c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(p(HOME_DIR, filename)).createInputStream().text 3915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair LOG.info("File contents=[" + contents + "]") 3925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert contents == ASCII_DATA 3935f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 3945f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testStru() { 3965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 3975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 3985aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("STRU", 200) 3995aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 4005aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 401eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testSyst() { 402eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 403eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 404eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair def systemName = ftpClient.getSystemName() 405eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair LOG.info("system name = [$systemName]") 406eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 4075f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("getSystemName", 215) 408eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 409eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 410c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair void testType() { 411c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair ftpClientConnectAndLogin() 412c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair assert ftpClient.type(FTP.ASCII_FILE_TYPE) 413c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair verifyReplyCode("TYPE", 200) 414c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair } 415c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair 41649deb463d1cc3132e4aa60bfd4469398c57c1745chrismair void testUnrecognizedCommand() { 41749deb463d1cc3132e4aa60bfd4469398c57c1745chrismair ftpClientConnectAndLogin() 41849deb463d1cc3132e4aa60bfd4469398c57c1745chrismair assert ftpClient.sendCommand("XXX") == 502 41949deb463d1cc3132e4aa60bfd4469398c57c1745chrismair verifyReplyCode("XXX", 502) 42049deb463d1cc3132e4aa60bfd4469398c57c1745chrismair } 42149deb463d1cc3132e4aa60bfd4469398c57c1745chrismair 4225c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4235c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Test setup and tear-down 4245c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4255c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4265c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4275c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform initialization before each test 4285c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 4295c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4305c17f34e1a613c319d355112f8298c20015ef7f2chrismair void setUp() { 431aa72126634232b9f007e110204e081807257cd4fchrismair super.setUp() 4325c17f34e1a613c319d355112f8298c20015ef7f2chrismair 433aa72126634232b9f007e110204e081807257cd4fchrismair for (int i = 0; i < BINARY_DATA.length; i++) { 434aa72126634232b9f007e110204e081807257cd4fchrismair BINARY_DATA[i] = (byte) i 4355c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4365c17f34e1a613c319d355112f8298c20015ef7f2chrismair 437aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer = new FakeFtpServer() 438eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 439eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.systemName = SYSTEM_NAME 4405c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4419e1053c079532bc7e47012d63f8d9d7246df4e96chrismair fileSystem = new WindowsFakeFileSystem() 442741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createParentDirectoriesAutomatically = true 443d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new DirectoryEntry(SUBDIR)) 4445c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.fileSystem = fileSystem 4455c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4467bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair userAccount = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 4471901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair ftpServer.addUserAccount(userAccount) 4485c17f34e1a613c319d355112f8298c20015ef7f2chrismair 449aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.start() 450aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient = new FTPClient() 4515c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4525c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4535c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4545c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform cleanup after each test 4555c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 4565c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4575c17f34e1a613c319d355112f8298c20015ef7f2chrismair void tearDown() { 458aa72126634232b9f007e110204e081807257cd4fchrismair super.tearDown() 459aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.stop() 4605c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4615c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4625c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4635c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Internal Helper Methods 4645c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4655c17f34e1a613c319d355112f8298c20015ef7f2chrismair 466741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private ftpClientConnectAndLogin() { 467741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 468741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 469741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 470741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 4715c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4725c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Connect to the server from the FTPClient 4735c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 474741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void ftpClientConnect() { 475741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair def port = PortTestUtil.getFtpServerControlPort() 476741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair LOG.info("Conecting to $SERVER on port $port") 477aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient.connect(SERVER, port) 478741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("connect", 220) 4795c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4805c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4815c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4825c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Assert that the FtpClient reply code is equal to the expected value 4835c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 484aa72126634232b9f007e110204e081807257cd4fchrismair * @param operation - the description of the operation performed used in the error message 4855c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @param expectedReplyCode - the expected FtpClient reply code 4865c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4875c17f34e1a613c319d355112f8298c20015ef7f2chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 488aa72126634232b9f007e110204e081807257cd4fchrismair int replyCode = ftpClient.getReplyCode() 489aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 490aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 4915c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4925c17f34e1a613c319d355112f8298c20015ef7f2chrismair 493741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 494aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info(ftpFile) 495aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 496aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 497aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 498741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 499741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 5005c17f34e1a613c319d355112f8298c20015ef7f2chrismair}