177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair/* 277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Copyright 2008 the original author or authors. 377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * you may not use this file except in compliance with the License. 677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * You may obtain a copy of the License at 777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * http://www.apache.org/licenses/LICENSE-2.0 977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 1077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Unless required by applicable law or agreed to in writing, software 1177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * See the License for the specific language governing permissions and 1477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * limitations under the License. 1577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair */ 1677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairpackage org.mockftpserver.fake.command 1777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 1877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.Command 1977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.CommandHandler 2077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.CommandNames 2177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.ReplyCodes 2277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.session.SessionKeys 2377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.FileSystemException 2477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.Permissions 2577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 2677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair/** 2777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Tests for NlstCommandHandler 2877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 2977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @version $Revision$ - $Date$ 3077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 3177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @author Chris Mair 3277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair */ 3377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairclass NlstCommandHandlerTest extends AbstractFakeCommandHandlerTest { 3477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 3577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def DIR = "/usr" 3677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 3777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_SingleFile() { 3877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createFile("/usr/f1.txt") 3977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies([DIR]) 4077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionDataWithEndOfLine("f1.txt") 4177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 4277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 4377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_FilesAndDirectories() { 4477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createFile("/usr/f1.txt") 4577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createDirectory("/usr/OtherFiles") 4677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createFile("/usr/f2.txt") 4777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createDirectory("/usr/Archive") 4877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies([DIR]) 4977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 5077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def EXPECTED = ["f1.txt", "OtherFiles", "f2.txt", "Archive"] as Set 5177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def actualLines = session.sentData[0].tokenize(endOfLine()) as Set 5277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair LOG.info("actualLines=$actualLines") 5377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert actualLines == EXPECTED 5477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionDataEndsWithEndOfLine() 5577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 5677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 5777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_NoPath_UseCurrentDirectory() { 5877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createFile("/usr/f1.txt") 5977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, DIR) 6077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies([]) 6177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionDataWithEndOfLine("f1.txt") 6277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 6377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 6477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_EmptyDirectory() { 6577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies([DIR]) 6677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionData("") 6777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 6877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 6977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_PathSpecifiesAFile() { 7077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createFile("/usr/f1.txt") 7177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies(["/usr/f1.txt"]) 7277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionDataWithEndOfLine("f1.txt") 7377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 7477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 7577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_PathDoesNotExist() { 7677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommandAndVerifySendDataReplies(["/DoesNotExist"]) 7777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionData("") 7877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 7977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 8077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_NoReadAccessToDirectory() { 8177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair fileSystem.getEntry(DIR).permissions = new Permissions('-wx-wx-wx') 8277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommand([DIR]) 8377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 8477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionReply(1, ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotRead', DIR]) 8577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 8677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 8777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testHandleCommand_ListNamesThrowsException() { 8877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair fileSystem.listNamesMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 8977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair handleCommand([DIR]) 9077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 9177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assertSessionReply(1, ReplyCodes.SYSTEM_ERROR, ERROR_MESSAGE_KEY) 9277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 9377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 9477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair //------------------------------------------------------------------------- 9577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // Helper Methods 9677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair //------------------------------------------------------------------------- 9777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 9877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair CommandHandler createCommandHandler() { 9977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair new NlstCommandHandler() 10077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 10177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 10277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair Command createValidCommand() { 10377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair return new Command(CommandNames.NLST, [DIR]) 10477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 10577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 10677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void setUp() { 10777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair super.setUp() 10877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair createDirectory(DIR) 10977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 11077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 11177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair}