160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/*
260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Copyright 2008 the original author or authors.
360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Licensed under the Apache License, Version 2.0 (the "License");
560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * you may not use this file except in compliance with the License.
660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * You may obtain a copy of the License at
760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *      http://www.apache.org/licenses/LICENSE-2.0
960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
1060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Unless required by applicable law or agreed to in writing, software
1160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * See the License for the specific language governing permissions and
1460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * limitations under the License.
1560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */
1660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairpackage org.mockftpserver.fake.command
1760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
1860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.Command
1960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.CommandHandler
2060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.CommandNames
2160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.command.ReplyCodes
2260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.core.session.SessionKeys
2360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.fake.filesystem.Permissions
2460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
2560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/**
2660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Tests for RnfrCommandHandler
2760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
2860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @version $Revision$ - $Date$
2960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair *
3060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @author Chris Mair
3160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */
3260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairclass RnfrCommandHandlerTest extends AbstractFakeCommandHandlerTest {
3360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
3460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    def FILE = "/file.txt"
3560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
3660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand() {
3760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        createFile(FILE)
3860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        handleCommand([FILE])
3960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assertSessionReply(ReplyCodes.RNFR_OK, 'rnfr')
4060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FILE
4160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
4260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
4360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand_PathIsRelative() {
4460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        createFile(FILE)
4560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        session.setAttribute(SessionKeys.CURRENT_DIRECTORY, "/")
4660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        handleCommand(["file.txt"])
4760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assertSessionReply(ReplyCodes.RNFR_OK, 'rnfr')
4860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FILE
4960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
5060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
5160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand_PathDoesNotExistInFileSystem() {
5260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        handleCommand([FILE])
5360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.doesNotExist', FILE])
5460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == null
5560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
5660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
5760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand_PathSpecifiesADirectory() {
5860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        createDirectory(FILE)
5960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        handleCommand([FILE])
6060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.isNotAFile', FILE])
6160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == null
6260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
6360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
6460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand_NoReadAccessToFile() {
6560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        createFile(FILE)
6660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        fileSystem.getEntry(FILE).permissions = new Permissions('-wx-wx-wx')
6760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        handleCommand([FILE])
6860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotRead', FILE])
6960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
7060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
7160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    void testHandleCommand_MissingPathParameter() {
7260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        testHandleCommand_MissingRequiredParameter([])
7360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
7460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
7560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    //-------------------------------------------------------------------------
7660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    // Helper Methods
7760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    //-------------------------------------------------------------------------
7860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
7960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    CommandHandler createCommandHandler() {
8060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        new RnfrCommandHandler()
8160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
8260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
8360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    Command createValidCommand() {
8460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair        return new Command(CommandNames.RNFR, [FILE])
8560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair    }
8660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair
8760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair}