1abd32a990e145862f22d15316feedced5ad246aachrismair/* 2abd32a990e145862f22d15316feedced5ad246aachrismair * Copyright 2008 the original author or authors. 3abd32a990e145862f22d15316feedced5ad246aachrismair * 4abd32a990e145862f22d15316feedced5ad246aachrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5abd32a990e145862f22d15316feedced5ad246aachrismair * you may not use this file except in compliance with the License. 6abd32a990e145862f22d15316feedced5ad246aachrismair * You may obtain a copy of the License at 7abd32a990e145862f22d15316feedced5ad246aachrismair * 8abd32a990e145862f22d15316feedced5ad246aachrismair * http://www.apache.org/licenses/LICENSE-2.0 9abd32a990e145862f22d15316feedced5ad246aachrismair * 10abd32a990e145862f22d15316feedced5ad246aachrismair * Unless required by applicable law or agreed to in writing, software 11abd32a990e145862f22d15316feedced5ad246aachrismair * distributed under the License is distributed on an "AS IS" BASIS, 12abd32a990e145862f22d15316feedced5ad246aachrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13abd32a990e145862f22d15316feedced5ad246aachrismair * See the License for the specific language governing permissions and 14abd32a990e145862f22d15316feedced5ad246aachrismair * limitations under the License. 15abd32a990e145862f22d15316feedced5ad246aachrismair */ 16bd576ae311a45a994ae6b457fb2e5bb0ffe0d6b5chrismairpackage org.mockftpserver.fake 17abd32a990e145862f22d15316feedced5ad246aachrismair 181dfeab57f80c3a156a7ff11871c03f3f53033b9echrismairimport org.mockftpserver.fake.filesystem.FileEntry 191dfeab57f80c3a156a7ff11871c03f3f53033b9echrismairimport org.mockftpserver.fake.filesystem.FileSystemEntry 2081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismairimport org.mockftpserver.fake.filesystem.Permissions 215303c6ae1dde5f399fe48803e677942fc4326344chrismairimport org.mockftpserver.test.AbstractGroovyTestCase 22abd32a990e145862f22d15316feedced5ad246aachrismair 23abd32a990e145862f22d15316feedced5ad246aachrismair/** 24abd32a990e145862f22d15316feedced5ad246aachrismair * Tests for UserAccount 255c17f34e1a613c319d355112f8298c20015ef7f2chrismair * 267d4a3a2990f1a386eaf9d50cf05a9d45fab32de6chrismair * @version $Revision$ - $Date$ 27abd32a990e145862f22d15316feedced5ad246aachrismair * 28abd32a990e145862f22d15316feedced5ad246aachrismair * @author Chris Mair 29abd32a990e145862f22d15316feedced5ad246aachrismair */ 305303c6ae1dde5f399fe48803e677942fc4326344chrismairclass UserAccountTest extends AbstractGroovyTestCase { 31abd32a990e145862f22d15316feedced5ad246aachrismair 32abd32a990e145862f22d15316feedced5ad246aachrismair private static final USERNAME = "user123" 33abd32a990e145862f22d15316feedced5ad246aachrismair private static final PASSWORD = "password123" 34abd32a990e145862f22d15316feedced5ad246aachrismair private static final HOME_DIR = "/usr/user123" 3581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair private static final GROUP = 'group' 3681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 37abd32a990e145862f22d15316feedced5ad246aachrismair private UserAccount userAccount 385c17f34e1a613c319d355112f8298c20015ef7f2chrismair 397bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair void testConstructor() { 407bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair def acct = new UserAccount(USERNAME, PASSWORD, HOME_DIR) 417bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair assert acct.username == USERNAME 427bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair assert acct.password == PASSWORD 437bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair assert acct.homeDirectory == HOME_DIR 447bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair } 457bf26c51e6b1f13707ad90ebb60429eab992fe32chrismair 467d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair void testGetPrimaryGroup() { 477d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 487d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair 497d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair userAccount.groups = ['abc'] 507d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair assert userAccount.primaryGroup == 'abc' 517d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair 527d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair userAccount.groups.add('def') 537d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair assert userAccount.primaryGroup == 'abc' 547d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair 557d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair userAccount.groups = [] 567d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair assert userAccount.primaryGroup == UserAccount.DEFAULT_GROUP 577d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair } 587d00fd0c9917e59d8ee38543e25fcabb0d04f965chrismair 59abd32a990e145862f22d15316feedced5ad246aachrismair void testIsValidPassword() { 60abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.username = USERNAME 61abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.password = PASSWORD 62abd32a990e145862f22d15316feedced5ad246aachrismair assert userAccount.isValidPassword(PASSWORD) 635c17f34e1a613c319d355112f8298c20015ef7f2chrismair 641dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair assert !userAccount.isValidPassword("") 651dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair assert !userAccount.isValidPassword("wrong") 661dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair assert !userAccount.isValidPassword(null) 67abd32a990e145862f22d15316feedced5ad246aachrismair } 685c17f34e1a613c319d355112f8298c20015ef7f2chrismair 69abd32a990e145862f22d15316feedced5ad246aachrismair void testIsValidPassword_UsernameNullOrEmpty() { 70abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.password = PASSWORD 719cee38234d3b928de5c9ed85d7356aa8c5ad824achrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 72abd32a990e145862f22d15316feedced5ad246aachrismair 73abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.username = '' 749cee38234d3b928de5c9ed85d7356aa8c5ad824achrismair shouldFailWithMessageContaining('username') { userAccount.isValidPassword(PASSWORD) } 755c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 765c17f34e1a613c319d355112f8298c20015ef7f2chrismair 77abd32a990e145862f22d15316feedced5ad246aachrismair void testIsValidPassword_OverrideComparePassword() { 78abd32a990e145862f22d15316feedced5ad246aachrismair def customUserAccount = new CustomUserAccount() 79abd32a990e145862f22d15316feedced5ad246aachrismair customUserAccount.username = USERNAME 80abd32a990e145862f22d15316feedced5ad246aachrismair customUserAccount.password = PASSWORD 81abd32a990e145862f22d15316feedced5ad246aachrismair println customUserAccount 82abd32a990e145862f22d15316feedced5ad246aachrismair assert customUserAccount.isValidPassword(PASSWORD) == false 83abd32a990e145862f22d15316feedced5ad246aachrismair assert customUserAccount.isValidPassword(PASSWORD + "123") 84abd32a990e145862f22d15316feedced5ad246aachrismair } 855c17f34e1a613c319d355112f8298c20015ef7f2chrismair 86abd32a990e145862f22d15316feedced5ad246aachrismair void testIsValidPassword_PasswordNotCheckedDuringValidation() { 87abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.username = USERNAME 88abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.password = PASSWORD 89abd32a990e145862f22d15316feedced5ad246aachrismair userAccount.passwordCheckedDuringValidation = false 90abd32a990e145862f22d15316feedced5ad246aachrismair assert userAccount.isValidPassword("wrong") 91abd32a990e145862f22d15316feedced5ad246aachrismair } 925c17f34e1a613c319d355112f8298c20015ef7f2chrismair 935c17f34e1a613c319d355112f8298c20015ef7f2chrismair void testIsValid() { 945c17f34e1a613c319d355112f8298c20015ef7f2chrismair assert !userAccount.valid 955c17f34e1a613c319d355112f8298c20015ef7f2chrismair userAccount.homeDirectory = "" 965c17f34e1a613c319d355112f8298c20015ef7f2chrismair assert !userAccount.valid 975c17f34e1a613c319d355112f8298c20015ef7f2chrismair userAccount.homeDirectory = "/abc" 985c17f34e1a613c319d355112f8298c20015ef7f2chrismair assert userAccount.valid 995c17f34e1a613c319d355112f8298c20015ef7f2chrismair } 1005c17f34e1a613c319d355112f8298c20015ef7f2chrismair 10181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair void testCanRead() { 102fd225022650f63bcba4e6c495e9356861393c002chrismair // No file permissions - readable by all 103fd225022650f63bcba4e6c495e9356861393c002chrismair testCanRead(USERNAME, GROUP, null, true) 104fd225022650f63bcba4e6c495e9356861393c002chrismair 105fd225022650f63bcba4e6c495e9356861393c002chrismair // UserAccount has no username or group; use World permissions 106fd225022650f63bcba4e6c495e9356861393c002chrismair testCanRead(USERNAME, GROUP, '------r--', true) 107fd225022650f63bcba4e6c495e9356861393c002chrismair testCanRead(USERNAME, GROUP, 'rwxrwx-wx', false) 108fd225022650f63bcba4e6c495e9356861393c002chrismair 10981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.username = USERNAME 11081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.groups = [GROUP] 11181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 11281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 11381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(USERNAME, GROUP, '---------', false) // NONE 11481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 11581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(USERNAME, null, 'r--------', true) // User 11681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(USERNAME, null, '-wxrwxrwx', false) 11781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 11881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(null, GROUP, '---r-----', true) // Group 11981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(null, GROUP, 'rwx-wxrwx', false) 12081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 12181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(null, null, '------r--', true) // World 12281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanRead(null, null, 'rwxrwx-wx', false) 12381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 12481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 12581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair void testCanWrite() { 126fd225022650f63bcba4e6c495e9356861393c002chrismair // No file permissions - writable by all 127fd225022650f63bcba4e6c495e9356861393c002chrismair testCanWrite(USERNAME, GROUP, null, true) 128fd225022650f63bcba4e6c495e9356861393c002chrismair 129fd225022650f63bcba4e6c495e9356861393c002chrismair // UserAccount has no username or group; use World permissions 130fd225022650f63bcba4e6c495e9356861393c002chrismair testCanWrite(USERNAME, GROUP, '-------w-', true) 131fd225022650f63bcba4e6c495e9356861393c002chrismair testCanWrite(USERNAME, GROUP, 'rwxrwxr-x', false) 132fd225022650f63bcba4e6c495e9356861393c002chrismair 13381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.username = USERNAME 13481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.groups = [GROUP] 13581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 13681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 13781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(USERNAME, GROUP, '---------', false) // NONE 13881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 13981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(USERNAME, null, '-w-------', true) // User 14081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(USERNAME, null, 'r-xrwxrwx', false) 14181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 14281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(null, GROUP, '----w----', true) // Group 14381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(null, GROUP, 'rwxr-xrwx', false) 14481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 14581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(null, null, '-------w-', true) // World 14681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanWrite(null, null, 'rwxrwxr-x', false) 14781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 14881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 14981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair void testCanExecute() { 150fd225022650f63bcba4e6c495e9356861393c002chrismair // No file permissions - executable by all 151fd225022650f63bcba4e6c495e9356861393c002chrismair testCanExecute(USERNAME, GROUP, null, true) 152fd225022650f63bcba4e6c495e9356861393c002chrismair 153fd225022650f63bcba4e6c495e9356861393c002chrismair // UserAccount has no username or group; use World permissions 154fd225022650f63bcba4e6c495e9356861393c002chrismair testCanExecute(USERNAME, GROUP, '--------x', true) 155fd225022650f63bcba4e6c495e9356861393c002chrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrw-', false) 156fd225022650f63bcba4e6c495e9356861393c002chrismair 15781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.username = USERNAME 15881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair userAccount.groups = [GROUP] 15981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 16081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(USERNAME, GROUP, 'rwxrwxrwx', true) // ALL 16181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(USERNAME, GROUP, '---------', false) // NONE 16281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 16381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(USERNAME, null, '--x------', true) // User 16481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(USERNAME, null, 'rw-rwxrwx', false) 16581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 16681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(null, GROUP, '-----x---', true) // Group 16781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(null, GROUP, 'rwxrw-rwx', false) 16881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 16981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(null, null, '--------x', true) // World 17081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair testCanExecute(null, null, 'rwxrwxrw-', false) 17181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 17281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 17310941f2b30409f80cf92399415ffd8b3f0708d3echrismair void testDefaultPermissions() { 17410941f2b30409f80cf92399415ffd8b3f0708d3echrismair assert userAccount.defaultPermissionsForNewFile == new Permissions('rw-rw-rw-') 17510941f2b30409f80cf92399415ffd8b3f0708d3echrismair assert userAccount.defaultPermissionsForNewDirectory == Permissions.ALL 17610941f2b30409f80cf92399415ffd8b3f0708d3echrismair } 17710941f2b30409f80cf92399415ffd8b3f0708d3echrismair 17881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair //-------------------------------------------------------------------------- 17981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair // Helper Methods 18081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair //-------------------------------------------------------------------------- 18181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 18281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair private void testCanRead(owner, group, permissionsString, expectedResult) { 1831dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair def file = createFileEntry(owner, permissionsString, group) 18481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair assert userAccount.canRead(file) == expectedResult, file 18581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 18681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 18781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair private void testCanWrite(owner, group, permissionsString, expectedResult) { 1881dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair def file = createFileEntry(owner, permissionsString, group) 18981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair assert userAccount.canWrite(file) == expectedResult, file 19081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 19181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 19281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair private void testCanExecute(owner, group, permissionsString, expectedResult) { 1931dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair def file = createFileEntry(owner, permissionsString, group) 19481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair assert userAccount.canExecute(file) == expectedResult, file 19581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 19681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 1971dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair private FileSystemEntry createFileEntry(owner, permissionsString, group) { 198fd225022650f63bcba4e6c495e9356861393c002chrismair def permissions = permissionsString ? new Permissions(permissionsString) : null 1991dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair return new FileEntry(path: '', owner: owner, group: group, permissions: permissions) 20081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 20181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 202abd32a990e145862f22d15316feedced5ad246aachrismair void setUp() { 20381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair super.setUp() 204abd32a990e145862f22d15316feedced5ad246aachrismair userAccount = new UserAccount() 205abd32a990e145862f22d15316feedced5ad246aachrismair } 206abd32a990e145862f22d15316feedced5ad246aachrismair}