15e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair/*
25e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * Copyright 2008 the original author or authors.
35e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *
45e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * Licensed under the Apache License, Version 2.0 (the "License");
55e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * you may not use this file except in compliance with the License.
65e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * You may obtain a copy of the License at
75e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *
85e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *      http://www.apache.org/licenses/LICENSE-2.0
95e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *
105e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * Unless required by applicable law or agreed to in writing, software
115e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * distributed under the License is distributed on an "AS IS" BASIS,
125e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * See the License for the specific language governing permissions and
145e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * limitations under the License.
155e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair */
165e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairpackage org.mockftpserver.fake.command
175e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
185e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairimport org.mockftpserver.core.command.Command
195e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairimport org.mockftpserver.core.command.CommandHandler
205e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairimport org.mockftpserver.core.command.CommandNames
215e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairimport org.mockftpserver.core.command.ReplyCodes
225e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismairimport org.mockftpserver.core.session.SessionKeys
23d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismairimport org.mockftpserver.fake.filesystem.Permissions
24d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair
255e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair/**
265e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * Tests for CdupCommandHandler
275e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *
285e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * @version $Revision$ - $Date$
295e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair *
305e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair * @author Chris Mair
315e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair */
325303c6ae1dde5f399fe48803e677942fc4326344chrismairclass CdupCommandHandlerTest extends AbstractFakeCommandHandlerTestCase {
335e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
345e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    def DIR = "/usr"
355e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    def SUBDIR = "${DIR}/sub"
365e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
375e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    void testHandleCommand() {
385e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        setCurrentDirectory(SUBDIR)
391ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([])
406fed98e9c695a9024ede347900c2689979ab5785chrismair        assertSessionReply(ReplyCodes.CDUP_OK, ['cdup', DIR])
415e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        assert session.getAttribute(SessionKeys.CURRENT_DIRECTORY) == DIR
425e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    }
435e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
445e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    void testHandleCommand_NoParentDirectory() {
455e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        setCurrentDirectory('/')
461ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([])
47c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.parentDirectoryDoesNotExist', '/'])
485e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        assert session.getAttribute(SessionKeys.CURRENT_DIRECTORY) == '/'
495e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    }
505e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
51d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair    void testHandleCommand_NoExecuteAccessToDirectory() {
52d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair        setCurrentDirectory(SUBDIR)
53d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair        def dir = fileSystem.getEntry(DIR)
54d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair        dir.permissions = new Permissions('rw-rw-rw-')
551ca7eb7f6c60913fb6edf267a79e3991d14ae3f7chrismair        handleCommand([])
56c4a22299b897279a8518308b9067da84af077281chrismair        assertSessionReply(ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotExecute', DIR])
57d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair        assert session.getAttribute(SessionKeys.CURRENT_DIRECTORY) == SUBDIR
58d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair    }
59d3d88694d35ecd5908d3e0f7cc3c1e4d69eb37f2chrismair
605e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    //-------------------------------------------------------------------------
615e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    // Helper Methods
625e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    //-------------------------------------------------------------------------
635e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
645e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    CommandHandler createCommandHandler() {
655e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        new CdupCommandHandler()
665e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    }
675e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
685e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    Command createValidCommand() {
695e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        return new Command(CommandNames.CDUP, [])
705e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    }
715e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
725e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    void setUp() {
735e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair        super.setUp()
74d150a70ca8f8ad6cc300cf56174c8846066a4ad4chrismair        createDirectory(SUBDIR)
755e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair    }
765e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair
775e9a0227eb376a4d67ada00c7ea54d3f7962cefdchrismair}