| // Copyright 2015 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. |
| |
| #include <time.h> |
| |
| #include "base/values.h" |
| #include "chromecast/crash/linux/crash_testing_utils.h" |
| #include "chromecast/crash/linux/dump_info.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace chromecast { |
| |
| TEST(DumpInfoTest, EmptyStringIsNotValid) { |
| std::unique_ptr<DumpInfo> dump_info(CreateDumpInfo("")); |
| ASSERT_FALSE(dump_info->valid()); |
| } |
| |
| TEST(DumpInfoTest, TooFewFieldsIsNotValid) { |
| std::unique_ptr<DumpInfo> dump_info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"" |
| "}")); |
| ASSERT_FALSE(dump_info->valid()); |
| } |
| |
| TEST(DumpInfoTest, BadTimeStringIsNotValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"Mar 23 2014 01:23:45\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"" |
| "}")); |
| ASSERT_FALSE(info->valid()); |
| } |
| |
| TEST(DumpInfoTest, AllRequiredFieldsIsValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"" |
| "}")); |
| base::Time::Exploded ex = {0}; |
| ex.second = 1; |
| ex.minute = 31; |
| ex.hour = 18; |
| ex.day_of_month = 12; |
| ex.month = 11; |
| ex.year = 2001; |
| base::Time dump_time; |
| EXPECT_TRUE(base::Time::FromLocalExploded(ex, &dump_time)); |
| |
| ASSERT_TRUE(info->valid()); |
| ASSERT_EQ("name", info->params().process_name); |
| ASSERT_EQ(dump_time, info->dump_time()); |
| ASSERT_EQ("dump_string", info->crashed_process_dump()); |
| ASSERT_EQ(123456789u, info->params().process_uptime); |
| ASSERT_EQ("logfile.log", info->logfile()); |
| } |
| |
| TEST(DumpInfoTest, EmptyProcessNameIsValid) { |
| std::unique_ptr<DumpInfo> dump_info( |
| CreateDumpInfo("{" |
| "\"name\": \"\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"" |
| "}")); |
| ASSERT_TRUE(dump_info->valid()); |
| } |
| |
| TEST(DumpInfoTest, SomeRequiredFieldsEmptyIsValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"\"," |
| "\"uptime\": \"\"," |
| "\"logfile\": \"\"" |
| "}")); |
| base::Time::Exploded ex = {0}; |
| ex.second = 1; |
| ex.minute = 31; |
| ex.hour = 18; |
| ex.day_of_month = 12; |
| ex.month = 11; |
| ex.year = 2001; |
| base::Time dump_time; |
| EXPECT_TRUE(base::Time::FromLocalExploded(ex, &dump_time)); |
| |
| ASSERT_TRUE(info->valid()); |
| ASSERT_EQ("name", info->params().process_name); |
| ASSERT_EQ(dump_time, info->dump_time()); |
| ASSERT_EQ("", info->crashed_process_dump()); |
| ASSERT_EQ(0u, info->params().process_uptime); |
| ASSERT_EQ("", info->logfile()); |
| } |
| |
| TEST(DumpInfoTest, AllOptionalFieldsIsValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"," |
| "\"suffix\": \"suffix\"," |
| "\"prev_app_name\": \"previous_app\"," |
| "\"cur_app_name\": \"current_app\"," |
| "\"last_app_name\": \"last_app\"," |
| "\"release_version\": \"RELEASE\"," |
| "\"build_number\": \"BUILD_NUMBER\"," |
| "\"reason\": \"foo\"" |
| "}")); |
| base::Time::Exploded ex = {0}; |
| ex.second = 1; |
| ex.minute = 31; |
| ex.hour = 18; |
| ex.day_of_month = 12; |
| ex.month = 11; |
| ex.year = 2001; |
| base::Time dump_time; |
| EXPECT_TRUE(base::Time::FromLocalExploded(ex, &dump_time)); |
| |
| ASSERT_TRUE(info->valid()); |
| ASSERT_EQ("name", info->params().process_name); |
| ASSERT_EQ(dump_time, info->dump_time()); |
| ASSERT_EQ("dump_string", info->crashed_process_dump()); |
| ASSERT_EQ(123456789u, info->params().process_uptime); |
| ASSERT_EQ("logfile.log", info->logfile()); |
| |
| ASSERT_EQ("suffix", info->params().suffix); |
| ASSERT_EQ("previous_app", info->params().previous_app_name); |
| ASSERT_EQ("current_app", info->params().current_app_name); |
| ASSERT_EQ("last_app", info->params().last_app_name); |
| ASSERT_EQ("foo", info->params().reason); |
| } |
| |
| TEST(DumpInfoTest, SomeOptionalFieldsIsValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"," |
| "\"suffix\": \"suffix\"," |
| "\"prev_app_name\": \"previous_app\"" |
| "}")); |
| base::Time::Exploded ex = {0}; |
| ex.second = 1; |
| ex.minute = 31; |
| ex.hour = 18; |
| ex.day_of_month = 12; |
| ex.month = 11; |
| ex.year = 2001; |
| base::Time dump_time; |
| EXPECT_TRUE(base::Time::FromLocalExploded(ex, &dump_time)); |
| |
| ASSERT_TRUE(info->valid()); |
| ASSERT_EQ("name", info->params().process_name); |
| ASSERT_EQ(dump_time, info->dump_time()); |
| ASSERT_EQ("dump_string", info->crashed_process_dump()); |
| ASSERT_EQ(123456789u, info->params().process_uptime); |
| ASSERT_EQ("logfile.log", info->logfile()); |
| |
| ASSERT_EQ("suffix", info->params().suffix); |
| ASSERT_EQ("previous_app", info->params().previous_app_name); |
| } |
| |
| TEST(DumpInfoTest, ExtraFieldsIsNotValid) { |
| std::unique_ptr<DumpInfo> info( |
| CreateDumpInfo("{" |
| "\"name\": \"name\"," |
| "\"dump_time\" : \"2001-11-12 18:31:01\"," |
| "\"dump\": \"dump_string\"," |
| "\"uptime\": \"123456789\"," |
| "\"logfile\": \"logfile.log\"," |
| "\"suffix\": \"suffix\"," |
| "\"prev_app_name\": \"previous_app\"," |
| "\"cur_app_name\": \"current_app\"," |
| "\"last_app_name\": \"last_app\"," |
| "\"release_version\": \"RELEASE\"," |
| "\"build_number\": \"BUILD_NUMBER\"," |
| "\"hello\": \"extra_field\"" |
| "}")); |
| ASSERT_FALSE(info->valid()); |
| } |
| |
| } // namespace chromecast |