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.UserAccount 24dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.fake.filesystem.FileSystemException 25dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.fake.filesystem.Permissions 26dfb59d50631968ab1a13002ea5421ece93169851chrismair 27dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 28dfb59d50631968ab1a13002ea5421ece93169851chrismair * Tests for MkdCommandHandler 29dfb59d50631968ab1a13002ea5421ece93169851chrismair * 30dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 31dfb59d50631968ab1a13002ea5421ece93169851chrismair * 32dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 33dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 34dfb59d50631968ab1a13002ea5421ece93169851chrismairclass MkdCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 35dfb59d50631968ab1a13002ea5421ece93169851chrismair 36dfb59d50631968ab1a13002ea5421ece93169851chrismair static final PARENT = '/' 37dfb59d50631968ab1a13002ea5421ece93169851chrismair static final DIRNAME = "usr" 38dfb59d50631968ab1a13002ea5421ece93169851chrismair static final DIR = p(PARENT, DIRNAME) 39dfb59d50631968ab1a13002ea5421ece93169851chrismair static final PERMISSIONS = new Permissions('rwx------') 40dfb59d50631968ab1a13002ea5421ece93169851chrismair 41dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand() { 42dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount.defaultPermissionsForNewDirectory = PERMISSIONS 43dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 44dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.MKD_OK, ['mkd', DIR]) 45dfb59d50631968ab1a13002ea5421ece93169851chrismair assert fileSystem.exists(DIR) 46dfb59d50631968ab1a13002ea5421ece93169851chrismair def dirEntry = fileSystem.getEntry(DIR) 47dfb59d50631968ab1a13002ea5421ece93169851chrismair assert dirEntry.permissions == PERMISSIONS 48dfb59d50631968ab1a13002ea5421ece93169851chrismair } 49dfb59d50631968ab1a13002ea5421ece93169851chrismair 50dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_PathIsRelative() { 51dfb59d50631968ab1a13002ea5421ece93169851chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, '/') 52dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIRNAME]) 53dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.MKD_OK, ['mkd', DIRNAME]) 54dfb59d50631968ab1a13002ea5421ece93169851chrismair assert fileSystem.exists(DIR) 55dfb59d50631968ab1a13002ea5421ece93169851chrismair def dirEntry = fileSystem.getEntry(DIR) 56dfb59d50631968ab1a13002ea5421ece93169851chrismair assert dirEntry.permissions == UserAccount.DEFAULT_PERMISSIONS_FOR_NEW_DIRECTORY 57dfb59d50631968ab1a13002ea5421ece93169851chrismair } 58dfb59d50631968ab1a13002ea5421ece93169851chrismair 59dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_ParentDirectoryDoesNotExist() { 60dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand(['/abc/def']) 61dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.doesNotExist', '/abc']) 62dfb59d50631968ab1a13002ea5421ece93169851chrismair } 63dfb59d50631968ab1a13002ea5421ece93169851chrismair 64dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_PathSpecifiesAFile() { 65dfb59d50631968ab1a13002ea5421ece93169851chrismair createFile(DIR) 66dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 67dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.alreadyExists', DIR]) 68dfb59d50631968ab1a13002ea5421ece93169851chrismair assert fileSystem.exists(DIR) 69dfb59d50631968ab1a13002ea5421ece93169851chrismair } 70dfb59d50631968ab1a13002ea5421ece93169851chrismair 71dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_MissingPathParameter() { 72dfb59d50631968ab1a13002ea5421ece93169851chrismair testHandleCommand_MissingRequiredParameter([]) 73dfb59d50631968ab1a13002ea5421ece93169851chrismair } 74dfb59d50631968ab1a13002ea5421ece93169851chrismair 75dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_NoWriteAccessToParentDirectory() { 76dfb59d50631968ab1a13002ea5421ece93169851chrismair fileSystem.getEntry(PARENT).permissions = new Permissions('r-xr-xr-x') 77dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 78dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotWrite', PARENT]) 79dfb59d50631968ab1a13002ea5421ece93169851chrismair } 80dfb59d50631968ab1a13002ea5421ece93169851chrismair 81dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_NoExecuteAccessToParentDirectory() { 82dfb59d50631968ab1a13002ea5421ece93169851chrismair fileSystem.getEntry(PARENT).permissions = new Permissions('rw-rw-rw-') 83dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 84dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotExecute', PARENT]) 85dfb59d50631968ab1a13002ea5421ece93169851chrismair } 86dfb59d50631968ab1a13002ea5421ece93169851chrismair 87dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_CreateDirectoryThrowsException() { 88dfb59d50631968ab1a13002ea5421ece93169851chrismair fileSystem.addMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 89dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([DIR]) 90dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ERROR_MESSAGE_KEY) 91dfb59d50631968ab1a13002ea5421ece93169851chrismair } 92dfb59d50631968ab1a13002ea5421ece93169851chrismair 93dfb59d50631968ab1a13002ea5421ece93169851chrismair void setUp() { 94dfb59d50631968ab1a13002ea5421ece93169851chrismair super.setUp() 95dfb59d50631968ab1a13002ea5421ece93169851chrismair createDirectory(PARENT) 96dfb59d50631968ab1a13002ea5421ece93169851chrismair } 97dfb59d50631968ab1a13002ea5421ece93169851chrismair 98dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 99dfb59d50631968ab1a13002ea5421ece93169851chrismair // Helper Methods 100dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 101dfb59d50631968ab1a13002ea5421ece93169851chrismair 102dfb59d50631968ab1a13002ea5421ece93169851chrismair CommandHandler createCommandHandler() { 103dfb59d50631968ab1a13002ea5421ece93169851chrismair new MkdCommandHandler() 104dfb59d50631968ab1a13002ea5421ece93169851chrismair } 105dfb59d50631968ab1a13002ea5421ece93169851chrismair 106dfb59d50631968ab1a13002ea5421ece93169851chrismair Command createValidCommand() { 107dfb59d50631968ab1a13002ea5421ece93169851chrismair return new Command(CommandNames.MKD, [DIR]) 108dfb59d50631968ab1a13002ea5421ece93169851chrismair } 109dfb59d50631968ab1a13002ea5421ece93169851chrismair 110dfb59d50631968ab1a13002ea5421ece93169851chrismair}