177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair/*
277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Copyright 2008 the original author or authors.
377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *
477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Licensed under the Apache License, Version 2.0 (the "License");
577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * you may not use this file except in compliance with the License.
677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * You may obtain a copy of the License at
777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *
877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *      http://www.apache.org/licenses/LICENSE-2.0
977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *
1077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Unless required by applicable law or agreed to in writing, software
1177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * distributed under the License is distributed on an "AS IS" BASIS,
1277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * See the License for the specific language governing permissions and
1477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * limitations under the License.
1577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair */
1677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairpackage org.mockftpserver.fake.command
1777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
1877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.Command
1977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.CommandHandler
2077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.CommandNames
2177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.command.ReplyCodes
2277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.core.session.SessionKeys
2377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.FileSystemException
2477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.Permissions
2577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
2677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair/**
2777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Tests for NlstCommandHandler
2877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *
2977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @version $Revision$ - $Date$
3077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair *
3177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @author Chris Mair
3277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair */
3377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairclass NlstCommandHandlerTest extends AbstractFakeCommandHandlerTest {
3477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
3577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    def DIR = "/usr"
3677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
3777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_SingleFile() {
3877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createFile("/usr/f1.txt")
3977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies([DIR])
4077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionDataWithEndOfLine("f1.txt")
4177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
4277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
4377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_FilesAndDirectories() {
4477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createFile("/usr/f1.txt")
4577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createDirectory("/usr/OtherFiles")
4677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createFile("/usr/f2.txt")
4777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createDirectory("/usr/Archive")
4877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies([DIR])
4977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
5077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        def EXPECTED = ["f1.txt", "OtherFiles", "f2.txt", "Archive"] as Set
5177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        def actualLines = session.sentData[0].tokenize(endOfLine()) as Set
5277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        LOG.info("actualLines=$actualLines")
5377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assert actualLines == EXPECTED
5477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionDataEndsWithEndOfLine()
5577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
5677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
5777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_NoPath_UseCurrentDirectory() {
5877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createFile("/usr/f1.txt")
5977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        session.setAttribute(SessionKeys.CURRENT_DIRECTORY, DIR)
6077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies([])
6177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionDataWithEndOfLine("f1.txt")
6277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
6377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
6477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_EmptyDirectory() {
6577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies([DIR])
6677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionData("")
6777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
6877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
6977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_PathSpecifiesAFile() {
7077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createFile("/usr/f1.txt")
7177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies(["/usr/f1.txt"])
7277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionDataWithEndOfLine("f1.txt")
7377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
7477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
7577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_PathDoesNotExist() {
7677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommandAndVerifySendDataReplies(["/DoesNotExist"])
7777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionData("")
7877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
7977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
8077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_NoReadAccessToDirectory() {
8177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        fileSystem.getEntry(DIR).permissions = new Permissions('-wx-wx-wx')
8277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommand([DIR])
8377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK)
8477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionReply(1, ReplyCodes.READ_FILE_ERROR, ['filesystem.cannotRead', DIR])
8577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
8677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
8777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void testHandleCommand_ListNamesThrowsException() {
8877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        fileSystem.listNamesMethodException = new FileSystemException("bad", ERROR_MESSAGE_KEY)
8977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        handleCommand([DIR])
9077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionReply(0, ReplyCodes.TRANSFER_DATA_INITIAL_OK)
9177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        assertSessionReply(1, ReplyCodes.SYSTEM_ERROR, ERROR_MESSAGE_KEY)
9277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
9377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
9477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    //-------------------------------------------------------------------------
9577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    // Helper Methods
9677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    //-------------------------------------------------------------------------
9777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
9877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    CommandHandler createCommandHandler() {
9977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        new NlstCommandHandler()
10077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
10177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
10277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    Command createValidCommand() {
10377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        return new Command(CommandNames.NLST, [DIR])
10477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
10577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
10677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    void setUp() {
10777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        super.setUp()
10877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair        createDirectory(DIR)
10977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair    }
11077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair
11177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair}