100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/* 200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Copyright 2008 the original author or authors. 300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * you may not use this file except in compliance with the License. 600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * You may obtain a copy of the License at 700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * http://www.apache.org/licenses/LICENSE-2.0 900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 1000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Unless required by applicable law or agreed to in writing, software 1100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * See the License for the specific language governing permissions and 1400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * limitations under the License. 1500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 1600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpackage org.mockftpserver.fake.command 1700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 1800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.Command 1900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.CommandHandler 2000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.CommandNames 2100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.command.ReplyCodes 2200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.core.session.SessionKeys 2300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.fake.filesystem.FileSystemException 2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.fake.filesystem.Permissions 2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/** 2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Tests for NlstCommandHandler 2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$ 3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair 3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairclass NlstCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def DIR = "/usr" 3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_SingleFile() { 3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile("/usr/f1.txt") 3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies([DIR]) 4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionDataWithEndOfLine("f1.txt") 4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_FilesAndDirectories() { 4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile("/usr/f1.txt") 4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createDirectory("/usr/OtherFiles") 4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile("/usr/f2.txt") 4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createDirectory("/usr/Archive") 4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies([DIR]) 4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def EXPECTED = ["f1.txt", "OtherFiles", "f2.txt", "Archive"] as Set 5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def actualLines = session.sentData[0].tokenize(endOfLine()) as Set 5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info("actualLines=$actualLines") 5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert actualLines == EXPECTED 5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionDataEndsWithEndOfLine() 5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_NoPath_UseCurrentDirectory() { 5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile("/usr/f1.txt") 5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, DIR) 6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies([]) 6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionDataWithEndOfLine("f1.txt") 6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_EmptyDirectory() { 6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies([DIR]) 6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionData("") 6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_PathSpecifiesAFile() { 7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile("/usr/f1.txt") 7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies(["/usr/f1.txt"]) 7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionDataWithEndOfLine("f1.txt") 7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_PathDoesNotExist() { 7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommandAndVerifySendDataReplies(["/DoesNotExist"]) 7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionData("") 7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_NoReadAccessToDirectory() { 8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.getEntry(DIR).permissions = new Permissions('-wx-wx-wx') 8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(1, ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotRead', DIR]) 8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_ListNamesThrowsException() { 8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.listNamesMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK) 9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(1, ReplyCodes.SYSTEM_ERROR, ERROR_MESSAGE_KEY) 9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 9500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Helper Methods 9600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 9700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair CommandHandler createCommandHandler() { 9900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair new NlstCommandHandler() 10000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair Command createValidCommand() { 10300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair return new Command(CommandNames.NLST, [DIR]) 10400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void setUp() { 10700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair super.setUp() 10800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createDirectory(DIR) 10900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 11000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 11100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair}