FakeFtpServerIntegrationTest.groovy revision 5aee6e3edf4d3d8decff73d2a5a26cebdd0572f5
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" 41aa72126634232b9f007e110204e081807257cd4fchrismair static final ASCII_DATA = "abcdef\tghijklmnopqr" 42aa72126634232b9f007e110204e081807257cd4fchrismair static final BINARY_DATA = new byte[256] 435e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final ROOT_DIR = "c:/" 445e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair static final HOME_DIR = p(ROOT_DIR, "home") 45741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR_NAME = 'sub' 46aa72126634232b9f007e110204e081807257cd4fchrismair static final SUBDIR_NAME2 = "archive" 47741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final SUBDIR = p(HOME_DIR, SUBDIR_NAME) 48aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME1 = "abc.txt" 49aa72126634232b9f007e110204e081807257cd4fchrismair static final FILENAME2 = "SomeOtherFile.xml" 50741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair static final FILE1 = p(HOME_DIR, FILENAME1) 51eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair static final SYSTEM_NAME = "WINDOWS" 525c17f34e1a613c319d355112f8298c20015ef7f2chrismair 53aa72126634232b9f007e110204e081807257cd4fchrismair private FakeFtpServer ftpServer 54aa72126634232b9f007e110204e081807257cd4fchrismair private FTPClient ftpClient 555c17f34e1a613c319d355112f8298c20015ef7f2chrismair private FileSystem fileSystem 565c17f34e1a613c319d355112f8298c20015ef7f2chrismair 575c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 585c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Tests 595c17f34e1a613c319d355112f8298c20015ef7f2chrismair //------------------------------------------------------------------------- 605c17f34e1a613c319d355112f8298c20015ef7f2chrismair 615aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAbor() { 625aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 635aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.abort() 645aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ABOR", 226) 655aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 665aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 675aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAllo() { 685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 695aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.allocate(99) 705aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("ALLO", 200) 715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testAppe() { 745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def ORIGINAL_CONTENTS = '123 456 789' 755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: FILE1, contents: ORIGINAL_CONTENTS)) 765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 775aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 785aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 795aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("Put File for local path [$FILE1]") 805aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 815aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.appendFile(FILE1, inputStream) 825aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair def contents = fileSystem.createInputStream(FILE1).text 835aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair LOG.info("File contents=[" + contents + "]") 845aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert contents == ORIGINAL_CONTENTS + ASCII_DATA 855aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 865aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 875c17f34e1a613c319d355112f8298c20015ef7f2chrismair void testLogin() { 885c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpClientConnect() 895c17f34e1a613c319d355112f8298c20015ef7f2chrismair String userAndPassword = USERNAME + "/" + PASSWORD 905c17f34e1a613c319d355112f8298c20015ef7f2chrismair LOG.info("Logging in as " + userAndPassword) 91741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 92741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("login with $userAndPassword", 230) 93741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 945c17f34e1a613c319d355112f8298c20015ef7f2chrismair 95741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testQuit() { 96741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 975c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpClient.quit() 985c17f34e1a613c319d355112f8298c20015ef7f2chrismair verifyReplyCode("quit", 221) 995c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 1005c17f34e1a613c319d355112f8298c20015ef7f2chrismair 101741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testPwd() { 102741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 103741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.printWorkingDirectory() == HOME_DIR 104741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("printWorkingDirectory", 257) 105741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 106741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 1075e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair void testCdup() { 1085e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair ftpClientConnectAndLogin() 1095e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair assert ftpClient.changeToParentDirectory() 1105e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair verifyReplyCode("changeToParentDirectory", 200) 1115e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair } 1125e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair 113741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testCwd() { 114741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 115aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.changeWorkingDirectory(SUBDIR_NAME) 116aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("changeWorkingDirectory", 250) 117741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 118741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 119741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair void testDele() { 120741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createFile(FILE1) 121741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 122741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnectAndLogin() 123aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.deleteFile(FILENAME1) 124aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("deleteFile", 250) 1255f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(FILENAME1) 1265f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1275f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1285f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testHelp() { 1295f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpServer.helpText = [a: 'aaa', '': 'default'] 1305f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnect() 1315f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1325f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair String help = ftpClient.listHelp() 1335f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('default') 1345f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1355f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1365f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('a') 1375f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('aaa') 1385f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 1395f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1405f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair help = ftpClient.listHelp('bad') 1415f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert help.contains('bad') 1425f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("listHelp", 214) 143741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 144741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 14547fb67a4e600f339064de4c08f10279accc95e92chrismair void testList() { 14647fb67a4e600f339064de4c08f10279accc95e92chrismair def LAST_MODIFIED = new Date() 147aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1), lastModified: LAST_MODIFIED, contents: ASCII_DATA)) 148aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2), lastModified: LAST_MODIFIED)) 14947fb67a4e600f339064de4c08f10279accc95e92chrismair 15047fb67a4e600f339064de4c08f10279accc95e92chrismair ftpClientConnectAndLogin() 15147fb67a4e600f339064de4c08f10279accc95e92chrismair 15247fb67a4e600f339064de4c08f10279accc95e92chrismair FTPFile[] files = ftpClient.listFiles(SUBDIR) 1535f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert files.length == 2 154aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[0], FTPFile.FILE_TYPE, FILENAME1, ASCII_DATA.size()) 155aa72126634232b9f007e110204e081807257cd4fchrismair verifyFTPFile(files[1], FTPFile.DIRECTORY_TYPE, SUBDIR_NAME2, 0) 15647fb67a4e600f339064de4c08f10279accc95e92chrismair verifyReplyCode("list", 226) 15747fb67a4e600f339064de4c08f10279accc95e92chrismair } 1585c17f34e1a613c319d355112f8298c20015ef7f2chrismair 1594974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair void testMkd() { 1604974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair ftpClientConnectAndLogin() 1614974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1624974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair def DIR = p(HOME_DIR, 'NewDir') 1634974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert ftpClient.makeDirectory(DIR) 1644974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair verifyReplyCode("makeDirectory", 257) 1654974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair assert fileSystem.isDirectory(DIR) 1664974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair } 1674974b7c3f907c483cec2c9399d9d8c8cb99c716achrismair 1685aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testMode() { 1695aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1705aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 1715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("MODE", 200) 1725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 1735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 174aa72126634232b9f007e110204e081807257cd4fchrismair void testNlst() { 175aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1))) 176aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new DirectoryEntry(path: p(SUBDIR, SUBDIR_NAME2))) 177aa72126634232b9f007e110204e081807257cd4fchrismair 178aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 179aa72126634232b9f007e110204e081807257cd4fchrismair 180aa72126634232b9f007e110204e081807257cd4fchrismair String[] filenames = ftpClient.listNames(SUBDIR) 1815f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filenames == [FILENAME1, SUBDIR_NAME2] 182aa72126634232b9f007e110204e081807257cd4fchrismair verifyReplyCode("listNames", 226) 183aa72126634232b9f007e110204e081807257cd4fchrismair } 184aa72126634232b9f007e110204e081807257cd4fchrismair 1855f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testNoop() { 1865f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 1875f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.sendNoOp() 1885f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("NOOP", 200) 1895f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 1905f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 1915aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testPasv_Nlst() { 1925aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME1))) 1935aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair fileSystem.addEntry(new FileEntry(path: p(SUBDIR, FILENAME2))) 1945aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 1955aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 1965aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClient.enterLocalPassiveMode(); 1975aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 1985aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair String[] filenames = ftpClient.listNames(SUBDIR) 1995aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert filenames == [FILENAME1, FILENAME2] 2005aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("listNames", 226) 2015aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2025aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 2035aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testRein() { 2045aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2055aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.rein() == 220 2065aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.cdup() == 530 // now logged out 2075aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2085aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 209aa72126634232b9f007e110204e081807257cd4fchrismair void testRetr() { 210aa72126634232b9f007e110204e081807257cd4fchrismair fileSystem.addEntry(new FileEntry(path: FILE1, contents: ASCII_DATA)) 211aa72126634232b9f007e110204e081807257cd4fchrismair 212aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 213aa72126634232b9f007e110204e081807257cd4fchrismair 214aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Get File for remotePath [$FILE1]") 215aa72126634232b9f007e110204e081807257cd4fchrismair def outputStream = new ByteArrayOutputStream() 216aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.retrieveFile(FILE1, outputStream) 217aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[${outputStream.toString()}]") 218aa72126634232b9f007e110204e081807257cd4fchrismair assert outputStream.toString() == ASCII_DATA 219aa72126634232b9f007e110204e081807257cd4fchrismair } 220aa72126634232b9f007e110204e081807257cd4fchrismair 221eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRmd() { 222eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 223eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 224eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.removeDirectory(SUBDIR) 225eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("removeDirectory", 250) 2265f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert !fileSystem.exists(SUBDIR) 227eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 228eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 229eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testRename() { // RNFR and RNTO 230eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair fileSystem.createFile(FILE1) 231eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 232eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 233eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 234eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert ftpClient.rename(FILE1, FILE1 + "NEW") 235eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair verifyReplyCode("rename", 250) 236eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert !fileSystem.exists(FILE1) 237eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert fileSystem.exists(FILE1 + "NEW") 238eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 239eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 2405f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testSite() { 2415f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2425f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.site("parameters,1,2,3") == 200 2435f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2445f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 245aa72126634232b9f007e110204e081807257cd4fchrismair void testStor() { 246aa72126634232b9f007e110204e081807257cd4fchrismair ftpClientConnectAndLogin() 247aa72126634232b9f007e110204e081807257cd4fchrismair 248aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Put File for local path [$FILE1]") 249aa72126634232b9f007e110204e081807257cd4fchrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 250aa72126634232b9f007e110204e081807257cd4fchrismair assert ftpClient.storeFile(FILE1, inputStream) 251aa72126634232b9f007e110204e081807257cd4fchrismair def contents = fileSystem.createInputStream(FILE1).text 252aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("File contents=[" + contents + "]") 253aa72126634232b9f007e110204e081807257cd4fchrismair assert contents == ASCII_DATA 254aa72126634232b9f007e110204e081807257cd4fchrismair } 255aa72126634232b9f007e110204e081807257cd4fchrismair 2565f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair void testStou() { 2575f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair ftpClientConnectAndLogin() 2585f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2595f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def inputStream = new ByteArrayInputStream(ASCII_DATA.getBytes()) 2605f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert ftpClient.storeUniqueFile(FILENAME1, inputStream) 2615f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2625f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def names = fileSystem.listNames(HOME_DIR) 2635f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def filename = names.find {name -> name.startsWith(FILENAME1) } 2645f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert filename 2655f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2665f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair def contents = fileSystem.createInputStream(p(HOME_DIR, filename)).text 2675f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair LOG.info("File contents=[" + contents + "]") 2685f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair assert contents == ASCII_DATA 2695f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair } 2705f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair 2715aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair void testStru() { 2725aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair ftpClientConnectAndLogin() 2735aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair assert ftpClient.setFileStructure(FTP.FILE_STRUCTURE); 2745aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair verifyReplyCode("STRU", 200) 2755aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair } 2765aee6e3edf4d3d8decff73d2a5a26cebdd0572f5chrismair 277eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair void testSyst() { 278eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpClientConnectAndLogin() 279eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 280eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair def systemName = ftpClient.getSystemName() 281eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair LOG.info("system name = [$systemName]") 282eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair assert systemName.contains('"' + SYSTEM_NAME + '"') 2835f38fd8ca104fe456a2cf7fcedc56e9b0ce777d3chrismair verifyReplyCode("getSystemName", 215) 284eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair } 285eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair 2865c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 2875c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Test setup and tear-down 2885c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 2895c17f34e1a613c319d355112f8298c20015ef7f2chrismair 2905c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 2915c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform initialization before each test 2925c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#setUp() 2935c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 2945c17f34e1a613c319d355112f8298c20015ef7f2chrismair void setUp() { 295aa72126634232b9f007e110204e081807257cd4fchrismair super.setUp() 2965c17f34e1a613c319d355112f8298c20015ef7f2chrismair 297aa72126634232b9f007e110204e081807257cd4fchrismair for (int i = 0; i < BINARY_DATA.length; i++) { 298aa72126634232b9f007e110204e081807257cd4fchrismair BINARY_DATA[i] = (byte) i 2995c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3005c17f34e1a613c319d355112f8298c20015ef7f2chrismair 301aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer = new FakeFtpServer() 302eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.serverControlPort = PortTestUtil.getFtpServerControlPort() 303eddc77a4978ece97afb3e2bcf631371c2c75a757chrismair ftpServer.systemName = SYSTEM_NAME 3045c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3055c17f34e1a613c319d355112f8298c20015ef7f2chrismair fileSystem = new FakeWindowsFileSystem() 306741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createParentDirectoriesAutomatically = true 307741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair fileSystem.createDirectory(SUBDIR) 3085c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.fileSystem = fileSystem 3095c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3105c17f34e1a613c319d355112f8298c20015ef7f2chrismair def userAccount = new UserAccount(username: USERNAME, password: PASSWORD, 311741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair passwordRequiredForLogin: true, homeDirectory: HOME_DIR) 3125c17f34e1a613c319d355112f8298c20015ef7f2chrismair ftpServer.userAccounts[USERNAME] = userAccount 3135c17f34e1a613c319d355112f8298c20015ef7f2chrismair 314aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.start() 315aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient = new FTPClient() 3165c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3175c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3185c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3195c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Perform cleanup after each test 3205c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @see org.mockftpserver.test.AbstractTest#tearDown() 3215c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3225c17f34e1a613c319d355112f8298c20015ef7f2chrismair void tearDown() { 323aa72126634232b9f007e110204e081807257cd4fchrismair super.tearDown() 324aa72126634232b9f007e110204e081807257cd4fchrismair ftpServer.stop() 3255c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3265c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3275c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3285c17f34e1a613c319d355112f8298c20015ef7f2chrismair // Internal Helper Methods 3295c17f34e1a613c319d355112f8298c20015ef7f2chrismair // ------------------------------------------------------------------------- 3305c17f34e1a613c319d355112f8298c20015ef7f2chrismair 331741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private ftpClientConnectAndLogin() { 332741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair ftpClientConnect() 333741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair assert ftpClient.login(USERNAME, PASSWORD) 334741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 335741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3365c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3375c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Connect to the server from the FTPClient 3385c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 339741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void ftpClientConnect() { 340741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair def port = PortTestUtil.getFtpServerControlPort() 341741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair LOG.info("Conecting to $SERVER on port $port") 342aa72126634232b9f007e110204e081807257cd4fchrismair ftpClient.connect(SERVER, port) 343741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair verifyReplyCode("connect", 220) 3445c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3455c17f34e1a613c319d355112f8298c20015ef7f2chrismair 3465c17f34e1a613c319d355112f8298c20015ef7f2chrismair /** 3475c17f34e1a613c319d355112f8298c20015ef7f2chrismair * Assert that the FtpClient reply code is equal to the expected value 3485c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 349aa72126634232b9f007e110204e081807257cd4fchrismair * @param operation - the description of the operation performed used in the error message 3505c17f34e1a613c319d355112f8298c20015ef7f2chrismair * @param expectedReplyCode - the expected FtpClient reply code 3515c17f34e1a613c319d355112f8298c20015ef7f2chrismair */ 3525c17f34e1a613c319d355112f8298c20015ef7f2chrismair private void verifyReplyCode(String operation, int expectedReplyCode) { 353aa72126634232b9f007e110204e081807257cd4fchrismair int replyCode = ftpClient.getReplyCode() 354aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info("Reply: operation=\"" + operation + "\" replyCode=" + replyCode) 355aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("Unexpected replyCode for " + operation, expectedReplyCode, replyCode) 3565c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 3575c17f34e1a613c319d355112f8298c20015ef7f2chrismair 358741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair private void verifyFTPFile(FTPFile ftpFile, int type, String name, long size) { 359aa72126634232b9f007e110204e081807257cd4fchrismair LOG.info(ftpFile) 360aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("type: " + ftpFile, type, ftpFile.getType()) 361aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("name: " + ftpFile, name, ftpFile.getName()) 362aa72126634232b9f007e110204e081807257cd4fchrismair assertEquals("size: " + ftpFile, size, ftpFile.getSize()) 363741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair } 364741e9e72e4f0fca467ee571a11ab7ba8d15e8ad5chrismair 3655c17f34e1a613c319d355112f8298c20015ef7f2chrismair}