xref: /aosp_15_r20/external/autotest/client/bin/fsinfo_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li
3*9c5db199SXin Lifrom __future__ import absolute_import
4*9c5db199SXin Lifrom __future__ import division
5*9c5db199SXin Lifrom __future__ import print_function
6*9c5db199SXin Liimport unittest, six
7*9c5db199SXin Li
8*9c5db199SXin Liimport common
9*9c5db199SXin Lifrom autotest_lib.client.bin import fsinfo
10*9c5db199SXin Lifrom autotest_lib.client.common_lib.test_utils import mock
11*9c5db199SXin Li
12*9c5db199SXin Liclass fsionfo_test(unittest.TestCase):
13*9c5db199SXin Li
14*9c5db199SXin Li    def setUp(self):
15*9c5db199SXin Li        self.god = mock.mock_god()
16*9c5db199SXin Li        self.god.stub_function(fsinfo, 'open')
17*9c5db199SXin Li
18*9c5db199SXin Li
19*9c5db199SXin Li    def tearDown(self):
20*9c5db199SXin Li        self.god.unstub_all()
21*9c5db199SXin Li
22*9c5db199SXin Li
23*9c5db199SXin Li    def create_test_file(self, filename, contents):
24*9c5db199SXin Li        test_file = six.StringIO(contents)
25*9c5db199SXin Li        fsinfo.open.expect_call(filename, 'r').and_return(test_file)
26*9c5db199SXin Li
27*9c5db199SXin Li
28*9c5db199SXin Li    def test_ext_mkfs_options(self):
29*9c5db199SXin Li        tune2fs_dict = {'Filesystem volume name': '<none>',
30*9c5db199SXin Li                        'Last mounted on': '<not available>',
31*9c5db199SXin Li                        'Filesystem revision #': '1 (dynamic)',
32*9c5db199SXin Li                        'Block size': 4096,
33*9c5db199SXin Li                        'Block count': 263056,
34*9c5db199SXin Li                        'Fragment size': 4096,
35*9c5db199SXin Li                        'Blocks per group': 32768,
36*9c5db199SXin Li                        'Journal inode': 8,
37*9c5db199SXin Li                        'Reserved block count': 2630,
38*9c5db199SXin Li                        'Inode count': 131616,
39*9c5db199SXin Li                        'Filesystem features': 'filetype sparse_super',
40*9c5db199SXin Li                        'Filesystem OS type': 'Linux'}
41*9c5db199SXin Li        expected_option = {'-b': 4096,
42*9c5db199SXin Li                           '-f': 4096,
43*9c5db199SXin Li                           '-g': 32768,
44*9c5db199SXin Li                           '-j': None,
45*9c5db199SXin Li                           '-m': 1,
46*9c5db199SXin Li                           '-O': 'filetype,sparse_super',
47*9c5db199SXin Li                           '-o': 'Linux',
48*9c5db199SXin Li                           '-r': '1'}
49*9c5db199SXin Li
50*9c5db199SXin Li        mkfs_option = {}
51*9c5db199SXin Li        fsinfo.ext_mkfs_options(tune2fs_dict, mkfs_option)
52*9c5db199SXin Li
53*9c5db199SXin Li        for option, value in six.iteritems(expected_option):
54*9c5db199SXin Li            self.assertEqual(value, mkfs_option[option])
55*9c5db199SXin Li
56*9c5db199SXin Li
57*9c5db199SXin Li    def test_xfs_mkfs_options(self):
58*9c5db199SXin Li        tune2fs_dict = {'meta-data: isize': 256,
59*9c5db199SXin Li                        'meta-data: agcount': 8,
60*9c5db199SXin Li                        'meta-data: agsize': 32882,
61*9c5db199SXin Li                        'meta-data: sectsz': 512,
62*9c5db199SXin Li                        'meta-data: attr': 0,
63*9c5db199SXin Li                        'data: bsize': 4096,
64*9c5db199SXin Li                        'data: imaxpct': 25,
65*9c5db199SXin Li                        'data: sunit': 0,
66*9c5db199SXin Li                        'data: swidth': 0,
67*9c5db199SXin Li                        'data: unwritten': 1,
68*9c5db199SXin Li                        'naming: version': 2,
69*9c5db199SXin Li                        'naming: bsize': 4096,
70*9c5db199SXin Li                        'log: version': 1,
71*9c5db199SXin Li                        'log: sectsz': 512,
72*9c5db199SXin Li                        'log: sunit': 0,
73*9c5db199SXin Li                        'log: lazy-count': 0,
74*9c5db199SXin Li                        'log: bsize': 4096,
75*9c5db199SXin Li                        'log: blocks': 2560,
76*9c5db199SXin Li                        'realtime: extsz': 4096,
77*9c5db199SXin Li                        'realtime: blocks': 0,
78*9c5db199SXin Li                        'realtime: rtextents': 0}
79*9c5db199SXin Li
80*9c5db199SXin Li        expected_option = {'-i size': 256,
81*9c5db199SXin Li                           '-d agcount': 8,
82*9c5db199SXin Li                           '-s size': 512,
83*9c5db199SXin Li                           '-b size': 4096,
84*9c5db199SXin Li                           '-i attr': 0,
85*9c5db199SXin Li                           '-i maxpct': 25,
86*9c5db199SXin Li                           '-d sunit': 0,
87*9c5db199SXin Li                           '-d swidth': 0,
88*9c5db199SXin Li                           '-d unwritten': 1,
89*9c5db199SXin Li                           '-n version': 2,
90*9c5db199SXin Li                           '-n size': 4096,
91*9c5db199SXin Li                           '-l version': 1,
92*9c5db199SXin Li                           '-l sectsize': 512,
93*9c5db199SXin Li                           '-l sunit': 0,
94*9c5db199SXin Li                           '-l lazy-count': 0,
95*9c5db199SXin Li                           '-r extsize': 4096,
96*9c5db199SXin Li                           '-r size': 0,
97*9c5db199SXin Li                           '-r rtdev': 0,
98*9c5db199SXin Li                           '-l size': 10485760}
99*9c5db199SXin Li        mkfs_option = {}
100*9c5db199SXin Li        fsinfo.xfs_mkfs_options(tune2fs_dict, mkfs_option)
101*9c5db199SXin Li        for option, value in six.iteritems(expected_option):
102*9c5db199SXin Li            self.assertEqual(value, mkfs_option[option])
103*9c5db199SXin Li
104*9c5db199SXin Li
105*9c5db199SXin Li    def test_opt_string2dict(self):
106*9c5db199SXin Li        test_string = '-q -b 1234   -O fdasfa,fdasfdas -l adfas -k -L'
107*9c5db199SXin Li        result = fsinfo.opt_string2dict(test_string)
108*9c5db199SXin Li        expected_result = {'-q': None,
109*9c5db199SXin Li                           '-b': 1234,
110*9c5db199SXin Li                           '-O': 'fdasfa,fdasfdas',
111*9c5db199SXin Li                           '-l': 'adfas',
112*9c5db199SXin Li                           '-k': None,
113*9c5db199SXin Li                           '-L': None}
114*9c5db199SXin Li        self.assertEqual(expected_result, result)
115*9c5db199SXin Li
116*9c5db199SXin Li
117*9c5db199SXin Li    def test_merge_ext_features(self):
118*9c5db199SXin Li        conf = 'a,b,d,d,d,d,d,e,e,a,f'.split(',')
119*9c5db199SXin Li        user = '^e,a,^f,g,h,i'
120*9c5db199SXin Li        expected_result = ['a', 'b', 'd', 'g', 'h', 'i']
121*9c5db199SXin Li        result = fsinfo.merge_ext_features(conf, user)
122*9c5db199SXin Li        self.assertEqual(expected_result, result)
123*9c5db199SXin Li
124*9c5db199SXin Li
125*9c5db199SXin Li    def test_compare_features(self):
126*9c5db199SXin Li        f1 = ['sparse_super', 'filetype', 'resize_inode', 'dir_index']
127*9c5db199SXin Li        f2 = ['filetype', 'resize_inode', 'dir_index', 'large_file']
128*9c5db199SXin Li        self.assertTrue(fsinfo.compare_features(f1, f1))
129*9c5db199SXin Li        self.assertFalse(fsinfo.compare_features(f1, f2))
130*9c5db199SXin Li
131*9c5db199SXin Li
132*9c5db199SXin Li    def test_mke2fs_conf(self):
133*9c5db199SXin Li        content = ('[defaults]\n'
134*9c5db199SXin Li                   'base_features = sparse_super,filetype,resize_inode\n'
135*9c5db199SXin Li                   '       blocksize = 4096 \n'
136*9c5db199SXin Li                   '       inode_ratio = 8192  \n'
137*9c5db199SXin Li                   '\n [fs_types]\n'
138*9c5db199SXin Li                   '       small = {\n'
139*9c5db199SXin Li                   '                         blocksize = 1024\n'
140*9c5db199SXin Li                   '               inode_ratio = 4096 \n'
141*9c5db199SXin Li                   '                                                 }\n'
142*9c5db199SXin Li                   '       floppy = {\n'
143*9c5db199SXin Li                   '                         blocksize = 4096\n'
144*9c5db199SXin Li                   '                                }\n')
145*9c5db199SXin Li        self.create_test_file('/etc/mke2fs.conf', content)
146*9c5db199SXin Li
147*9c5db199SXin Li        conf_opt = fsinfo.parse_mke2fs_conf('small')
148*9c5db199SXin Li        mkfs_opt = fsinfo.convert_conf_opt(conf_opt)
149*9c5db199SXin Li        expected_conf = {'blocksize': 1024,
150*9c5db199SXin Li                         'inode_ratio': 4096,
151*9c5db199SXin Li                         'base_features': 'sparse_super,filetype,resize_inode'}
152*9c5db199SXin Li        expected_mkfs = {'-O': ['sparse_super', 'filetype', 'resize_inode'],
153*9c5db199SXin Li                         '-i': 4096,
154*9c5db199SXin Li                         '-b': 1024}
155*9c5db199SXin Li        self.assertEqual(conf_opt, expected_conf)
156*9c5db199SXin Li        self.assertEqual(mkfs_opt, expected_mkfs)
157*9c5db199SXin Li
158*9c5db199SXin Li
159*9c5db199SXin Liif __name__ == '__main__':
160*9c5db199SXin Li    unittest.main()
161