RntoCommandHandlerTest.groovy revision 9b31560d2bb49af587fe31dbc4f272d726eec298
1016b6dd21f1a552e28f4c6894b586b770241b0edchrismair/*
2016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Copyright 2008 the original author or authors.
3016b6dd21f1a552e28f4c6894b586b770241b0edchrismair *
4016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Licensed under the Apache License, Version 2.0 (the "License");
5016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * you may not use this file except in compliance with the License.
6016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * You may obtain a copy of the License at
7016b6dd21f1a552e28f4c6894b586b770241b0edchrismair *
8016b6dd21f1a552e28f4c6894b586b770241b0edchrismair *      http://www.apache.org/licenses/LICENSE-2.0
9016b6dd21f1a552e28f4c6894b586b770241b0edchrismair *
10016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Unless required by applicable law or agreed to in writing, software
11016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * distributed under the License is distributed on an "AS IS" BASIS,
12016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * See the License for the specific language governing permissions and
14016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * limitations under the License.
15016b6dd21f1a552e28f4c6894b586b770241b0edchrismair */
16016b6dd21f1a552e28f4c6894b586b770241b0edchrismairpackage org.mockftpserver.fake.command
17016b6dd21f1a552e28f4c6894b586b770241b0edchrismair
18016b6dd21f1a552e28f4c6894b586b770241b0edchrismairimport org.mockftpserver.core.command.Command
19016b6dd21f1a552e28f4c6894b586b770241b0edchrismairimport org.mockftpserver.core.command.CommandHandler
2070cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.core.command.CommandNames
2170cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.core.command.ReplyCodes
229b31560d2bb49af587fe31dbc4f272d726eec298chrismairimport org.mockftpserver.core.session.SessionKeys
2370cc38904cf8c9abc6f9994cec83e2b7685a607dchrismairimport org.mockftpserver.fake.filesystem.FileSystemException
2470cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair
25016b6dd21f1a552e28f4c6894b586b770241b0edchrismair/**
26016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * Tests for RntoCommandHandler
279b31560d2bb49af587fe31dbc4f272d726eec298chrismair *
287d4a3a2990f1a386eaf9d50cf05a9d45fab32de6chrismair * @version $Revision$ - $Date$
29016b6dd21f1a552e28f4c6894b586b770241b0edchrismair *
30016b6dd21f1a552e28f4c6894b586b770241b0edchrismair * @author Chris Mair
31016b6dd21f1a552e28f4c6894b586b770241b0edchrismair */
32ad98f727deebfd941b446f0f82337b2244e43b6cchrismairclass RntoCommandHandlerTest extends AbstractLoginRequiredCommandHandlerTest {
33016b6dd21f1a552e28f4c6894b586b770241b0edchrismair
34016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    def FROM_FILE = "/from.txt"
35016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    def TO_FILE = "/file.txt"
369b31560d2bb49af587fe31dbc4f272d726eec298chrismair
37016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand() {
38016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert fileSystem.createFile(FROM_FILE)
399b31560d2bb49af587fe31dbc4f272d726eec298chrismair        commandHandler.handleCommand(createCommand([TO_FILE]), session)
40016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assertSessionReply(ReplyCodes.RNTO_OK)
41016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert !fileSystem.exists(FROM_FILE), FROM_FILE
42016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert fileSystem.exists(TO_FILE), TO_FILE
43016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == null
449b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
459b31560d2bb49af587fe31dbc4f272d726eec298chrismair
46cb6dfe65d98c626326091432c4824764f38ab032chrismair    void testHandleCommand_PathIsRelative() {
47cb6dfe65d98c626326091432c4824764f38ab032chrismair        assert fileSystem.createFile(FROM_FILE)
48cb6dfe65d98c626326091432c4824764f38ab032chrismair        session.setAttribute(SessionKeys.CURRENT_DIRECTORY, "/")
499b31560d2bb49af587fe31dbc4f272d726eec298chrismair        commandHandler.handleCommand(createCommand(["file.txt"]), session)
50cb6dfe65d98c626326091432c4824764f38ab032chrismair        assertSessionReply(ReplyCodes.RNTO_OK)
51cb6dfe65d98c626326091432c4824764f38ab032chrismair        assert !fileSystem.exists(FROM_FILE), FROM_FILE
52cb6dfe65d98c626326091432c4824764f38ab032chrismair        assert fileSystem.exists(TO_FILE), TO_FILE
53cb6dfe65d98c626326091432c4824764f38ab032chrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == null
549b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
559b31560d2bb49af587fe31dbc4f272d726eec298chrismair
56016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand_FromFileNotSetInSession() {
57016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        session.removeAttribute(SessionKeys.RENAME_FROM)
58016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        testHandleCommand_MissingRequiredSessionAttribute()
599b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
60016b6dd21f1a552e28f4c6894b586b770241b0edchrismair
61016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand_ToFilenameNotValid() {
62016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert fileSystem.createFile(FROM_FILE)
639b31560d2bb49af587fe31dbc4f272d726eec298chrismair        commandHandler.handleCommand(createCommand(["///"]), session)
64016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assertSessionReply(ReplyCodes.FILENAME_NOT_VALID, "///")
65016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FROM_FILE
669b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
679b31560d2bb49af587fe31dbc4f272d726eec298chrismair
68016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand_ToFilenameSpecifiesADirectory() {
69016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert fileSystem.createDirectory(TO_FILE)
709b31560d2bb49af587fe31dbc4f272d726eec298chrismair        commandHandler.handleCommand(createCommand([TO_FILE]), session)
71016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assertSessionReply(ReplyCodes.NEW_FILE_ERROR, TO_FILE)
72016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FROM_FILE
739b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
749b31560d2bb49af587fe31dbc4f272d726eec298chrismair
75016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand_RenameFails() {
769b31560d2bb49af587fe31dbc4f272d726eec298chrismair        commandHandler.handleCommand(createCommand([TO_FILE]), session)
77016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assertSessionReply(ReplyCodes.FILENAME_NOT_VALID, TO_FILE)
78016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FROM_FILE
799b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
809b31560d2bb49af587fe31dbc4f272d726eec298chrismair
8170cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair    void testHandleCommand_RenameThrowsException() {
8270cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair        def newMethod = {String from, String to -> throw new FileSystemException("bad") }
8370cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair        overrideMethod(fileSystem, "rename", newMethod)
8470cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair
8570cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair        commandHandler.handleCommand(createCommand([TO_FILE]), session)
8670cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair        assertSessionReply(ReplyCodes.NEW_FILE_ERROR)
8770cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair        assert session.getAttribute(SessionKeys.RENAME_FROM) == FROM_FILE
889b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
8970cc38904cf8c9abc6f9994cec83e2b7685a607dchrismair
90016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void testHandleCommand_MissingPathParameter() {
91016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        testHandleCommand_MissingRequiredParameter([])
92016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    }
939b31560d2bb49af587fe31dbc4f272d726eec298chrismair
94016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    //-------------------------------------------------------------------------
95016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    // Helper Methods
96016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    //-------------------------------------------------------------------------
979b31560d2bb49af587fe31dbc4f272d726eec298chrismair
989b31560d2bb49af587fe31dbc4f272d726eec298chrismair    CommandHandler createCommandHandler() {
999b31560d2bb49af587fe31dbc4f272d726eec298chrismair        new RntoCommandHandler()
1009b31560d2bb49af587fe31dbc4f272d726eec298chrismair    }
1019b31560d2bb49af587fe31dbc4f272d726eec298chrismair
102016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    Command createValidCommand() {
103016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        return new Command(CommandNames.RNTO, [TO_FILE])
104016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    }
105016b6dd21f1a552e28f4c6894b586b770241b0edchrismair
106016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    void setUp() {
107016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        super.setUp()
108016b6dd21f1a552e28f4c6894b586b770241b0edchrismair        session.setAttribute(SessionKeys.RENAME_FROM, FROM_FILE)
109016b6dd21f1a552e28f4c6894b586b770241b0edchrismair    }
1109b31560d2bb49af587fe31dbc4f272d726eec298chrismair
111016b6dd21f1a552e28f4c6894b586b770241b0edchrismair}