1d4349f2106342798ade21c3f3d855e307315e494Tao Bao# 2d4349f2106342798ade21c3f3d855e307315e494Tao Bao# Copyright (C) 2017 The Android Open Source Project 3d4349f2106342798ade21c3f3d855e307315e494Tao Bao# 4d4349f2106342798ade21c3f3d855e307315e494Tao Bao# Licensed under the Apache License, Version 2.0 (the "License"); 5d4349f2106342798ade21c3f3d855e307315e494Tao Bao# you may not use this file except in compliance with the License. 6d4349f2106342798ade21c3f3d855e307315e494Tao Bao# You may obtain a copy of the License at 7d4349f2106342798ade21c3f3d855e307315e494Tao Bao# 8d4349f2106342798ade21c3f3d855e307315e494Tao Bao# http://www.apache.org/licenses/LICENSE-2.0 9d4349f2106342798ade21c3f3d855e307315e494Tao Bao# 10d4349f2106342798ade21c3f3d855e307315e494Tao Bao# Unless required by applicable law or agreed to in writing, software 11d4349f2106342798ade21c3f3d855e307315e494Tao Bao# distributed under the License is distributed on an "AS IS" BASIS, 12d4349f2106342798ade21c3f3d855e307315e494Tao Bao# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d4349f2106342798ade21c3f3d855e307315e494Tao Bao# See the License for the specific language governing permissions and 14d4349f2106342798ade21c3f3d855e307315e494Tao Bao# limitations under the License. 15d4349f2106342798ade21c3f3d855e307315e494Tao Bao# 16d4349f2106342798ade21c3f3d855e307315e494Tao Bao 17d4349f2106342798ade21c3f3d855e307315e494Tao Baoimport unittest 18d4349f2106342798ade21c3f3d855e307315e494Tao Bao 19d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Baoimport common 20d4349f2106342798ade21c3f3d855e307315e494Tao Baofrom build_image import CheckHeadroom, RunCommand 21d4349f2106342798ade21c3f3d855e307315e494Tao Bao 22d4349f2106342798ade21c3f3d855e307315e494Tao Bao 23d4349f2106342798ade21c3f3d855e307315e494Tao Baoclass BuildImageTest(unittest.TestCase): 24d4349f2106342798ade21c3f3d855e307315e494Tao Bao 25d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao # Available: 1000 blocks. 26d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao EXT4FS_OUTPUT = ( 27d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao "Created filesystem with 2777/129024 inodes and 515099/516099 blocks") 28d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 29d4349f2106342798ade21c3f3d855e307315e494Tao Bao def test_CheckHeadroom_SizeUnderLimit(self): 30d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao # Required headroom: 1000 blocks. 31d4349f2106342798ade21c3f3d855e307315e494Tao Bao prop_dict = { 32d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 33d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'partition_headroom' : '4096000', 34d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'mount_point' : 'system', 35d4349f2106342798ade21c3f3d855e307315e494Tao Bao } 36d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao self.assertTrue(CheckHeadroom(self.EXT4FS_OUTPUT, prop_dict)) 37d4349f2106342798ade21c3f3d855e307315e494Tao Bao 38d4349f2106342798ade21c3f3d855e307315e494Tao Bao def test_CheckHeadroom_InsufficientHeadroom(self): 39d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao # Required headroom: 1001 blocks. 40d4349f2106342798ade21c3f3d855e307315e494Tao Bao prop_dict = { 41d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 42d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'partition_headroom' : '4100096', 43d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'mount_point' : 'system', 44d4349f2106342798ade21c3f3d855e307315e494Tao Bao } 45d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao self.assertFalse(CheckHeadroom(self.EXT4FS_OUTPUT, prop_dict)) 46d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 47d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao def test_CheckHeadroom_WrongFsType(self): 48d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao prop_dict = { 49d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'f2fs', 50d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'partition_headroom' : '4100096', 51d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'mount_point' : 'system', 52d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao } 53d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao self.assertRaises( 54d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao AssertionError, CheckHeadroom, self.EXT4FS_OUTPUT, prop_dict) 55d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 56d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao def test_CheckHeadroom_MissingProperties(self): 57d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao prop_dict = { 58d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 59d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'partition_headroom' : '4100096', 60d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao } 61d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao self.assertRaises( 62d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao AssertionError, CheckHeadroom, self.EXT4FS_OUTPUT, prop_dict) 63d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 64d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao prop_dict = { 65d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 66d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'mount_point' : 'system', 67d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao } 68d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao self.assertRaises( 69d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao AssertionError, CheckHeadroom, self.EXT4FS_OUTPUT, prop_dict) 70d4349f2106342798ade21c3f3d855e307315e494Tao Bao 71d4349f2106342798ade21c3f3d855e307315e494Tao Bao def test_CheckHeadroom_WithMke2fsOutput(self): 72d4349f2106342798ade21c3f3d855e307315e494Tao Bao """Tests the result parsing from actual call to mke2fs.""" 73d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao input_dir = common.MakeTempDir() 74d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao output_image = common.MakeTempFile(suffix='.img') 75d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao command = ['mkuserimg_mke2fs.sh', input_dir, output_image, 'ext4', 76d4349f2106342798ade21c3f3d855e307315e494Tao Bao '/system', '409600', '-j', '0'] 77d4349f2106342798ade21c3f3d855e307315e494Tao Bao ext4fs_output, exit_code = RunCommand(command) 78d4349f2106342798ade21c3f3d855e307315e494Tao Bao self.assertEqual(0, exit_code) 79d4349f2106342798ade21c3f3d855e307315e494Tao Bao 80d4349f2106342798ade21c3f3d855e307315e494Tao Bao prop_dict = { 81d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 82d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'partition_headroom' : '40960', 83d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'mount_point' : 'system', 84d4349f2106342798ade21c3f3d855e307315e494Tao Bao } 85d4349f2106342798ade21c3f3d855e307315e494Tao Bao self.assertTrue(CheckHeadroom(ext4fs_output, prop_dict)) 86d4349f2106342798ade21c3f3d855e307315e494Tao Bao 87d4349f2106342798ade21c3f3d855e307315e494Tao Bao prop_dict = { 88d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao 'fs_type' : 'ext4', 89d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'partition_headroom' : '413696', 90d4349f2106342798ade21c3f3d855e307315e494Tao Bao 'mount_point' : 'system', 91d4349f2106342798ade21c3f3d855e307315e494Tao Bao } 92d4349f2106342798ade21c3f3d855e307315e494Tao Bao self.assertFalse(CheckHeadroom(ext4fs_output, prop_dict)) 93d4349f2106342798ade21c3f3d855e307315e494Tao Bao 94d8a953d7ab027f7a612f52ee008e11177e02d7b2Tao Bao common.Cleanup() 95