RntoCommandHandlerTest.groovy revision 5303c6ae1dde5f399fe48803e677942fc4326344
1016b6dd21f1a552e28f4c6894b586b770241b0edchrismair/* 2016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Copyright 2008 the original author or authors. 3016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * 4016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * you may not use this file except in compliance with the License. 6016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * You may obtain a copy of the License at 7016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * 8016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * http://www.apache.org/licenses/LICENSE-2.0 9016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * 10016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Unless required by applicable law or agreed to in writing, software 11016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * distributed under the License is distributed on an "AS IS" BASIS, 12016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * See the License for the specific language governing permissions and 14016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * limitations under the License. 15016b6dd21f1a552e28f4c6894b586b770241b0edchrismair */ 16016b6dd21f1a552e28f4c6894b586b770241b0edchrismairpackage org.mockftpserver.fake.command 17016b6dd21f1a552e28f4c6894b586b770241b0edchrismair 18016b6dd21f1a552e28f4c6894b586b770241b0edchrismairimport org.mockftpserver.core.command.Command 19016b6dd21f1a552e28f4c6894b586b770241b0edchrismairimport org.mockftpserver.core.command.CommandHandler 2070cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.core.command.CommandNames 2170cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.core.command.ReplyCodes 229b31560d2bb49af587fe31dbc4f272d726eec298chrismairimport org.mockftpserver.core.session.SessionKeys 2370cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.fake.filesystem.FileSystemException 243523138583059ccc39bd3fbd43e2c077747eb1afchrismairimport org.mockftpserver.fake.filesystem.Permissions 2570cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair 26016b6dd21f1a552e28f4c6894b586b770241b0edchrismair/** 27016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Tests for RntoCommandHandler 289b31560d2bb49af587fe31dbc4f272d726eec298chrismair * 297d4a3a2990f1a386eaf9d50cf05a9d45fab32de6chrismair * @version $Revision$ - $Date$ 30016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * 31016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * @author Chris Mair 32016b6dd21f1a552e28f4c6894b586b770241b0edchrismair */ 335303c6ae1dde5f399fe48803e677942fc4326344chrismairclass RntoCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 34016b6dd21f1a552e28f4c6894b586b770241b0edchrismair 353523138583059ccc39bd3fbd43e2c077747eb1afchrismair static final DIR = '/' 363523138583059ccc39bd3fbd43e2c077747eb1afchrismair static final FROM_FILE = "/from.txt" 373523138583059ccc39bd3fbd43e2c077747eb1afchrismair static final TO_FILE = "/file.txt" 389b31560d2bb49af587fe31dbc4f272d726eec298chrismair 39016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void testHandleCommand() { 40d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair createFile(FROM_FILE) 413523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([TO_FILE]) 426fed98e9c695a9024ede347900c2689979ab5785chrismair assertSessionReply(ReplyCodes.RNTO_OK, ['rnto', FROM_FILE, TO_FILE]) 43016b6dd21f1a552e28f4c6894b586b770241b0edchrismair assert !fileSystem.exists(FROM_FILE), FROM_FILE 44016b6dd21f1a552e28f4c6894b586b770241b0edchrismair assert fileSystem.exists(TO_FILE), TO_FILE 453523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(null) 469b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 479b31560d2bb49af587fe31dbc4f272d726eec298chrismair 48cb6dfe65d98c626326091432c4824764f38ab032chrismair void testHandleCommand_PathIsRelative() { 49d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair createFile(FROM_FILE) 50cb6dfe65d98c626326091432c4824764f38ab032chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, "/") 513523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand(["file.txt"]) 526fed98e9c695a9024ede347900c2689979ab5785chrismair assertSessionReply(ReplyCodes.RNTO_OK, ['rnto', FROM_FILE, 'file.txt']) 53cb6dfe65d98c626326091432c4824764f38ab032chrismair assert !fileSystem.exists(FROM_FILE), FROM_FILE 54cb6dfe65d98c626326091432c4824764f38ab032chrismair assert fileSystem.exists(TO_FILE), TO_FILE 553523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(null) 569b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 579b31560d2bb49af587fe31dbc4f272d726eec298chrismair 58016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void testHandleCommand_FromFileNotSetInSession() { 59016b6dd21f1a552e28f4c6894b586b770241b0edchrismair session.removeAttribute(SessionKeys.RENAME_FROM) 60016b6dd21f1a552e28f4c6894b586b770241b0edchrismair testHandleCommand_MissingRequiredSessionAttribute() 619b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 62016b6dd21f1a552e28f4c6894b586b770241b0edchrismair 63016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void testHandleCommand_ToFilenameNotValid() { 64d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair createFile(FROM_FILE) 653523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([""]) 66835a1f6146e3521d2751e7b872d9f3fd85d6a43dchrismair assertSessionReply(ReplyCodes.FILENAME_NOT_VALID, "") 673523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 689b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 699b31560d2bb49af587fe31dbc4f272d726eec298chrismair 70016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void testHandleCommand_ToFilenameSpecifiesADirectory() { 71d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair createDirectory(TO_FILE) 723523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([TO_FILE]) 73c4a22299b897279a8518308b9067da84af077281chrismair assertSessionReply(ReplyCodes.WRITE_FILE_ERROR, ['filesystem.isDirectory', TO_FILE]) 743523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 759b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 769b31560d2bb49af587fe31dbc4f272d726eec298chrismair 773523138583059ccc39bd3fbd43e2c077747eb1afchrismair void testHandleCommand_NoWriteAccessToDirectory() { 783523138583059ccc39bd3fbd43e2c077747eb1afchrismair createFile(FROM_FILE) 793523138583059ccc39bd3fbd43e2c077747eb1afchrismair fileSystem.getEntry(DIR).permissions = new Permissions('r-xr-xr-x') 803523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([TO_FILE]) 813523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertSessionReply(ReplyCodes.WRITE_FILE_ERROR, ['filesystem.cannotWrite', DIR]) 823523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 833523138583059ccc39bd3fbd43e2c077747eb1afchrismair } 843523138583059ccc39bd3fbd43e2c077747eb1afchrismair 853523138583059ccc39bd3fbd43e2c077747eb1afchrismair void testHandleCommand_FromFileDoesNotExist() { 863523138583059ccc39bd3fbd43e2c077747eb1afchrismair createDirectory(DIR) 873523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([TO_FILE]) 88b698aacfd0744243d4ec776cfd4eb1d43856961cchrismair assertSessionReply(ReplyCodes.FILENAME_NOT_VALID, ['filesystem.doesNotExist', FROM_FILE]) 893523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 903523138583059ccc39bd3fbd43e2c077747eb1afchrismair } 913523138583059ccc39bd3fbd43e2c077747eb1afchrismair 923523138583059ccc39bd3fbd43e2c077747eb1afchrismair void testHandleCommand_ToFileParentDirectoryDoesNotExist() { 933523138583059ccc39bd3fbd43e2c077747eb1afchrismair createFile(FROM_FILE) 943523138583059ccc39bd3fbd43e2c077747eb1afchrismair final BAD_DIR = p(DIR, 'SUB') 953523138583059ccc39bd3fbd43e2c077747eb1afchrismair final BAD_TO_FILE = p(BAD_DIR, 'Filename.txt') 963523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([BAD_TO_FILE]) 97b698aacfd0744243d4ec776cfd4eb1d43856961cchrismair assertSessionReply(ReplyCodes.FILENAME_NOT_VALID, ['filesystem.doesNotExist', BAD_DIR]) 983523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 999b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 1009b31560d2bb49af587fe31dbc4f272d726eec298chrismair 10170cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair void testHandleCommand_RenameThrowsException() { 1023523138583059ccc39bd3fbd43e2c077747eb1afchrismair createDirectory(DIR) 103f11ac5bf4a82c9be1ccd4933dedf730df3276e01chrismair fileSystem.renameMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 10470cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair 1053523138583059ccc39bd3fbd43e2c077747eb1afchrismair handleCommand([TO_FILE]) 106c4a22299b897279a8518308b9067da84af077281chrismair assertSessionReply(ReplyCodes.WRITE_FILE_ERROR, ERROR_MESSAGE_KEY) 1073523138583059ccc39bd3fbd43e2c077747eb1afchrismair assertRenameFromSessionProperty(FROM_FILE) 1089b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 10970cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair 110016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void testHandleCommand_MissingPathParameter() { 111016b6dd21f1a552e28f4c6894b586b770241b0edchrismair testHandleCommand_MissingRequiredParameter([]) 112016b6dd21f1a552e28f4c6894b586b770241b0edchrismair } 1139b31560d2bb49af587fe31dbc4f272d726eec298chrismair 114016b6dd21f1a552e28f4c6894b586b770241b0edchrismair //------------------------------------------------------------------------- 115016b6dd21f1a552e28f4c6894b586b770241b0edchrismair // Helper Methods 116016b6dd21f1a552e28f4c6894b586b770241b0edchrismair //------------------------------------------------------------------------- 1179b31560d2bb49af587fe31dbc4f272d726eec298chrismair 1189b31560d2bb49af587fe31dbc4f272d726eec298chrismair CommandHandler createCommandHandler() { 1199b31560d2bb49af587fe31dbc4f272d726eec298chrismair new RntoCommandHandler() 1209b31560d2bb49af587fe31dbc4f272d726eec298chrismair } 1219b31560d2bb49af587fe31dbc4f272d726eec298chrismair 122016b6dd21f1a552e28f4c6894b586b770241b0edchrismair Command createValidCommand() { 123016b6dd21f1a552e28f4c6894b586b770241b0edchrismair return new Command(CommandNames.RNTO, [TO_FILE]) 124016b6dd21f1a552e28f4c6894b586b770241b0edchrismair } 125016b6dd21f1a552e28f4c6894b586b770241b0edchrismair 126016b6dd21f1a552e28f4c6894b586b770241b0edchrismair void setUp() { 127016b6dd21f1a552e28f4c6894b586b770241b0edchrismair super.setUp() 128016b6dd21f1a552e28f4c6894b586b770241b0edchrismair session.setAttribute(SessionKeys.RENAME_FROM, FROM_FILE) 129016b6dd21f1a552e28f4c6894b586b770241b0edchrismair } 1309b31560d2bb49af587fe31dbc4f272d726eec298chrismair 1313523138583059ccc39bd3fbd43e2c077747eb1afchrismair private void assertRenameFromSessionProperty(String value) { 1323523138583059ccc39bd3fbd43e2c077747eb1afchrismair assert session.getAttribute(SessionKeys.RENAME_FROM) == value 1333523138583059ccc39bd3fbd43e2c077747eb1afchrismair } 1343523138583059ccc39bd3fbd43e2c077747eb1afchrismair 135016b6dd21f1a552e28f4c6894b586b770241b0edchrismair}