blob: 9ba3308622ed8f857cbd70ff6c6f697cf98e980d [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server;
import static junit.framework.Assert.*;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class BootReceiverFixFsckFsStatTest {
private static final String PARTITION = "userdata";
@Test
public void testTreeOptimization() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Inode 877141 extent tree (at level 1) could be shorter. Fix? yes",
" ",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)",
"Update quota info for quota type 0? yes",
" ",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)",
"Update quota info for quota type 1? yes",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x5, 0, logs.length);
final String[] doubleLogs = new String[logs.length * 2];
System.arraycopy(logs, 0, doubleLogs, 0, logs.length);
System.arraycopy(logs, 0, doubleLogs, logs.length, logs.length);
doTestFsckFsStat(doubleLogs, 0x401, 0x1, 0, logs.length);
doTestFsckFsStat(doubleLogs, 0x402, 0x2, logs.length, logs.length * 2);
}
@Test
public void testQuotaOnly() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)",
"Update quota info for quota type 0? yes",
" ",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)",
"Update quota info for quota type 1? yes",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
// quota fix without tree optimization is an error.
doTestFsckFsStat(logs, 0x405, 0x405, 0, logs.length);
}
@Test
public void testOrphaned() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Inodes that were part of a corrupted orphan linked list found. Fix? yes",
" ",
"Inode 589877 was part of the orphaned inode list. FIXED.",
" ",
"Inode 589878 was part of the orphaned inode list. FIXED.",
" ",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x405, 0, logs.length);
}
@Test
public void testTimestampAdjustment() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Timestamp(s) on inode 508580 beyond 2310-04-04 are likely pre-1970.",
"Fix? yes",
" ",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x5, 0, logs.length);
}
@Test
public void testTimestampAdjustmentNoFixLine() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Timestamp(s) on inode 508580 beyond 2310-04-04 are likely pre-1970.",
" ",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x5, 0, logs.length);
}
@Test
public void testTimestampAdjustmentWithQuotaFix() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Timestamp(s) on inode 508580 beyond 2310-04-04 are likely pre-1970.",
"Fix? yes",
" ",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)",
"Update quota info for quota type 0? yes",
" ",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)",
"Update quota info for quota type 1? yes",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x405, 0, logs.length);
}
@Test
public void testAllNonFixes() {
final String[] logs = {
"e2fsck 1.43.3 (04-Sep-2016)",
"Pass 1: Checking inodes, blocks, and sizes",
"Timestamp(s) on inode 508580 beyond 2310-04-04 are likely pre-1970.",
"Fix? yes",
"Inode 877141 extent tree (at level 1) could be shorter. Fix? yes",
" ",
"Pass 1E: Optimizing extent trees",
"Pass 2: Checking directory structure",
"Pass 3: Checking directory connectivity",
"Pass 4: Checking reference counts",
"Pass 5: Checking group summary information",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (71667712, 1000) != expected (71671808, 1000)",
"Update quota info for quota type 0? yes",
" ",
"[QUOTA WARNING] Usage inconsistent for ID 10038:actual (59555840, 953) != expected (59559936, 953)",
"Update quota info for quota type 1? yes",
" ",
"/dev/block/platform/soc/624000.ufshc/by-name/userdata: ***** FILE SYSTEM WAS MODIFIED *****"
};
doTestFsckFsStat(logs, 0x405, 0x5, 0, logs.length);
}
private void doTestFsckFsStat(String[] lines, int statOrg, int statUpdated, int startLineNumber,
int endLineNumber) {
assertEquals(statUpdated, BootReceiver.fixFsckFsStat(PARTITION, statOrg, lines,
startLineNumber, endLineNumber));
}
}