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}