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 2340658190151b7ded3489ff89c301b470155c95f4chrismair 240da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.DirectoryEntry 250da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.FileEntry 260da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.FileSystem 270da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.UnixFakeFileSystem 280da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.fake.filesystem.WindowsFakeFileSystem 290da0f84ad9831bea470896e79b5ec207c83f258echrismairimport org.mockftpserver.stub.command.CwdCommandHandler 305303c6ae1dde5f399fe48803e677942fc4326344chrismairimport org.mockftpserver.test.AbstractGroovyTestCase 315c17f34e1a613c319d355112f8298c20015ef7f2chrismairimport org.mockftpserver.test.PortTestUtil 325c17f34e1a613c319d355112f8298c20015ef7f2chrismair 335c17f34e1a613c319d355112f8298c20015ef7f2chrismair/** 345c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Integration tests for FakeFtpServer. 355c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 362a0a3f946dba517a01cc26278f905156857c9c91chrismair * @version $Revision$ - $Date$ 375c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 385c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @author Chris Mair 395c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 405303c6ae1dde5f399fe48803e677942fc4326344chrismairclass FakeFtpServerIntegrationTest extends AbstractGroovyTestCase { 415c17f34e1a613c319d355112f8298c20015ef7f2chrismair 42aa72126634232b9f007e110204e081807257cd4fchrismair static final SERVER = "localhost" 43aa72126634232b9f007e110204e081807257cd4fchrismair static final USERNAME = "user123" 44aa72126634232b9f007e110204e081807257cd4fchrismair static final PASSWORD = "password" 45fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair static final ACCOUNT = "account123" 46aa72126634232b9f007e110204e081807257cd4fchrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 47aa72126634232b9f007e110204e081807257cd4fchrismair static final BINARY_DATA = new byte[256] 485e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final ROOT_DIR = "c:/" 495e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final HOME_DIR = p(ROOT_DIR, "home") 50741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR_NAME = 'sub' 51aa72126634232b9f007e110204e081807257cd4fchrismair static final SUBDIR_NAME2 = "archive" 52741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 53aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME1 = "abc.txt" 54aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME2 = "SomeOtherFile.xml" 55741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 56eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair static final SYSTEM_NAME = "WINDOWS" 575c17f34e1a613c319d355112f8298c20015ef7f2chrismair 58aa72126634232b9f007e110204e081807257cd4fchrismair private FakeFtpServer ftpServer 59aa72126634232b9f007e110204e081807257cd4fchrismair private FTPClient ftpClient 605c17f34e1a613c319d355112f8298c20015ef7f2chrismair private FileSystem fileSystem 61fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair private UserAccount userAccount 625c17f34e1a613c319d355112f8298c20015ef7f2chrismair 635c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 645c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Tests 655c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 665c17f34e1a613c319d355112f8298c20015ef7f2chrismair 675aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAbor() { 685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 695aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.abort() 705aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ABOR", 226) 715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 73fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testAcct() { 74fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 75fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.acct(ACCOUNT) == 230 76fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 77fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 785aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAllo() { 795aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 805aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.allocate(99) 815aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ALLO", 200) 825aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 835aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 845aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAppe() { 855aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def ORIGINAL_CONTENTS = '123 456 789' 86ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 875aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 885aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 895aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 905aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("Put File for local path [$FILE1]") 915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.appendFile(FILE1, inputStream) 93c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("File contents=[" + contents + "]") 955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 985e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair void testCdup() { 995e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair ftpClientConnectAndLogin() 1005e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair assert ftpClient.changeToParentDirectory() 1015e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair verifyReplyCode("changeToParentDirectory", 200) 1025e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair } 1035e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair 104741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testCwd() { 105741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 106aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 107aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("changeWorkingDirectory", 250) 108741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 109741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 11038fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair /** 11138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair * Test that a CWD to ".." properly resolves the current dir (without the "..") so that PWD returns the parent 11238fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair */ 11338fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair void testCwd_DotDot_Pwd() { 11438fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair ftpClientConnectAndLogin() 11538fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory("..") 11638fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair verifyReplyCode("changeWorkingDirectory", 250) 11738fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(ROOT_DIR) 11838fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory("home") 11938fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(HOME_DIR) 12038fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair } 12138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair 12238fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair /** 12338fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair * Test that a CWD to "." properly resolves the current dir (without the ".") so that PWD returns the parent 12438fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair */ 12538fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair void testCwd_Dot_Pwd() { 12638fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair ftpClientConnectAndLogin() 12738fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert ftpClient.changeWorkingDirectory(".") 12838fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair verifyReplyCode("changeWorkingDirectory", 250) 12938fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair assert p(ftpClient.printWorkingDirectory()) == p(HOME_DIR) 13038fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair } 13138fab1fed5287011ab8fbc41b429c6bbf3b981e0chrismair 132848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair void testCwd_UseStaticReplyCommandHandler() { 133848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair final int REPLY_CODE = 500; 134848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair StaticReplyCommandHandler cwdCommandHandler = new StaticReplyCommandHandler(REPLY_CODE); 135dc2f0785d93e376be101f61f005729222061870fchrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 1360da0f84ad9831bea470896e79b5ec207c83f258echrismair 1370da0f84ad9831bea470896e79b5ec207c83f258echrismair ftpClientConnectAndLogin() 1380da0f84ad9831bea470896e79b5ec207c83f258echrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 1390da0f84ad9831bea470896e79b5ec207c83f258echrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 1400da0f84ad9831bea470896e79b5ec207c83f258echrismair } 1410da0f84ad9831bea470896e79b5ec207c83f258echrismair 1420da0f84ad9831bea470896e79b5ec207c83f258echrismair void testCwd_UseStubCommandHandler() { 1430da0f84ad9831bea470896e79b5ec207c83f258echrismair final int REPLY_CODE = 502; 1440da0f84ad9831bea470896e79b5ec207c83f258echrismair CwdCommandHandler cwdCommandHandler = new CwdCommandHandler(); // Stub command handler 1450da0f84ad9831bea470896e79b5ec207c83f258echrismair cwdCommandHandler.setReplyCode(REPLY_CODE); 146dc2f0785d93e376be101f61f005729222061870fchrismair ftpServer.setCommandHandler(CommandNames.CWD, cwdCommandHandler); 1470da0f84ad9831bea470896e79b5ec207c83f258echrismair 148848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair ftpClientConnectAndLogin() 149848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair assert !ftpClient.changeWorkingDirectory(SUBDIR_NAME) 1500da0f84ad9831bea470896e79b5ec207c83f258echrismair verifyReplyCode("changeWorkingDirectory", REPLY_CODE) 1510da0f84ad9831bea470896e79b5ec207c83f258echrismair assert cwdCommandHandler.getInvocation(0) 152848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair } 153848932d9e7c6953b3c345c9aa6b0b6c3cfe20d79chrismair 154741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testDele() { 155d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 156741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 157741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 158aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.deleteFile(FILENAME1) 159aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("deleteFile", 250) 1605f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(FILENAME1) 1615f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 16375520503341f870a8d2a27e0a82cca14f8aa6a4bchrismair void testEprt() { 164150ece0932001dba199ecc1a8f98f5eb4060735dchrismair log("Skipping...") 165150ece0932001dba199ecc1a8f98f5eb4060735dchrismair// ftpClientConnectAndLogin() 166150ece0932001dba199ecc1a8f98f5eb4060735dchrismair// 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 2093373d667c329b520a33bf4760304e2757ac55292chrismair 2103373d667c329b520a33bf4760304e2757ac55292chrismair // Can't be sure of order 2113373d667c329b520a33bf4760304e2757ac55292chrismair FTPFile fileEntry = (files[0].getType() == FTPFile.FILE_TYPE) ? files[0] : files[1] 2123373d667c329b520a33bf4760304e2757ac55292chrismair FTPFile dirEntry = (files[0].getType() == FTPFile.FILE_TYPE) ? files[1] : files[0] 2133373d667c329b520a33bf4760304e2757ac55292chrismair verifyFTPFile(fileEntry, FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 2143373d667c329b520a33bf4760304e2757ac55292chrismair verifyFTPFile(dirEntry, FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 2153373d667c329b520a33bf4760304e2757ac55292chrismair 21647fb67a4e600f339064de4c08f10279accc95e92chrismair verifyReplyCode("list", 226) 21747fb67a4e600f339064de4c08f10279accc95e92chrismair } 2185c17f34e1a613c319d355112f8298c20015ef7f2chrismair 219412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair void testList_Unix() { 220412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpServer.systemName = 'UNIX' 221412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair userAccount.homeDirectory = '/' 222412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 223412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair def unixFileSystem = new UnixFakeFileSystem() 224412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.createParentDirectoriesAutomatically = true 225412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new DirectoryEntry('/')) 226412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpServer.fileSystem = unixFileSystem 227412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 228412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair def LAST_MODIFIED = new Date() 229412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new FileEntry(path: p('/', FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 230412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair unixFileSystem.add(new DirectoryEntry(path: p('/', SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 231412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 232412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair ftpClientConnectAndLogin() 233412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 234412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair FTPFile[] files = ftpClient.listFiles('/') 235412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair assert files.length == 2 2363373d667c329b520a33bf4760304e2757ac55292chrismair 2373373d667c329b520a33bf4760304e2757ac55292chrismair // Can't be sure of order 2383373d667c329b520a33bf4760304e2757ac55292chrismair FTPFile fileEntry = (files[0].getType() == FTPFile.FILE_TYPE) ? files[0] : files[1] 2393373d667c329b520a33bf4760304e2757ac55292chrismair FTPFile dirEntry = (files[0].getType() == FTPFile.FILE_TYPE) ? files[1] : files[0] 2403373d667c329b520a33bf4760304e2757ac55292chrismair 2413373d667c329b520a33bf4760304e2757ac55292chrismair verifyFTPFile(dirEntry, FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 2423373d667c329b520a33bf4760304e2757ac55292chrismair verifyFTPFile(fileEntry, FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 243412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair verifyReplyCode("list", 226) 244412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair } 245412bd6ebabaf88f22efb2b7d17421fbd2e1bc235chrismair 246fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin() { 247fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 248fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD") 249fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD) 250fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD", 230) 251f2152557999c6eeca3b2018166ddad4c015ddd89chrismair 252f2152557999c6eeca3b2018166ddad4c015ddd89chrismair assertTrue("isStarted", ftpServer.isStarted()); 253f2152557999c6eeca3b2018166ddad4c015ddd89chrismair assertFalse("isShutdown", ftpServer.isShutdown()); 254fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 255fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 256fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testLogin_WithAccount() { 257fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair userAccount.accountRequiredForLogin = true 258fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 259fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair LOG.info("Logging in as $USERNAME/$PASSWORD with $ACCOUNT") 260fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.login(USERNAME, PASSWORD, ACCOUNT) 261fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("login with $USERNAME/$PASSWORD with $ACCOUNT", 230) 262fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 263fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 2644974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair void testMkd() { 2654974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair ftpClientConnectAndLogin() 2664974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 2674974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair def DIR = p(HOME_DIR, 'NewDir') 2684974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert ftpClient.makeDirectory(DIR) 2694974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair verifyReplyCode("makeDirectory", 257) 2704974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert fileSystem.isDirectory(DIR) 2714974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair } 2724974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 2735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testMode() { 2745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 2765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("MODE", 200) 2775aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2785aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 279aa72126634232b9f007e110204e081807257cd4fchrismair void testNlst() { 280ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 281ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 282aa72126634232b9f007e110204e081807257cd4fchrismair 283aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 284aa72126634232b9f007e110204e081807257cd4fchrismair 285aa72126634232b9f007e110204e081807257cd4fchrismair String[] filenames = ftpClient.listNames(SUBDIR) 2863373d667c329b520a33bf4760304e2757ac55292chrismair assert filenames as Set == [FILENAME1, SUBDIR_NAME2] as Set 287aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("listNames", 226) 288aa72126634232b9f007e110204e081807257cd4fchrismair } 289aa72126634232b9f007e110204e081807257cd4fchrismair 2905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testNoop() { 2915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.sendNoOp() 2935f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("NOOP", 200) 2945f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2955f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testPasv_Nlst() { 297ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME1))) 298ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: p(SUBDIR, FILENAME2))) 2995aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 3005aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 3015aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClient.enterLocalPassiveMode(); 3025aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 3035aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair String[] filenames = ftpClient.listNames(SUBDIR) 3045aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert filenames == [FILENAME1, FILENAME2] 3055aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("listNames", 226) 3065aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 3075aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 308fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testPwd() { 309fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnectAndLogin() 310fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 311fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("printWorkingDirectory", 257) 312fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 313fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 314fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair void testQuit() { 315fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClientConnect() 316fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair ftpClient.quit() 317fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair verifyReplyCode("quit", 221) 318fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair } 319fa3e4a9d121b1ad40a6d418b925afda82d3567bachrismair 3205aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testRein() { 3215aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 3225aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.rein() == 220 3235aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.cdup() == 530 // now logged out 3245aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 3255aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 326c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair void testRest() { 327c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair ftpClientConnectAndLogin() 328c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair assert ftpClient.rest("marker") == 350 329c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair } 330c548d7a6b7cbef8732c090bc1ff5c4f7f29e2575chrismair 331aa72126634232b9f007e110204e081807257cd4fchrismair void testRetr() { 332ac0730d4a280669a43eec1f443bccdcb2adef7b3chrismair fileSystem.add(new FileEntry(path: FILE1, contents: ASCII_DATA)) 333aa72126634232b9f007e110204e081807257cd4fchrismair 334aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 335aa72126634232b9f007e110204e081807257cd4fchrismair 336aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Get File for remotePath [$FILE1]") 337aa72126634232b9f007e110204e081807257cd4fchrismair def outputStream = new ByteArrayOutputStream() 338aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.retrieveFile(FILE1, outputStream) 339aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[${outputStream.toString()}]") 340aa72126634232b9f007e110204e081807257cd4fchrismair assert outputStream.toString() == ASCII_DATA 341aa72126634232b9f007e110204e081807257cd4fchrismair } 342aa72126634232b9f007e110204e081807257cd4fchrismair 343eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRmd() { 344eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 345eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 346eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.removeDirectory(SUBDIR) 347eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("removeDirectory", 250) 3485f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(SUBDIR) 349eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 350eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 351eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRename() { // RNFR and RNTO 352d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new FileEntry(FILE1)) 353eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 354eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 355eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 356eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 357eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("rename", 250) 358eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert !fileSystem.exists(FILE1) 359eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert fileSystem.exists(FILE1 + "NEW") 360eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 361eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 3625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testSite() { 3635f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 3645f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.site("parameters,1,2,3") == 200 3655f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 3665f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3671901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair void testSmnt() { 3681901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair ftpClientConnectAndLogin() 3691901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair assert ftpClient.smnt("dir") == 250 3701901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair } 3711901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair 3723fc03edff55387bae91315653eae3ed0ca9b1f2achrismair void testStat() { 3733fc03edff55387bae91315653eae3ed0ca9b1f2achrismair ftpClientConnectAndLogin() 3743fc03edff55387bae91315653eae3ed0ca9b1f2achrismair def status = ftpClient.getStatus() 3753fc03edff55387bae91315653eae3ed0ca9b1f2achrismair assert status.contains('Connected') 3763fc03edff55387bae91315653eae3ed0ca9b1f2achrismair verifyReplyCode("stat", 211) 3773fc03edff55387bae91315653eae3ed0ca9b1f2achrismair } 3783fc03edff55387bae91315653eae3ed0ca9b1f2achrismair 379aa72126634232b9f007e110204e081807257cd4fchrismair void testStor() { 380aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 381aa72126634232b9f007e110204e081807257cd4fchrismair 382aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Put File for local path [$FILE1]") 383aa72126634232b9f007e110204e081807257cd4fchrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 38451f3edcb923f87e836613fa9f589fede3c018df3chrismair assert ftpClient.storeFile(FILENAME1, inputStream) // relative to homeDirectory 385c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(FILE1).createInputStream().text 386aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[" + contents + "]") 387aa72126634232b9f007e110204e081807257cd4fchrismair assert contents == ASCII_DATA 388aa72126634232b9f007e110204e081807257cd4fchrismair } 389aa72126634232b9f007e110204e081807257cd4fchrismair 3905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testStou() { 3915f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 3925f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3935f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 3945f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 3955f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 3965f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def names = fileSystem.listNames(HOME_DIR) 3975f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 3985f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filename 3995f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 400c51130cfee05b7294599cc93125db801972d0746chrismair def contents = fileSystem.getEntry(p(HOME_DIR, filename)).createInputStream().text 4015f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair LOG.info("File contents=[" + contents + "]") 4025f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert contents == ASCII_DATA 4035f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 4045f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 4055aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testStru() { 4065aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 4075aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 4085aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("STRU", 200) 4095aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 4105aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 411eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testSyst() { 412eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 413eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 414eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair def systemName = ftpClient.getSystemName() 415eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair LOG.info("system name = [$systemName]") 416eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 4175f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("getSystemName", 215) 418eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 419eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 420c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair void testType() { 421c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair ftpClientConnectAndLogin() 422c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair assert ftpClient.type(FTP.ASCII_FILE_TYPE) 423c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair verifyReplyCode("TYPE", 200) 424c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair } 425c7e1a6e6ba1ae236ed0209a01132b8fedbbaeabfchrismair 42649deb463d1cc3132e4aa60bfd4469398c57c1745chrismair void testUnrecognizedCommand() { 42749deb463d1cc3132e4aa60bfd4469398c57c1745chrismair ftpClientConnectAndLogin() 42849deb463d1cc3132e4aa60bfd4469398c57c1745chrismair assert ftpClient.sendCommand("XXX") == 502 42949deb463d1cc3132e4aa60bfd4469398c57c1745chrismair verifyReplyCode("XXX", 502) 43049deb463d1cc3132e4aa60bfd4469398c57c1745chrismair } 43149deb463d1cc3132e4aa60bfd4469398c57c1745chrismair 4325c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4335c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Test setup and tear-down 4345c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4355c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4365c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4375c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform initialization before each test 43840658190151b7ded3489ff89c301b470155c95f4chrismair * @see org.mockftpserver.test.AbstractTestCase#setUp() 4395c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4405c17f34e1a613c319d355112f8298c20015ef7f2chrismair void setUp() { 441aa72126634232b9f007e110204e081807257cd4fchrismair super.setUp() 4425c17f34e1a613c319d355112f8298c20015ef7f2chrismair 443aa72126634232b9f007e110204e081807257cd4fchrismair for (int i = 0; i < BINARY_DATA.length; i++) { 444aa72126634232b9f007e110204e081807257cd4fchrismair BINARY_DATA[i] = (byte) i 4455c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4465c17f34e1a613c319d355112f8298c20015ef7f2chrismair 447aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer = new FakeFtpServer() 448eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 449eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.systemName = SYSTEM_NAME 4505c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4519e1053c079532bc7e47012d63f8d9d7246df4e96chrismair fileSystem = new WindowsFakeFileSystem() 452741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createParentDirectoriesAutomatically = true 453d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair fileSystem.add(new DirectoryEntry(SUBDIR)) 4545c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.fileSystem = fileSystem 4555c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4567bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair userAccount = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 4571901d3e08564ec02e4e45345f95c1b1bdca2e3c0chrismair ftpServer.addUserAccount(userAccount) 4585c17f34e1a613c319d355112f8298c20015ef7f2chrismair 459aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.start() 460aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient = new FTPClient() 4615c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4625c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4635c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4645c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform cleanup after each test 46540658190151b7ded3489ff89c301b470155c95f4chrismair * @see org.mockftpserver.test.AbstractTestCase#tearDown() 4665c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4675c17f34e1a613c319d355112f8298c20015ef7f2chrismair void tearDown() { 468aa72126634232b9f007e110204e081807257cd4fchrismair super.tearDown() 469aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.stop() 4705c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4715c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4725c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4735c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Internal Helper Methods 4745c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 4755c17f34e1a613c319d355112f8298c20015ef7f2chrismair 476741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private ftpClientConnectAndLogin() { 477741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 478741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 479741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 480741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 4815c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4825c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Connect to the server from the FTPClient 4835c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 484741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void ftpClientConnect() { 485741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair def port = PortTestUtil.getFtpServerControlPort() 486741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair LOG.info("Conecting to $SERVER on port $port") 487aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient.connect(SERVER, port) 488741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("connect", 220) 4895c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 4905c17f34e1a613c319d355112f8298c20015ef7f2chrismair 4915c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 4925c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Assert that the FtpClient reply code is equal to the expected value 4935c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 494aa72126634232b9f007e110204e081807257cd4fchrismair * @param operation - the description of the operation performed used in the error message 4955c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @param expectedReplyCode - the expected FtpClient reply code 4965c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 4975c17f34e1a613c319d355112f8298c20015ef7f2chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 498aa72126634232b9f007e110204e081807257cd4fchrismair int replyCode = ftpClient.getReplyCode() 499aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 500aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 5015c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 5025c17f34e1a613c319d355112f8298c20015ef7f2chrismair 503741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 504dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair LOG.info(ftpFile.toString()) 505aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 506aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 507aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 508741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 509741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 5105c17f34e1a613c319d355112f8298c20015ef7f2chrismair}