summaryrefslogtreecommitdiffstats
path: root/test/units/module_utils/basic/test_get_file_attributes.py
blob: 836529cce061ca79e46868c61b54e18663e23c45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# -*- coding: utf-8 -*-
# Copyright:
#   (c) 2017, Pierre-Louis Bonicoli <pierre-louis@libregerbil.fr>
# License: GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

from itertools import product

from ansible.module_utils.basic import AnsibleModule

import pytest


DATA = (
    (
        '3353595900 --------------e---- /usr/lib32',
        {'attr_flags': 'e', 'version': '3353595900', 'attributes': ['extents']}
    ),
    # with e2fsprogs < 1.43, output isn't aligned
    (
        '78053594 -----------I--e---- /usr/lib',
        {'attr_flags': 'Ie', 'version': '78053594', 'attributes': ['indexed', 'extents']}
    ),
    (
        '15711607 -------A------e---- /tmp/test',
        {'attr_flags': 'Ae', 'version': '15711607', 'attributes': ['noatime', 'extents']}
    ),
    # with e2fsprogs >= 1.43, output is aligned
    (
        '78053594   -----------I--e---- /usr/lib',
        {'attr_flags': 'Ie', 'version': '78053594', 'attributes': ['indexed', 'extents']}
    ),
    (
        '15711607   -------A------e---- /tmp/test',
        {'attr_flags': 'Ae', 'version': '15711607', 'attributes': ['noatime', 'extents']}
    ),
)

NO_VERSION_DATA = (
    (
        '--------------e---- /usr/lib32',
        {'attr_flags': 'e', 'attributes': ['extents']}
    ),
    (
        '-----------I--e---- /usr/lib',
        {'attr_flags': 'Ie', 'attributes': ['indexed', 'extents']}
    ),
    (
        '-------A------e---- /tmp/test',
        {'attr_flags': 'Ae', 'attributes': ['noatime', 'extents']}
    ),
)


@pytest.mark.parametrize('stdin, data', product(({},), DATA), indirect=['stdin'])
def test_get_file_attributes(am, stdin, mocker, data):
    # Test #18731
    mocker.patch.object(AnsibleModule, 'get_bin_path', return_value=(0, '/usr/bin/lsattr', ''))
    mocker.patch.object(AnsibleModule, 'run_command', return_value=(0, data[0], ''))
    result = am.get_file_attributes('/path/to/file')
    for key, value in data[1].items():
        assert key in result and result[key] == value


@pytest.mark.parametrize('stdin, data', product(({},), NO_VERSION_DATA), indirect=['stdin'])
def test_get_file_attributes_no_version(am, stdin, mocker, data):
    # Test #18731
    mocker.patch.object(AnsibleModule, 'get_bin_path', return_value=(0, '/usr/bin/lsattr', ''))
    mocker.patch.object(AnsibleModule, 'run_command', return_value=(0, data[0], ''))
    result = am.get_file_attributes('/path/to/file', include_version=False)
    for key, value in data[1].items():
        assert key in result and result[key] == value