Commit cf8736d1 authored by Steven Bennetts's avatar Steven Bennetts Committed by Commit Bot

CrOS: Add DeviceEventLogErrorBrowserTest

This test is intended to ensure that no errors are logged to
DeviceEventLog under normal conditions. Currently this will only run
on linux-chromeos. A similar Tast test will also be added to cover
running on a device.

Bug: 550539
Change-Id: I2f100cefb396d074c448c862d3a8908e11b07243
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2284072
Commit-Queue: Steven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785934}
parent 89921ca0
// Copyright 2020 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 <memory>
#include "chrome/browser/chromeos/login/login_manager_test.h"
#include "chrome/browser/chromeos/login/test/login_manager_mixin.h"
#include "components/account_id/account_id.h"
#include "components/device_event_log/device_event_log.h"
#include "content/public/test/browser_test.h"
#include "testing/gtest/include/gtest/gtest.h"
// Browser test using device_event_log to ensure that no device related error
// events are generated during startup and after login.
namespace chromeos {
class DeviceEventLogErrorBrowserTest : public LoginManagerTest {
public:
DeviceEventLogErrorBrowserTest() {
set_should_launch_browser(true);
login_mixin_.AppendRegularUsers(1);
}
DeviceEventLogErrorBrowserTest(const DeviceEventLogErrorBrowserTest&) =
delete;
DeviceEventLogErrorBrowserTest& operator=(
const DeviceEventLogErrorBrowserTest&) = delete;
~DeviceEventLogErrorBrowserTest() override = default;
int GetErrors() {
return device_event_log::GetCountByLevelForTesting(
device_event_log::LogLevel::LOG_LEVEL_ERROR);
}
protected:
LoginManagerMixin login_mixin_{&mixin_host_};
};
IN_PROC_BROWSER_TEST_F(DeviceEventLogErrorBrowserTest, Startup) {
EXPECT_EQ(GetErrors(), 0);
}
IN_PROC_BROWSER_TEST_F(DeviceEventLogErrorBrowserTest, LoginUser) {
LoginUser(login_mixin_.users()[0].account_id);
EXPECT_EQ(GetErrors(), 0);
}
} // namespace chromeos
...@@ -2349,6 +2349,7 @@ if (!is_android) { ...@@ -2349,6 +2349,7 @@ if (!is_android) {
"../browser/chromeos/login/web_kiosk_controller_browsertest.cc", "../browser/chromeos/login/web_kiosk_controller_browsertest.cc",
"../browser/chromeos/login/webview_login_browsertest.cc", "../browser/chromeos/login/webview_login_browsertest.cc",
"../browser/chromeos/login/wizard_controller_browsertest.cc", "../browser/chromeos/login/wizard_controller_browsertest.cc",
"../browser/chromeos/net/device_event_log_error_browsertest.cc",
"../browser/chromeos/net/network_portal_detector_impl_browsertest.cc", "../browser/chromeos/net/network_portal_detector_impl_browsertest.cc",
"../browser/chromeos/network_change_manager_client_browsertest.cc", "../browser/chromeos/network_change_manager_client_browsertest.cc",
"../browser/chromeos/platform_keys/platform_keys_service_browsertest.cc", "../browser/chromeos/platform_keys/platform_keys_service_browsertest.cc",
......
...@@ -87,6 +87,10 @@ void Clear(const base::Time& begin, const base::Time& end) { ...@@ -87,6 +87,10 @@ void Clear(const base::Time& begin, const base::Time& end) {
g_device_event_log->Clear(begin, end); g_device_event_log->Clear(begin, end);
} }
int GetCountByLevelForTesting(LogLevel level) {
return g_device_event_log->GetCountByLevelForTesting(level);
}
namespace internal { namespace internal {
DeviceEventLogInstance::DeviceEventLogInstance(const char* file, DeviceEventLogInstance::DeviceEventLogInstance(const char* file,
......
...@@ -80,7 +80,8 @@ ...@@ -80,7 +80,8 @@
#define DEVICE_LOG(type, level) \ #define DEVICE_LOG(type, level) \
::device_event_log::internal::DeviceEventLogInstance(__FILE__, __LINE__, \ ::device_event_log::internal::DeviceEventLogInstance(__FILE__, __LINE__, \
type, level).stream() type, level) \
.stream()
#define DEVICE_PLOG(type, level) \ #define DEVICE_PLOG(type, level) \
::device_event_log::internal::DeviceEventSystemErrorLogInstance( \ ::device_event_log::internal::DeviceEventSystemErrorLogInstance( \
__FILE__, __LINE__, type, level, ::logging::GetLastSystemErrorCode()) \ __FILE__, __LINE__, type, level, ::logging::GetLastSystemErrorCode()) \
...@@ -192,6 +193,8 @@ void DEVICE_EVENT_LOG_EXPORT Clear(const base::Time& begin, ...@@ -192,6 +193,8 @@ void DEVICE_EVENT_LOG_EXPORT Clear(const base::Time& begin,
DEVICE_EVENT_LOG_EXPORT extern const LogLevel kDefaultLogLevel; DEVICE_EVENT_LOG_EXPORT extern const LogLevel kDefaultLogLevel;
int DEVICE_EVENT_LOG_EXPORT GetCountByLevelForTesting(LogLevel level);
namespace internal { namespace internal {
// Implementation class for DEVICE_LOG macros. Provides a stream for creating // Implementation class for DEVICE_LOG macros. Provides a stream for creating
......
...@@ -471,6 +471,15 @@ void DeviceEventLogImpl::Clear(const base::Time& begin, const base::Time& end) { ...@@ -471,6 +471,15 @@ void DeviceEventLogImpl::Clear(const base::Time& begin, const base::Time& end) {
entries_.erase(begin_it, end_rev_it.base()); entries_.erase(begin_it, end_rev_it.base());
} }
int DeviceEventLogImpl::GetCountByLevelForTesting(LogLevel level) {
int count = 0;
for (const auto& entry : entries_) {
if (entry.log_level == level)
++count;
}
return count;
}
DeviceEventLogImpl::LogEntry::LogEntry(const char* filedesc, DeviceEventLogImpl::LogEntry::LogEntry(const char* filedesc,
int file_line, int file_line,
LogType log_type, LogType log_type,
......
...@@ -75,6 +75,8 @@ class DEVICE_EVENT_LOG_EXPORT DeviceEventLogImpl { ...@@ -75,6 +75,8 @@ class DEVICE_EVENT_LOG_EXPORT DeviceEventLogImpl {
void ClearAll(); void ClearAll();
void Clear(const base::Time& begin, const base::Time& end); void Clear(const base::Time& begin, const base::Time& end);
int GetCountByLevelForTesting(LogLevel level);
// Called from device_event_log::AddEntry if the global instance has not been // Called from device_event_log::AddEntry if the global instance has not been
// created (or has already been destroyed). Logs to LOG(ERROR) or VLOG(1). // created (or has already been destroyed). Logs to LOG(ERROR) or VLOG(1).
static void SendToVLogOrErrorLog(const char* file, static void SendToVLogOrErrorLog(const char* file,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment