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.UserAccount 2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.fake.filesystem.FileSystemException 2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.fake.filesystem.Permissions 2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/** 2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Tests for MkdCommandHandler 2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$ 3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair 3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairclass MkdCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair static final PARENT = '/' 3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair static final DIRNAME = "usr" 3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair static final DIR = p(PARENT, DIRNAME) 3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair static final PERMISSIONS = new Permissions('rwx------') 4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand() { 4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair userAccount.defaultPermissionsForNewDirectory = PERMISSIONS 4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.MKD_OK, ['mkd', DIR]) 4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(DIR) 4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def dirEntry = fileSystem.getEntry(DIR) 4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert dirEntry.permissions == PERMISSIONS 4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_PathIsRelative() { 5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair session.setAttribute(SessionKeys.CURRENT_DIRECTORY, '/') 5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIRNAME]) 5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.MKD_OK, ['mkd', DIRNAME]) 5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(DIR) 5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def dirEntry = fileSystem.getEntry(DIR) 5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert dirEntry.permissions == UserAccount.DEFAULT_PERMISSIONS_FOR_NEW_DIRECTORY 5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_ParentDirectoryDoesNotExist() { 6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand(['/abc/def']) 6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.doesNotExist', '/abc']) 6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_PathSpecifiesAFile() { 6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createFile(DIR) 6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.alreadyExists', DIR]) 6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert fileSystem.exists(DIR) 6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_MissingPathParameter() { 7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair testHandleCommand_MissingRequiredParameter([]) 7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_NoWriteAccessToParentDirectory() { 7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.getEntry(PARENT).permissions = new Permissions('r-xr-xr-x') 7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotWrite', PARENT]) 7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_NoExecuteAccessToParentDirectory() { 8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.getEntry(PARENT).permissions = new Permissions('rw-rw-rw-') 8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotExecute', PARENT]) 8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testHandleCommand_CreateDirectoryThrowsException() { 8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair fileSystem.addMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY) 8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair handleCommand([DIR]) 9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertSessionReply(ReplyCodes.READ_FILE_ERROR, ERROR_MESSAGE_KEY) 9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void setUp() { 9400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair super.setUp() 9500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair createDirectory(PARENT) 9600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 9700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 9900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair // Helper Methods 10000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair //------------------------------------------------------------------------- 10100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair CommandHandler createCommandHandler() { 10300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair new MkdCommandHandler() 10400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 10600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair Command createValidCommand() { 10700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair return new Command(CommandNames.MKD, [DIR]) 10800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 10900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 11000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair}