DeleCommandHandlerTest.groovy revision 3275b5ae2d141fda9e96af90c55d2f2f375c1093
147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair/*
247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * Copyright 2008 the original author or authors.
347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * Licensed under the Apache License, Version 2.0 (the "License");
547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * you may not use this file except in compliance with the License.
647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * You may obtain a copy of the License at
747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *      http://www.apache.org/licenses/LICENSE-2.0
947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
1047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * Unless required by applicable law or agreed to in writing, software
1147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * distributed under the License is distributed on an "AS IS" BASIS,
1247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * See the License for the specific language governing permissions and
1447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * limitations under the License.
1547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair */
1647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismairpackage org.mockftpserver.fake.command
1747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
1847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismairimport org.mockftpserver.core.command.Command
1947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismairimport org.mockftpserver.core.command.CommandHandler
2047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismairimport org.mockftpserver.core.command.CommandNames
2147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismairimport org.mockftpserver.core.command.ReplyCodes
223275b5ae2d141fda9e96af90c55d2f2f375c1093chrismairimport org.mockftpserver.fake.filesystem.Permissions
23d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair
2447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair/**
2547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * Tests for DeleCommandHandler
2647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
2747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * @version $Revision$ - $Date$
2847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
2947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * @author Chris Mair
3047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair */
316950d7499a1865c24b29d555591130114dbc25c0chrismairclass DeleCommandHandlerTest extends AbstractFakeCommandHandlerTest {
3247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
333275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final DIR = '/'
343275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final FILENAME = "f.txt"
353275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final FILE = p(DIR, FILENAME)
3647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
3747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand() {
38d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
3947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        commandHandler.handleCommand(createCommand([FILE]), session)
406fed98e9c695a9024ede347900c2689979ab5785chrismair        assertSessionReply(ReplyCodes.DELE_OK, ['dele', FILE])
4147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE) == false
4247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
4347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
4447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathIsRelative() {
45d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
4647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        setCurrentDirectory("/")
4747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        commandHandler.handleCommand(createCommand([FILENAME]), session)
486fed98e9c695a9024ede347900c2689979ab5785chrismair        assertSessionReply(ReplyCodes.DELE_OK, ['dele', FILENAME])
4947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE) == false
5047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
5147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
5247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathDoesNotExistInFileSystem() {
5347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        commandHandler.handleCommand(createCommand([FILE]), session)
54777c1c842d19df00d2529ccf43e4f4c26cfd39fbchrismair        assertSessionReply(ReplyCodes.EXISTING_FILE_ERROR, ['filesystem.isNotAFile', FILE])
5547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
5647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
5747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathSpecifiesADirectory() {
58d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createDirectory(FILE)
5947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        commandHandler.handleCommand(createCommand([FILE]), session)
60777c1c842d19df00d2529ccf43e4f4c26cfd39fbchrismair        assertSessionReply(ReplyCodes.EXISTING_FILE_ERROR, ['filesystem.isNotAFile', FILE])
6147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE)
6247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
6347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
6447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_MissingPathParameter() {
6547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        testHandleCommand_MissingRequiredParameter([])
6647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
6747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
6847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_DeleteThrowsException() {
69d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
7047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        overrideMethodToThrowFileSystemException("delete")
7147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        handleCommand([FILE])
72777c1c842d19df00d2529ccf43e4f4c26cfd39fbchrismair        assertSessionReply(ReplyCodes.EXISTING_FILE_ERROR, ERROR_MESSAGE_KEY)
7347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
7447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
753275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    void testHandleCommand_NoWriteAccessToParentDirectory() {
763275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        createFile(FILE)
773275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        fileSystem.getEntry(DIR).permissions = new Permissions('r-xr-xr-x')
783275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        commandHandler.handleCommand(createCommand([FILE]), session)
793275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        assertSessionReply(ReplyCodes.EXISTING_FILE_ERROR, ['filesystem.cannotWrite', DIR])
803275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        assert fileSystem.exists(FILE)
813275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    }
823275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair
8347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    //-------------------------------------------------------------------------
8447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    // Helper Methods
8547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    //-------------------------------------------------------------------------
8647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
8747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    CommandHandler createCommandHandler() {
8847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        new DeleCommandHandler()
8947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
9047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
9147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    Command createValidCommand() {
9247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        return new Command(CommandNames.DELE, [FILE])
9347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
9447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
9547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair}