1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server; 18 19import static junit.framework.Assert.*; 20 21import android.support.test.filters.SmallTest; 22import android.support.test.runner.AndroidJUnit4; 23 24import junit.framework.Assert; 25 26import org.junit.Test; 27import org.junit.runner.RunWith; 28 29@SmallTest 30@RunWith(AndroidJUnit4.class) 31public class BootReceiverFixFsckFsStatTest { 32 33 private static final String PARTITION = "userdata"; 34 35 @Test 36 public void testTreeOptimization() { 37 final String[] logs = { 38 "e2fsck 1.43.3 (04-Sep-2016)", 39 "Pass 1: Checking inodes, blocks, and sizes", 40 "Inode 877141 extent tree (at level 1) could be shorter. Fix? yes", 41 " ", 42 "Pass 1E: Optimizing extent trees", 43 "Pass 2: Checking directory structure", 44 "Pass 3: Checking directory connectivity", 45 "Pass 4: Checking reference counts", 46 "Pass 5: Checking group summary information", 47 "[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)", 48 "Update quota info for quota type 0? yes", 49 " ", 50 "[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)", 51 "Update quota info for quota type 1? yes", 52 " ", 53 "/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****" 54 }; 55 doTestFsckFsStat(logs, 0x405, 5, 0, logs.length); 56 57 final String[] doubleLogs = new String[logs.length * 2]; 58 System.arraycopy(logs, 0, doubleLogs, 0, logs.length); 59 System.arraycopy(logs, 0, doubleLogs, logs.length, logs.length); 60 doTestFsckFsStat(doubleLogs, 0x401, 1, 0, logs.length); 61 doTestFsckFsStat(doubleLogs, 0x402, 2, logs.length, logs.length * 2); 62 } 63 64 @Test 65 public void testQuotaOnly() { 66 final String[] logs = { 67 "e2fsck 1.43.3 (04-Sep-2016)", 68 "Pass 1: Checking inodes, blocks, and sizes", 69 "Pass 1E: Optimizing extent trees", 70 "Pass 2: Checking directory structure", 71 "Pass 3: Checking directory connectivity", 72 "Pass 4: Checking reference counts", 73 "Pass 5: Checking group summary information", 74 "[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)", 75 "Update quota info for quota type 0? yes", 76 " ", 77 "[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)", 78 "Update quota info for quota type 1? yes", 79 " ", 80 "/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****" 81 }; 82 doTestFsckFsStat(logs, 0x405, 0x405, 0, logs.length); 83 } 84 85 @Test 86 public void testOrphaned() { 87 final String[] logs = { 88 "e2fsck 1.43.3 (04-Sep-2016)", 89 "Pass 1: Checking inodes, blocks, and sizes", 90 "Inodes that were part of a corrupted orphan linked list found. Fix? yes", 91 " ", 92 "Inode 589877 was part of the orphaned inode list. FIXED.", 93 " ", 94 "Inode 589878 was part of the orphaned inode list. FIXED.", 95 " ", 96 "Pass 2: Checking directory structure", 97 "Pass 3: Checking directory connectivity", 98 "Pass 4: Checking reference counts", 99 "Pass 5: Checking group summary information", 100 " ", 101 "/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****" 102 }; 103 doTestFsckFsStat(logs, 0x405, 0x405, 0, logs.length); 104 } 105 106 private void doTestFsckFsStat(String[] lines, int statOrg, int statUpdated, int startLineNumber, 107 int endLineNumber) { 108 assertEquals(statUpdated, BootReceiver.fixFsckFsStat(PARTITION, statOrg, lines, 109 startLineNumber, endLineNumber)); 110 } 111} 112