blob: cbcbaf17edf2c00046bc21b200876d3f28dbb012 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.crash.browser;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.TestFileUtil;
import java.io.File;
import java.io.IOException;
/**
* Unittests for {@link CrashDumpManager}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class CrashDumpManagerTest {
File mTempDir;
@Before
public void setUp() throws Exception {
ContextUtils.initApplicationContextForTests(InstrumentationRegistry.getInstrumentation()
.getTargetContext()
.getApplicationContext());
mTempDir = ContextUtils.getApplicationContext().getCacheDir();
assert mTempDir.exists();
}
@After
public void tearDown() throws Exception {
File[] files = mTempDir.listFiles();
if (files == null) return;
for (File file : files) {
TestFileUtil.deleteFile(file);
}
}
@Test
@SmallTest
@Feature({"Android-AppBase"})
@DisabledTest // Flaky, crbug.com/725379.
public void testUploadMinidump_NoCallback() throws IOException {
File minidump = new File(mTempDir, "mini.dmp");
Assert.assertTrue(minidump.createNewFile());
CrashDumpManager.tryToUploadMinidump(minidump.getAbsolutePath());
}
@Test
@SmallTest
@Feature({"Android-AppBase"})
@DisabledTest // Flaky, crbug.com/725379.
public void testUploadMinidump_NullMinidumpPath() {
registerUploadCallback(new CrashDumpManager.UploadMinidumpCallback() {
@Override
public void tryToUploadMinidump(File minidump) {
Assert.fail("The callback should not be called when the minidump path is null.");
}
});
CrashDumpManager.tryToUploadMinidump(null);
}
// @SmallTest
// @Feature({"Android-AppBase"})
@Test
@DisabledTest // Flaky, crbug.com/725379.
public void testUploadMinidump_FileDoesntExist() {
registerUploadCallback(new CrashDumpManager.UploadMinidumpCallback() {
@Override
public void tryToUploadMinidump(File minidump) {
Assert.fail(
"The callback should not be called when the minidump file doesn't exist.");
}
});
CrashDumpManager.tryToUploadMinidump(
mTempDir.getAbsolutePath() + "/some/file/that/doesnt/exist");
}
@Test
@SmallTest
@Feature({"Android-AppBase"})
@DisabledTest // Flaky, crbug.com/725379.
public void testUploadMinidump_MinidumpPathIsDirectory() throws IOException {
File directory = new File(mTempDir, "a_directory");
Assert.assertTrue(directory.mkdir());
registerUploadCallback(new CrashDumpManager.UploadMinidumpCallback() {
@Override
public void tryToUploadMinidump(File minidump) {
Assert.fail(
"The callback should not be called when the minidump path is not a file.");
}
});
CrashDumpManager.tryToUploadMinidump(directory.getAbsolutePath());
}
@Test
@SmallTest
@Feature({"Android-AppBase"})
@DisabledTest // Flaky, crbug.com/725379.
public void testUploadMinidump_MinidumpPathIsValid() throws IOException {
final File minidump = new File(mTempDir, "mini.dmp");
Assert.assertTrue(minidump.createNewFile());
registerUploadCallback(new CrashDumpManager.UploadMinidumpCallback() {
@Override
public void tryToUploadMinidump(File actualMinidump) {
Assert.assertEquals("Should call the callback with the correct filename.", minidump,
actualMinidump);
}
});
CrashDumpManager.tryToUploadMinidump(minidump.getAbsolutePath());
}
/**
* A convenience wrapper that registers the upload {@param callback}, running the registration
* on the UI thread, as expected by the CrashDumpManager code.
* @param callback The callback for uploading minidumps.
*/
private static void registerUploadCallback(
final CrashDumpManager.UploadMinidumpCallback callback) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
CrashDumpManager.registerUploadCallback(callback);
}
});
}
}