Home | History | Annotate | Download | only in command
      1 /*
      2  * Copyright 2008 the original author or authors.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package org.mockftpserver.fake.command
     17 
     18 import org.mockftpserver.core.command.Command
     19 import org.mockftpserver.core.command.CommandHandler
     20 import org.mockftpserver.core.command.CommandNames
     21 import org.mockftpserver.core.command.ReplyCodes
     22 import org.mockftpserver.core.session.SessionKeys
     23 import org.mockftpserver.fake.filesystem.FileSystemException
     24 import org.mockftpserver.fake.filesystem.Permissions
     25 
     26 /**
     27  * Tests for RmdCommandHandler
     28  *
     29  * @version $Revision$ - $Date$
     30  *
     31  * @author Chris Mair
     32  */
     33 class RmdCommandHandlerTest extends AbstractFakeCommandHandlerTestCase {
     34 
     35     static final PARENT = '/'
     36     static final DIR = p(PARENT, "usr")
     37 
     38     void testHandleCommand() {
     39         createDirectory(DIR)
     40         handleCommand([DIR])
     41         assertSessionReply(ReplyCodes.RMD_OK, ['rmd', DIR])
     42         assert fileSystem.exists(DIR) == false
     43     }
     44 
     45     void testHandleCommand_PathIsRelative() {
     46         def SUB = "sub"
     47         createDirectory(p(DIR, SUB))
     48         session.setAttribute(SessionKeys.CURRENT_DIRECTORY, DIR)
     49         handleCommand([SUB])
     50         assertSessionReply(ReplyCodes.RMD_OK, ['rmd', SUB])
     51         assert fileSystem.exists(p(DIR, SUB)) == false
     52     }
     53 
     54     void testHandleCommand_PathDoesNotExistInFileSystem() {
     55         handleCommand([DIR])
     56         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.doesNotExist', DIR])
     57     }
     58 
     59     void testHandleCommand_PathSpecifiesAFile() {
     60         createFile(DIR)
     61         handleCommand([DIR])
     62         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.isNotADirectory', DIR])
     63         assert fileSystem.exists(DIR)
     64     }
     65 
     66     void testHandleCommand_DirectoryIsNotEmpty() {
     67         final FILE = DIR + "/file.txt"
     68         createFile(FILE)
     69         handleCommand([DIR])
     70         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.directoryIsNotEmpty', DIR])
     71         assert fileSystem.exists(DIR)
     72         assert fileSystem.exists(FILE)
     73     }
     74 
     75     void testHandleCommand_MissingPathParameter() {
     76         testHandleCommand_MissingRequiredParameter([])
     77     }
     78 
     79     void testHandleCommand_ListNamesThrowsException() {
     80         createDirectory(DIR)
     81         fileSystem.listNamesMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY)
     82         handleCommand([DIR])
     83         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ERROR_MESSAGE_KEY)
     84     }
     85 
     86     void testHandleCommand_DeleteThrowsException() {
     87         createDirectory(DIR)
     88         fileSystem.deleteMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY)
     89         handleCommand([DIR])
     90         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ERROR_MESSAGE_KEY)
     91     }
     92 
     93     void testHandleCommand_NoWriteAccessToParentDirectory() {
     94         createDirectory(DIR)
     95         fileSystem.getEntry(PARENT).permissions = new Permissions('r-xr-xr-x')
     96         handleCommand([DIR])
     97         assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotWrite', PARENT])
     98         assert fileSystem.exists(DIR)
     99     }
    100 
    101     //-------------------------------------------------------------------------
    102     // Helper Methods
    103     //-------------------------------------------------------------------------
    104 
    105     CommandHandler createCommandHandler() {
    106         new RmdCommandHandler()
    107     }
    108 
    109     Command createValidCommand() {
    110         return new Command(CommandNames.RMD, [DIR])
    111     }
    112 
    113 }