Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8895251 authored by Alyssa Ketpreechasawat's avatar Alyssa Ketpreechasawat
Browse files

Move method to record rollback to CrashRecoveryUtils.

Test: presubmit
Test: atest CrashRecoveryUtilsTest
Flag: EXEMPT refactor
Bug: 416259905
Change-Id: I0a0167de287542320e9bfcae11dc2d1f5e55ab95
parent 7ca08a0c
Loading
Loading
Loading
Loading
+63 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.Context;
import android.os.Environment;
import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.SparseArray;

import androidx.test.core.app.ApplicationProvider;
import androidx.test.runner.AndroidJUnit4;
@@ -45,6 +46,9 @@ import java.io.IOException;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;


/**
@@ -69,12 +73,14 @@ public class CrashRecoveryUtilsTest {
        ExtendedMockito.doReturn(mCacheDir).when(() -> Environment.getDataDirectory());

        createCrashRecoveryEventsTempDir();
        createKeyValuesTempDir();
    }

    @After
    public void tearDown() throws IOException {
        mStaticMockSession.finishMocking();
        deleteCrashRecoveryEventsTempFile();
        deleteKeyValuesTempFile();
    }

    @Test
@@ -96,6 +102,16 @@ public class CrashRecoveryUtilsTest {
        assertThat(dump).doesNotContain(mLogMsg);
    }

    @Test
    public void testPutAndReadKeyValues() throws IOException {
        SparseArray<String> keyValues = new SparseArray<>();
        keyValues.put(123, "com.android.foo");
        keyValues.put(456, "com.android.bar");

        testPutKeyValue(keyValues);
        testReadAllKeyValues(keyValues);
    }

    private void testLogCrashRecoveryEvent() {
        assertThat(getCrashRecoveryEventsTempFile().exists()).isFalse();
        CrashRecoveryUtils.logCrashRecoveryEvent(Log.WARN, mLogMsg);
@@ -126,6 +142,36 @@ public class CrashRecoveryUtilsTest {
        assertThat(dump).contains(mLogMsg);
    }

    private void testPutKeyValue(SparseArray<String> keyValues) throws IOException {
        final File keyValuesTempFile = getKeyValuesTempFile();
        assertThat(keyValuesTempFile.exists()).isFalse();

        if (keyValues.size() == 0) {
            return;
        }

        for (int i = 0; i < keyValues.size(); i++) {
            int key = keyValues.keyAt(i);
            String value = keyValues.get(key);
            CrashRecoveryUtils.putKeyValue(keyValuesTempFile, key, value);
        }

        final Path keyValuesTempFilePath = Paths.get(keyValuesTempFile.getAbsolutePath());
        try (Stream<String> lines = Files.lines(keyValuesTempFilePath, StandardCharsets.UTF_8)) {
            assertThat(lines.count()).isEqualTo(keyValues.size());
        }
    }

    private void testReadAllKeyValues(SparseArray<String> keyValues) {
        final File keyValuesTempFile = getKeyValuesTempFile();
        SparseArray<String> readKeyValues = CrashRecoveryUtils.readAllKeyValues(keyValuesTempFile);
        assertThat(readKeyValues.size()).isEqualTo(keyValues.size());
        for (int i = 0; i < keyValues.size(); i++) {
            int key = keyValues.keyAt(i);
            assertThat(readKeyValues.get(key)).isEqualTo(keyValues.get(key));
        }
    }

    private void createCrashRecoveryEventsTempDir() throws IOException {
        Files.deleteIfExists(getCrashRecoveryEventsTempFile().toPath());
        File mMockDirectory = new File(mCacheDir, "system");
@@ -142,4 +188,21 @@ public class CrashRecoveryUtilsTest {
        File systemTempDir = new File(mCacheDir, "system");
        return new File(systemTempDir, "crashrecovery-events.txt");
    }

    private void createKeyValuesTempDir() throws IOException {
        deleteKeyValuesTempFile();
        File mockDirectory = new File(mCacheDir, "rollback-observer");
        if (!mockDirectory.exists()) {
            assertThat(mockDirectory.mkdir()).isTrue();
        }
    }

    private void deleteKeyValuesTempFile() throws IOException {
        Files.deleteIfExists(getKeyValuesTempFile().toPath());
    }

    private File getKeyValuesTempFile() {
        File keyValuesTempDir = new File(mCacheDir, "rollback-observer");
        return new File(keyValuesTempDir, "key-values");
    }
}