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
22ef13cb2302efe30bdff397e11aae379cbb419b9bchrismairimport org.mockftpserver.fake.filesystem.FileSystemException
233275b5ae2d141fda9e96af90c55d2f2f375c1093chrismairimport org.mockftpserver.fake.filesystem.Permissions
24d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair
2547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair/**
2647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * Tests for DeleCommandHandler
2747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
2847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * @version $Revision$ - $Date$
2947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair *
3047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair * @author Chris Mair
3147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair */
325303c6ae1dde5f399fe48803e677942fc4326344chrismairclass DeleCommandHandlerTest extends AbstractFakeCommandHandlerTestCase {
3347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
343275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final DIR = '/'
353275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final FILENAME = "f.txt"
363275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    static final FILE = p(DIR, FILENAME)
3747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
3847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand() {
39d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
401ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([FILE])
416fed98e9c695a9024ede347900c2689979ab5785chrismair        assertSessionReply(ReplyCodes.DELE_OK, ['dele', FILE])
4247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE) == false
4347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
4447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
4547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathIsRelative() {
46d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
4747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        setCurrentDirectory("/")
481ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([FILENAME])
496fed98e9c695a9024ede347900c2689979ab5785chrismair        assertSessionReply(ReplyCodes.DELE_OK, ['dele', FILENAME])
5047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE) == false
5147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
5247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
5347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathDoesNotExistInFileSystem() {
541ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([FILE])
55c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.isNotAFile', FILE])
5647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
5747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
5847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_PathSpecifiesADirectory() {
59d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createDirectory(FILE)
601ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([FILE])
61c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.isNotAFile', FILE])
6247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        assert fileSystem.exists(FILE)
6347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
6447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
6547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_MissingPathParameter() {
6647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        testHandleCommand_MissingRequiredParameter([])
6747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
6847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
6947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    void testHandleCommand_DeleteThrowsException() {
70d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createFile(FILE)
71ef13cb2302efe30bdff397e11aae379cbb419b9bchrismair//        overrideMethodToThrowFileSystemException("delete")
72ef13cb2302efe30bdff397e11aae379cbb419b9bchrismair        fileSystem.deleteMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY)
7347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        handleCommand([FILE])
74c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ERROR_MESSAGE_KEY)
7547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
7647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
773275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    void testHandleCommand_NoWriteAccessToParentDirectory() {
783275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        createFile(FILE)
793275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        fileSystem.getEntry(DIR).permissions = new Permissions('r-xr-xr-x')
801ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([FILE])
81c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotWrite', DIR])
823275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair        assert fileSystem.exists(FILE)
833275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair    }
843275b5ae2d141fda9e96af90c55d2f2f375c1093chrismair
8547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    //-------------------------------------------------------------------------
8647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    // Helper Methods
8747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    //-------------------------------------------------------------------------
8847712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
8947712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    CommandHandler createCommandHandler() {
9047712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        new DeleCommandHandler()
9147712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
9247712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
9347712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    Command createValidCommand() {
9447712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair        return new Command(CommandNames.DELE, [FILE])
9547712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair    }
9647712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair
9747712ff43a2b7a33f58fc18afd01929a2e4c626fchrismair}