1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2008 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.fake.command 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.Command 19dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandHandler 20dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandNames 21dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.ReplyCodes 22dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.session.SessionKeys 23dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.fake.filesystem.FileSystemException 24dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.fake.filesystem.Permissions 25dfb59d50631968ab1a13002ea5421ece93169851chrismair 26dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 27dfb59d50631968ab1a13002ea5421ece93169851chrismair * Tests for NlstCommandHandler 28dfb59d50631968ab1a13002ea5421ece93169851chrismair * 29dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 30dfb59d50631968ab1a13002ea5421ece93169851chrismair * 31dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 32dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 33dfb59d50631968ab1a13002ea5421ece93169851chrismairclass NlstCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 34dfb59d50631968ab1a13002ea5421ece93169851chrismair 35dfb59d50631968ab1a13002ea5421ece93169851chrismair def DIR = "/usr" 36dfb59d50631968ab1a13002ea5421ece93169851chrismair 37dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_SingleFile() { 38dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile("/usr/f1.txt") 39dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies([DIR]) 40dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionDataWithEndOfLine("f1.txt") 41dfb59d50631968ab1a13002ea5421ece93169851chrismair } 42dfb59d50631968ab1a13002ea5421ece93169851chrismair 43dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_FilesAndDirectories() { 44dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile("/usr/f1.txt") 45dfb59d50631968ab1a13002ea5421ece93169851chrismair createDirectory("/usr/OtherFiles") 46dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile("/usr/f2.txt") 47dfb59d50631968ab1a13002ea5421ece93169851chrismair createDirectory("/usr/Archive") 48dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies([DIR]) 49dfb59d50631968ab1a13002ea5421ece93169851chrismair 50dfb59d50631968ab1a13002ea5421ece93169851chrismair def EXPECTED = ["f1.txt", "OtherFiles", "f2.txt", "Archive"] as Set 51dfb59d50631968ab1a13002ea5421ece93169851chrismair def actualLines = session.sentData[0].tokenize(endOfLine()) as Set 52dfb59d50631968ab1a13002ea5421ece93169851chrismair LOG.info("actualLines=$actualLines") 53dfb59d50631968ab1a13002ea5421ece93169851chrismair assert actualLines == EXPECTED 54dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionDataEndsWithEndOfLine() 55dfb59d50631968ab1a13002ea5421ece93169851chrismair } 56dfb59d50631968ab1a13002ea5421ece93169851chrismair 57dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_NoPath_UseCurrentDirectory() { 58dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile("/usr/f1.txt") 59dfb59d50631968ab1a13002ea5421ece93169851chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, DIR) 60dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies([]) 61dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionDataWithEndOfLine("f1.txt") 62dfb59d50631968ab1a13002ea5421ece93169851chrismair } 63dfb59d50631968ab1a13002ea5421ece93169851chrismair 64dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_EmptyDirectory() { 65dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies([DIR]) 66dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionData("") 67dfb59d50631968ab1a13002ea5421ece93169851chrismair } 68dfb59d50631968ab1a13002ea5421ece93169851chrismair 69dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_PathSpecifiesAFile() { 70dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile("/usr/f1.txt") 71dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies(["/usr/f1.txt"]) 72dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionDataWithEndOfLine("f1.txt") 73dfb59d50631968ab1a13002ea5421ece93169851chrismair } 74dfb59d50631968ab1a13002ea5421ece93169851chrismair 75dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_PathDoesNotExist() { 76dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommandAndVerifySendDataReplies(["/DoesNotExist"]) 77dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionData("") 78dfb59d50631968ab1a13002ea5421ece93169851chrismair } 79dfb59d50631968ab1a13002ea5421ece93169851chrismair 80dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_NoReadAccessToDirectory() { 81dfb59d50631968ab1a13002ea5421ece93169851chrismair fileSystem.getEntry(DIR).permissions = new Permissions('-wx-wx-wx') 82dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 83dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 84dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(1, ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotRead', DIR]) 85dfb59d50631968ab1a13002ea5421ece93169851chrismair } 86dfb59d50631968ab1a13002ea5421ece93169851chrismair 87dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_ListNamesThrowsException() { 88dfb59d50631968ab1a13002ea5421ece93169851chrismair fileSystem.listNamesMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 89dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 90dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 91dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(1, ReplyCodes.SYSTEM_ERROR, ERROR_MESSAGE_KEY) 92dfb59d50631968ab1a13002ea5421ece93169851chrismair } 93dfb59d50631968ab1a13002ea5421ece93169851chrismair 94dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 95dfb59d50631968ab1a13002ea5421ece93169851chrismair // Helper Methods 96dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 97dfb59d50631968ab1a13002ea5421ece93169851chrismair 98dfb59d50631968ab1a13002ea5421ece93169851chrismair CommandHandler createCommandHandler() { 99dfb59d50631968ab1a13002ea5421ece93169851chrismair new NlstCommandHandler() 100dfb59d50631968ab1a13002ea5421ece93169851chrismair } 101dfb59d50631968ab1a13002ea5421ece93169851chrismair 102dfb59d50631968ab1a13002ea5421ece93169851chrismair Command createValidCommand() { 103dfb59d50631968ab1a13002ea5421ece93169851chrismair return new Command(CommandNames.NLST, [DIR]) 104dfb59d50631968ab1a13002ea5421ece93169851chrismair } 105dfb59d50631968ab1a13002ea5421ece93169851chrismair 106dfb59d50631968ab1a13002ea5421ece93169851chrismair void setUp() { 107dfb59d50631968ab1a13002ea5421ece93169851chrismair super.setUp() 108dfb59d50631968ab1a13002ea5421ece93169851chrismair createDirectory(DIR) 109dfb59d50631968ab1a13002ea5421ece93169851chrismair } 110dfb59d50631968ab1a13002ea5421ece93169851chrismair 111dfb59d50631968ab1a13002ea5421ece93169851chrismair}