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