1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2008 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.fake.command 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.Command 19dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandHandler 20dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.CommandNames 21dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.command.ReplyCodes 22dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.session.SessionKeys 23dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.fake.UserAccount 24dfb59d50631968ab1a13002ea5421ece93169851chrismair 25dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 26dfb59d50631968ab1a13002ea5421ece93169851chrismair * Tests for PassCommandHandler 27dfb59d50631968ab1a13002ea5421ece93169851chrismair * 28dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 29dfb59d50631968ab1a13002ea5421ece93169851chrismair * 30dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 31dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 32dfb59d50631968ab1a13002ea5421ece93169851chrismairclass PassCommandHandlerTest extends AbstractFakeCommandHandlerTestCase { 33dfb59d50631968ab1a13002ea5421ece93169851chrismair 34dfb59d50631968ab1a13002ea5421ece93169851chrismair def USERNAME = "user123" 35dfb59d50631968ab1a13002ea5421ece93169851chrismair def PASSWORD = "password123" 36dfb59d50631968ab1a13002ea5421ece93169851chrismair def HOME_DIRECTORY = "/" 37dfb59d50631968ab1a13002ea5421ece93169851chrismair UserAccount userAccount 38dfb59d50631968ab1a13002ea5421ece93169851chrismair 39dfb59d50631968ab1a13002ea5421ece93169851chrismair boolean testNotLoggedIn = false 40dfb59d50631968ab1a13002ea5421ece93169851chrismair 41dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_PasswordCorrect() { 42dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 43dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([PASSWORD]) 44dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.PASS_OK, 'pass') 45dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(true) 46dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(HOME_DIRECTORY) 47dfb59d50631968ab1a13002ea5421ece93169851chrismair } 48dfb59d50631968ab1a13002ea5421ece93169851chrismair 49dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_PasswordCorrect_AccountRequired() { 50dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 51dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount.accountRequiredForLogin = true 52dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([PASSWORD]) 53dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.PASS_NEED_ACCOUNT, 'pass.needAccount') 54dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(true) 55dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(HOME_DIRECTORY) 56dfb59d50631968ab1a13002ea5421ece93169851chrismair } 57dfb59d50631968ab1a13002ea5421ece93169851chrismair 58dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_PasswordIncorrect() { 59dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 60dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand(["wrong"]) 61dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.PASS_LOG_IN_FAILED, 'pass.loginFailed') 62dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 63dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 64dfb59d50631968ab1a13002ea5421ece93169851chrismair } 65dfb59d50631968ab1a13002ea5421ece93169851chrismair 66dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_PasswordWrongButIgnored() { 67dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount.passwordCheckedDuringValidation = false 68dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 69dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand(["wrong"]) 70dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.PASS_OK, 'pass') 71dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(true) 72dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(HOME_DIRECTORY) 73dfb59d50631968ab1a13002ea5421ece93169851chrismair } 74dfb59d50631968ab1a13002ea5421ece93169851chrismair 75dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_HomeDirectoryNotDefinedForUserAccount() { 76dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount.homeDirectory = '' 77dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 78dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([PASSWORD]) 79dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.USER_ACCOUNT_NOT_VALID, "login.userAccountNotValid") 80dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 81dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 82dfb59d50631968ab1a13002ea5421ece93169851chrismair } 83dfb59d50631968ab1a13002ea5421ece93169851chrismair 84dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserExists_HomeDirectoryDoesNotExist() { 85dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount.homeDirectory = '/abc/def' 86dfb59d50631968ab1a13002ea5421ece93169851chrismair serverConfiguration.userAccounts[USERNAME] = userAccount 87dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([PASSWORD]) 88dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.USER_ACCOUNT_NOT_VALID, "login.homeDirectoryNotValid") 89dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 90dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 91dfb59d50631968ab1a13002ea5421ece93169851chrismair } 92dfb59d50631968ab1a13002ea5421ece93169851chrismair 93dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UserDoesNotExist() { 94dfb59d50631968ab1a13002ea5421ece93169851chrismair handleCommand([PASSWORD]) 95dfb59d50631968ab1a13002ea5421ece93169851chrismair assertSessionReply(ReplyCodes.USER_ACCOUNT_NOT_VALID, "login.userAccountNotValid") 96dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 97dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 98dfb59d50631968ab1a13002ea5421ece93169851chrismair } 99dfb59d50631968ab1a13002ea5421ece93169851chrismair 100dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_UsernameNotSetInSession() { 101dfb59d50631968ab1a13002ea5421ece93169851chrismair session.removeAttribute(SessionKeys.USERNAME) 102dfb59d50631968ab1a13002ea5421ece93169851chrismair testHandleCommand_MissingRequiredSessionAttribute() 103dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 104dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 105dfb59d50631968ab1a13002ea5421ece93169851chrismair } 106dfb59d50631968ab1a13002ea5421ece93169851chrismair 107dfb59d50631968ab1a13002ea5421ece93169851chrismair void testHandleCommand_MissingPasswordParameter() { 108dfb59d50631968ab1a13002ea5421ece93169851chrismair testHandleCommand_MissingRequiredParameter([]) 109dfb59d50631968ab1a13002ea5421ece93169851chrismair assertUserAccountInSession(false) 110dfb59d50631968ab1a13002ea5421ece93169851chrismair assertCurrentDirectory(null) 111dfb59d50631968ab1a13002ea5421ece93169851chrismair } 112dfb59d50631968ab1a13002ea5421ece93169851chrismair 113dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 114dfb59d50631968ab1a13002ea5421ece93169851chrismair // Abstract and Overridden Methods 115dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 116dfb59d50631968ab1a13002ea5421ece93169851chrismair 117dfb59d50631968ab1a13002ea5421ece93169851chrismair void setUp() { 118dfb59d50631968ab1a13002ea5421ece93169851chrismair super.setUp() 119dfb59d50631968ab1a13002ea5421ece93169851chrismair 120dfb59d50631968ab1a13002ea5421ece93169851chrismair createDirectory(HOME_DIRECTORY) 121dfb59d50631968ab1a13002ea5421ece93169851chrismair 122dfb59d50631968ab1a13002ea5421ece93169851chrismair userAccount = new UserAccount(USERNAME, PASSWORD, HOME_DIRECTORY) 123dfb59d50631968ab1a13002ea5421ece93169851chrismair 124dfb59d50631968ab1a13002ea5421ece93169851chrismair session.setAttribute(SessionKeys.USERNAME, USERNAME) 125dfb59d50631968ab1a13002ea5421ece93169851chrismair session.removeAttribute(SessionKeys.USER_ACCOUNT) 126dfb59d50631968ab1a13002ea5421ece93169851chrismair } 127dfb59d50631968ab1a13002ea5421ece93169851chrismair 128dfb59d50631968ab1a13002ea5421ece93169851chrismair CommandHandler createCommandHandler() { 129dfb59d50631968ab1a13002ea5421ece93169851chrismair new PassCommandHandler() 130dfb59d50631968ab1a13002ea5421ece93169851chrismair } 131dfb59d50631968ab1a13002ea5421ece93169851chrismair 132dfb59d50631968ab1a13002ea5421ece93169851chrismair Command createValidCommand() { 133dfb59d50631968ab1a13002ea5421ece93169851chrismair return new Command(CommandNames.PASS, [PASSWORD]) 134dfb59d50631968ab1a13002ea5421ece93169851chrismair } 135dfb59d50631968ab1a13002ea5421ece93169851chrismair 136dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 137dfb59d50631968ab1a13002ea5421ece93169851chrismair // Helper Methods 138dfb59d50631968ab1a13002ea5421ece93169851chrismair //------------------------------------------------------------------------- 139dfb59d50631968ab1a13002ea5421ece93169851chrismair 140dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 141dfb59d50631968ab1a13002ea5421ece93169851chrismair * Assert that the UserAccount object is in the session, depending on the value of isUserAccountInSession. 142dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param isUserAccountInSession - true if the UserAccount is expected in the session; false if it is not expected 143dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 144dfb59d50631968ab1a13002ea5421ece93169851chrismair private void assertUserAccountInSession(boolean isUserAccountInSession) { 145dfb59d50631968ab1a13002ea5421ece93169851chrismair def expectedValue = isUserAccountInSession ? userAccount : null 146dfb59d50631968ab1a13002ea5421ece93169851chrismair assert session.getAttribute(SessionKeys.USER_ACCOUNT) == expectedValue 147dfb59d50631968ab1a13002ea5421ece93169851chrismair } 148dfb59d50631968ab1a13002ea5421ece93169851chrismair 149dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 150dfb59d50631968ab1a13002ea5421ece93169851chrismair * Assert that the current directory is set in the session, but only if currentDirectory is not null. 151dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param currentDirectory - the curent directory expected in the session; null if it is not expected 152dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 153dfb59d50631968ab1a13002ea5421ece93169851chrismair private void assertCurrentDirectory(String currentDirectory) { 154dfb59d50631968ab1a13002ea5421ece93169851chrismair assert session.getAttribute(SessionKeys.CURRENT_DIRECTORY) == currentDirectory 155dfb59d50631968ab1a13002ea5421ece93169851chrismair } 156dfb59d50631968ab1a13002ea5421ece93169851chrismair}