12ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/* 22ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Copyright 2008 the original author or authors. 32ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 42ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 52ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * you may not use this file except in compliance with the License. 62ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * You may obtain a copy of the License at 72ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 82ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * http://www.apache.org/licenses/LICENSE-2.0 92ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 102ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Unless required by applicable law or agreed to in writing, software 112ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * distributed under the License is distributed on an "AS IS" BASIS, 122ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * See the License for the specific language governing permissions and 142ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * limitations under the License. 152ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 162ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpackage org.mockftpserver.fake 172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.fake.CustomUserAccount 192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.fake.UserAccount 202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.fake.filesystem.FileEntry 212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.fake.filesystem.FileSystemEntry 222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.fake.filesystem.Permissions 232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.test.AbstractGroovyTest 242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/** 262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Tests for UserAccount 272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @version $Revision$ - $Date$ 292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * 302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @author Chris Mair 312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */ 322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairclass UserAccountTest extends AbstractGroovyTest { 332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private static final USERNAME = "user123" 352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private static final PASSWORD = "password123" 362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private static final HOME_DIR = "/usr/user123" 372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private static final GROUP = 'group' 382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private UserAccount userAccount 402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testConstructor() { 422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def acct = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert acct.username == USERNAME 442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert acct.password == PASSWORD 452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert acct.homeDirectory == HOME_DIR 462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testGetPrimaryGroup() { 492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups = ['abc'] 522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.primaryGroup == 'abc' 532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups.add('def') 552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.primaryGroup == 'abc' 562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups = [] 582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testIsValidPassword() { 622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = USERNAME 632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.password = PASSWORD 642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.isValidPassword(PASSWORD) 652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert !userAccount.isValidPassword("") 672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert !userAccount.isValidPassword("wrong") 682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert !userAccount.isValidPassword(null) 692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testIsValidPassword_UsernameNullOrEmpty() { 722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.password = PASSWORD 732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 752ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = '' 762ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 772ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 782ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 792ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testIsValidPassword_OverrideComparePassword() { 802ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def customUserAccount = new CustomUserAccount() 812ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair customUserAccount.username = USERNAME 822ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair customUserAccount.password = PASSWORD 832ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair println customUserAccount 842ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert customUserAccount.isValidPassword(PASSWORD) == false 852ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert customUserAccount.isValidPassword(PASSWORD + "123") 862ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 872ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 882ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testIsValidPassword_PasswordNotCheckedDuringValidation() { 892ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = USERNAME 902ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.password = PASSWORD 912ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.passwordCheckedDuringValidation = false 922ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.isValidPassword("wrong") 932ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 942ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 952ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testIsValid() { 962ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert !userAccount.valid 972ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.homeDirectory = "" 982ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert !userAccount.valid 992ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.homeDirectory = "/abc" 1002ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.valid 1012ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1022ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1032ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testCanRead() { 1042ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // No file permissions - readable by all 1052ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, GROUP, null, true) 1062ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1072ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // UserAccount has no username or group; use World permissions 1082ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, GROUP, '------r--', true) 1092ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, GROUP, 'rwxrwx-wx', false) 1102ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1112ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = USERNAME 1122ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups = [GROUP] 1132ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1142ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 1152ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, GROUP, '---------', false) // NONE 1162ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, null, 'r--------', true) // User 1182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(USERNAME, null, '-wxrwxrwx', false) 1192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(null, GROUP, '---r-----', true) // Group 1212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(null, GROUP, 'rwx-wxrwx', false) 1222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(null, null, '------r--', true) // World 1242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanRead(null, null, 'rwxrwx-wx', false) 1252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testCanWrite() { 1282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // No file permissions - writable by all 1292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, GROUP, null, true) 1302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // UserAccount has no username or group; use World permissions 1322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, GROUP, '-------w-', true) 1332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, GROUP, 'rwxrwxr-x', false) 1342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = USERNAME 1362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups = [GROUP] 1372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 1392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, GROUP, '---------', false) // NONE 1402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, null, '-w-------', true) // User 1422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(USERNAME, null, 'r-xrwxrwx', false) 1432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(null, GROUP, '----w----', true) // Group 1452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(null, GROUP, 'rwxr-xrwx', false) 1462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(null, null, '-------w-', true) // World 1482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanWrite(null, null, 'rwxrwxr-x', false) 1492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testCanExecute() { 1522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // No file permissions - executable by all 1532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, GROUP, null, true) 1542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // UserAccount has no username or group; use World permissions 1562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, GROUP, '--------x', true) 1572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrw-', false) 1582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.username = USERNAME 1602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount.groups = [GROUP] 1612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 1632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, GROUP, '---------', false) // NONE 1642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, null, '--x------', true) // User 1662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(USERNAME, null, 'rw-rwxrwx', false) 1672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(null, GROUP, '-----x---', true) // Group 1692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(null, GROUP, 'rwxrw-rwx', false) 1702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(null, null, '--------x', true) // World 1722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair testCanExecute(null, null, 'rwxrwxrw-', false) 1732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1752ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void testDefaultPermissions() { 1762ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.defaultPermissionsForNewFile == new Permissions('rw-rw-rw-') 1772ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.defaultPermissionsForNewDirectory == Permissions.ALL 1782ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1792ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1802ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair //-------------------------------------------------------------------------- 1812ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair // Helper Methods 1822ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair //-------------------------------------------------------------------------- 1832ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1842ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private void testCanRead(owner, group, permissionsString, expectedResult) { 1852ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def file = createFileEntry(owner, permissionsString, group) 1862ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.canRead(file) == expectedResult, file 1872ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1882ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1892ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private void testCanWrite(owner, group, permissionsString, expectedResult) { 1902ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def file = createFileEntry(owner, permissionsString, group) 1912ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.canWrite(file) == expectedResult, file 1922ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1932ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1942ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private void testCanExecute(owner, group, permissionsString, expectedResult) { 1952ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def file = createFileEntry(owner, permissionsString, group) 1962ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair assert userAccount.canExecute(file) == expectedResult, file 1972ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 1982ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 1992ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair private FileSystemEntry createFileEntry(owner, permissionsString, group) { 2002ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair def permissions = permissionsString ? new Permissions(permissionsString) : null 2012ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair return new FileEntry(path: '', owner: owner, group: group, permissions: permissions) 2022ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 2032ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair 2042ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair void setUp() { 2052ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair super.setUp() 2062ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair userAccount = new UserAccount() 2072ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair } 2082ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair}