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 1777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 1877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.CustomUserAccount 1977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.UserAccount 2077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.FileEntry 2177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.FileSystemEntry 2277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.fake.filesystem.Permissions 2377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairimport org.mockftpserver.test.AbstractGroovyTest 2477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 2577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair/** 2677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * Tests for UserAccount 2777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 2877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @version $Revision$ - $Date$ 2977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * 3077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair * @author Chris Mair 3177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair */ 3277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismairclass UserAccountTest extends AbstractGroovyTest { 3377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 3477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private static final USERNAME = "user123" 3577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private static final PASSWORD = "password123" 3677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private static final HOME_DIR = "/usr/user123" 3777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private static final GROUP = 'group' 3877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 3977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private UserAccount userAccount 4077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 4177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testConstructor() { 4277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def acct = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 4377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert acct.username == USERNAME 4477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert acct.password == PASSWORD 4577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert acct.homeDirectory == HOME_DIR 4677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 4777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 4877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testGetPrimaryGroup() { 4977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 5077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 5177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups = ['abc'] 5277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.primaryGroup == 'abc' 5377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 5477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups.add('def') 5577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.primaryGroup == 'abc' 5677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 5777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups = [] 5877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 5977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 6077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 6177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testIsValidPassword() { 6277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = USERNAME 6377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.password = PASSWORD 6477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.isValidPassword(PASSWORD) 6577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 6677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert !userAccount.isValidPassword("") 6777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert !userAccount.isValidPassword("wrong") 6877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert !userAccount.isValidPassword(null) 6977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 7077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 7177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testIsValidPassword_UsernameNullOrEmpty() { 7277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.password = PASSWORD 7377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 7477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 7577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = '' 7677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 7777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 7877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 7977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testIsValidPassword_OverrideComparePassword() { 8077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def customUserAccount = new CustomUserAccount() 8177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair customUserAccount.username = USERNAME 8277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair customUserAccount.password = PASSWORD 8377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair println customUserAccount 8477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert customUserAccount.isValidPassword(PASSWORD) == false 8577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert customUserAccount.isValidPassword(PASSWORD + "123") 8677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 8777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 8877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testIsValidPassword_PasswordNotCheckedDuringValidation() { 8977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = USERNAME 9077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.password = PASSWORD 9177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.passwordCheckedDuringValidation = false 9277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.isValidPassword("wrong") 9377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 9477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 9577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testIsValid() { 9677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert !userAccount.valid 9777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.homeDirectory = "" 9877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert !userAccount.valid 9977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.homeDirectory = "/abc" 10077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.valid 10177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 10277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 10377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testCanRead() { 10477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // No file permissions - readable by all 10577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, GROUP, null, true) 10677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 10777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // UserAccount has no username or group; use World permissions 10877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, GROUP, '------r--', true) 10977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, GROUP, 'rwxrwx-wx', false) 11077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 11177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = USERNAME 11277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups = [GROUP] 11377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 11477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 11577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, GROUP, '---------', false) // NONE 11677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 11777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, null, 'r--------', true) // User 11877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(USERNAME, null, '-wxrwxrwx', false) 11977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 12077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(null, GROUP, '---r-----', true) // Group 12177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(null, GROUP, 'rwx-wxrwx', false) 12277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 12377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(null, null, '------r--', true) // World 12477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanRead(null, null, 'rwxrwx-wx', false) 12577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 12677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 12777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testCanWrite() { 12877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // No file permissions - writable by all 12977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, GROUP, null, true) 13077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 13177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // UserAccount has no username or group; use World permissions 13277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, GROUP, '-------w-', true) 13377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, GROUP, 'rwxrwxr-x', false) 13477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 13577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = USERNAME 13677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups = [GROUP] 13777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 13877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 13977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, GROUP, '---------', false) // NONE 14077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 14177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, null, '-w-------', true) // User 14277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(USERNAME, null, 'r-xrwxrwx', false) 14377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 14477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(null, GROUP, '----w----', true) // Group 14577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(null, GROUP, 'rwxr-xrwx', false) 14677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 14777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(null, null, '-------w-', true) // World 14877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanWrite(null, null, 'rwxrwxr-x', false) 14977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 15077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 15177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testCanExecute() { 15277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // No file permissions - executable by all 15377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, GROUP, null, true) 15477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 15577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // UserAccount has no username or group; use World permissions 15677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, GROUP, '--------x', true) 15777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrw-', false) 15877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 15977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.username = USERNAME 16077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount.groups = [GROUP] 16177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 16277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 16377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, GROUP, '---------', false) // NONE 16477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 16577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, null, '--x------', true) // User 16677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(USERNAME, null, 'rw-rwxrwx', false) 16777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 16877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(null, GROUP, '-----x---', true) // Group 16977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(null, GROUP, 'rwxrw-rwx', false) 17077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 17177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(null, null, '--------x', true) // World 17277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair testCanExecute(null, null, 'rwxrwxrw-', false) 17377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 17477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 17577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void testDefaultPermissions() { 17677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.defaultPermissionsForNewFile == new Permissions('rw-rw-rw-') 17777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.defaultPermissionsForNewDirectory == Permissions.ALL 17877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 17977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 18077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair //-------------------------------------------------------------------------- 18177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair // Helper Methods 18277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair //-------------------------------------------------------------------------- 18377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 18477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private void testCanRead(owner, group, permissionsString, expectedResult) { 18577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def file = createFileEntry(owner, permissionsString, group) 18677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.canRead(file) == expectedResult, file 18777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 18877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 18977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private void testCanWrite(owner, group, permissionsString, expectedResult) { 19077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def file = createFileEntry(owner, permissionsString, group) 19177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.canWrite(file) == expectedResult, file 19277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 19377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 19477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private void testCanExecute(owner, group, permissionsString, expectedResult) { 19577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def file = createFileEntry(owner, permissionsString, group) 19677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair assert userAccount.canExecute(file) == expectedResult, file 19777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 19877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 19977b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair private FileSystemEntry createFileEntry(owner, permissionsString, group) { 20077b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair def permissions = permissionsString ? new Permissions(permissionsString) : null 20177b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair return new FileEntry(path: '', owner: owner, group: group, permissions: permissions) 20277b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 20377b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair 20477b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair void setUp() { 20577b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair super.setUp() 20677b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair userAccount = new UserAccount() 20777b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair } 20877b8661f08d1379c0bdf2af93d8004fced9f1ab0chrismair}