| Index: chromecast/app/linux/cast_crash_reporter_client_unittest.cc
|
| diff --git a/chromecast/app/linux/cast_crash_reporter_client_unittest.cc b/chromecast/app/linux/cast_crash_reporter_client_unittest.cc
|
| index 481eb30113bd6d53905a7617b93c11b22fd0fcab..88cbad9c50c328317bc5d28f6c29ff812afa3b06 100644
|
| --- a/chromecast/app/linux/cast_crash_reporter_client_unittest.cc
|
| +++ b/chromecast/app/linux/cast_crash_reporter_client_unittest.cc
|
| @@ -10,7 +10,6 @@
|
| #include "base/files/file_util.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/test/scoped_path_override.h"
|
| -#include "base/threading/thread_restrictions.h"
|
| #include "chromecast/app/linux/cast_crash_reporter_client.h"
|
| #include "chromecast/crash/app_state_tracker.h"
|
| #include "chromecast/crash/linux/crash_util.h"
|
| @@ -47,110 +46,71 @@
|
|
|
| } // namespace
|
|
|
| -class CastCrashReporterClientTest : public testing::Test {
|
| - protected:
|
| - CastCrashReporterClientTest() {}
|
| - ~CastCrashReporterClientTest() override {}
|
| +TEST(CastCrashReporterClientTest, EndToEnd) {
|
| + // Set up a temporary directory which will be used as our fake home dir.
|
| + base::FilePath fake_home_dir;
|
| + ASSERT_TRUE(base::CreateNewTempDirectory("", &fake_home_dir));
|
| + base::ScopedPathOverride home(base::DIR_HOME, fake_home_dir);
|
|
|
| - static void SetUpTestCase() {
|
| - // Set a callback to be used in place of the |dumpstate| executable.
|
| - CrashUtil::SetDumpStateCbForTest(base::Bind(&WriteFakeDumpStateFile));
|
| - }
|
| + // Set a callback to be used in place of the |dumpstate| executable.
|
| + CrashUtil::SetDumpStateCbForTest(base::Bind(&WriteFakeDumpStateFile));
|
|
|
| - // testing::Test implementation:
|
| - void SetUp() override {
|
| - // Set up a temporary directory which will be used as our fake home dir.
|
| - ASSERT_TRUE(base::CreateNewTempDirectory("", &fake_home_dir_));
|
| - home_override_.reset(
|
| - new base::ScopedPathOverride(base::DIR_HOME, fake_home_dir_));
|
| + // "Launch" YouTube.
|
| + AppStateTracker::SetLastLaunchedApp("youtube");
|
| + AppStateTracker::SetCurrentApp("youtube");
|
|
|
| - // "Launch" YouTube.
|
| - AppStateTracker::SetLastLaunchedApp("youtube");
|
| - AppStateTracker::SetCurrentApp("youtube");
|
| + // "Launch" and switch to Pandora.
|
| + AppStateTracker::SetLastLaunchedApp("pandora");
|
| + AppStateTracker::SetCurrentApp("pandora");
|
|
|
| - // "Launch" and switch to Pandora.
|
| - AppStateTracker::SetLastLaunchedApp("pandora");
|
| - AppStateTracker::SetCurrentApp("pandora");
|
| + // "Launch" Netflix.
|
| + AppStateTracker::SetLastLaunchedApp("netflix");
|
| + // Netflix crashed.
|
|
|
| - // "Launch" Netflix.
|
| - AppStateTracker::SetLastLaunchedApp("netflix");
|
| - // Netflix crashed.
|
| + // A minidump file is created.
|
| + base::FilePath minidump_path;
|
| + base::CreateTemporaryFile(&minidump_path);
|
| + base::File minidump(minidump_path,
|
| + base::File::FLAG_OPEN | base::File::FLAG_APPEND);
|
| + minidump.Write(0, kFakeMinidumpContents, sizeof(kFakeMinidumpContents) - 1);
|
| + minidump.Close();
|
|
|
| - // A minidump file is created.
|
| - base::CreateTemporaryFile(&minidump_path_);
|
| - base::File minidump(minidump_path_,
|
| - base::File::FLAG_OPEN | base::File::FLAG_APPEND);
|
| - minidump.Write(0, kFakeMinidumpContents, sizeof(kFakeMinidumpContents) - 1);
|
| - minidump.Close();
|
| - }
|
| + // Handle the crash.
|
| + CastCrashReporterClient client;
|
| + ASSERT_TRUE(client.HandleCrashDump(minidump_path.value().c_str()));
|
|
|
| - void TearDown() override {
|
| - // Remove IO restrictions in order to examine the state of the filesystem.
|
| - base::ThreadRestrictions::SetIOAllowed(true);
|
| + // Assert that the original file has been moved.
|
| + ASSERT_FALSE(base::PathExists(minidump_path));
|
|
|
| - // Assert that the original file has been moved.
|
| - ASSERT_FALSE(base::PathExists(minidump_path_));
|
| + // Assert that the file has been moved to "minidumps", with the expected
|
| + // contents.
|
| + std::string contents;
|
| + base::FilePath new_minidump =
|
| + fake_home_dir.Append("minidumps").Append(minidump_path.BaseName());
|
| + ASSERT_TRUE(base::PathExists(new_minidump));
|
| + ASSERT_TRUE(base::ReadFileToString(new_minidump, &contents));
|
| + ASSERT_EQ(kFakeMinidumpContents, contents);
|
|
|
| - // Assert that the file has been moved to "minidumps", with the expected
|
| - // contents.
|
| - std::string contents;
|
| - base::FilePath new_minidump =
|
| - fake_home_dir_.Append("minidumps").Append(minidump_path_.BaseName());
|
| - ASSERT_TRUE(base::PathExists(new_minidump));
|
| - ASSERT_TRUE(base::ReadFileToString(new_minidump, &contents));
|
| - ASSERT_EQ(kFakeMinidumpContents, contents);
|
| + // Assert that the dumpstate file has been written with the expected contents.
|
| + base::FilePath dumpstate = new_minidump.AddExtension(".txt.gz");
|
| + ASSERT_TRUE(base::PathExists(dumpstate));
|
| + ASSERT_TRUE(base::ReadFileToString(dumpstate, &contents));
|
| + ASSERT_EQ(kFakeDumpstateContents, contents);
|
|
|
| - // Assert that the dumpstate file has been written with the expected
|
| - // contents.
|
| - base::FilePath dumpstate = new_minidump.AddExtension(".txt.gz");
|
| - ASSERT_TRUE(base::PathExists(dumpstate));
|
| - ASSERT_TRUE(base::ReadFileToString(dumpstate, &contents));
|
| - ASSERT_EQ(kFakeDumpstateContents, contents);
|
| + // Assert that the lockfile has logged the correct information.
|
| + base::FilePath lockfile =
|
| + fake_home_dir.Append("minidumps").Append("lockfile");
|
| + ASSERT_TRUE(base::PathExists(lockfile));
|
| + ScopedVector<DumpInfo> dumps = GetCurrentDumps(lockfile.value());
|
| + ASSERT_EQ(1u, dumps.size());
|
|
|
| - // Assert that the lockfile has logged the correct information.
|
| - base::FilePath lockfile =
|
| - fake_home_dir_.Append("minidumps").Append("lockfile");
|
| - ASSERT_TRUE(base::PathExists(lockfile));
|
| - ScopedVector<DumpInfo> dumps = GetCurrentDumps(lockfile.value());
|
| - ASSERT_EQ(1u, dumps.size());
|
| -
|
| - const DumpInfo& dump_info = *(dumps[0]);
|
| - ASSERT_TRUE(dump_info.valid());
|
| - EXPECT_EQ(new_minidump.value(), dump_info.crashed_process_dump());
|
| - EXPECT_EQ(dumpstate.value(), dump_info.logfile());
|
| - EXPECT_EQ("youtube", dump_info.params().previous_app_name);
|
| - EXPECT_EQ("pandora", dump_info.params().current_app_name);
|
| - EXPECT_EQ("netflix", dump_info.params().last_app_name);
|
| - }
|
| -
|
| - const base::FilePath& minidump_path() { return minidump_path_; }
|
| -
|
| - private:
|
| - base::FilePath fake_home_dir_;
|
| - base::FilePath minidump_path_;
|
| - scoped_ptr<base::ScopedPathOverride> home_override_;
|
| -};
|
| -
|
| -TEST_F(CastCrashReporterClientTest, EndToEndTestOnIORestrictedThread) {
|
| - // Handle a "crash" on an IO restricted thread.
|
| - base::ThreadRestrictions::SetIOAllowed(false);
|
| - CastCrashReporterClient client;
|
| - ASSERT_TRUE(client.HandleCrashDump(minidump_path().value().c_str()));
|
| -
|
| - // Assert that the thread is IO restricted when the function exits.
|
| - // Note that SetIOAllowed returns the previous value.
|
| - ASSERT_FALSE(base::ThreadRestrictions::SetIOAllowed(true));
|
| + const DumpInfo& dump_info = *(dumps[0]);
|
| + ASSERT_TRUE(dump_info.valid());
|
| + EXPECT_EQ(new_minidump.value(), dump_info.crashed_process_dump());
|
| + EXPECT_EQ(dumpstate.value(), dump_info.logfile());
|
| + EXPECT_EQ("youtube", dump_info.params().previous_app_name);
|
| + EXPECT_EQ("pandora", dump_info.params().current_app_name);
|
| + EXPECT_EQ("netflix", dump_info.params().last_app_name);
|
| }
|
|
|
| -TEST_F(CastCrashReporterClientTest, EndToEndTestOnNonIORestrictedThread) {
|
| - // Handle a crash on a non-IO restricted thread.
|
| - base::ThreadRestrictions::SetIOAllowed(true);
|
| - CastCrashReporterClient client;
|
| - ASSERT_TRUE(client.HandleCrashDump(minidump_path().value().c_str()));
|
| -
|
| - // Assert that the thread is not IO restricted when the function exits.
|
| - // Note that SetIOAllowed returns the previous value.
|
| - ASSERT_TRUE(base::ThreadRestrictions::SetIOAllowed(true));
|
| -}
|
| -
|
| -} // namespace chromecast
|
| +} // namespace chromecast
|
|
|