Roll src/third_party/WebKit 8b42d1d:744641d (svn 186770:186771)
[chromium-blink-merge.git] / chrome / browser / metrics / chromeos_metrics_provider_unittest.cc
blobbec2fbf21ca4cc5ac22478f5c442e5af827c03dc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/metrics/chromeos_metrics_provider.h"
7 #include <string>
9 #include "base/basictypes.h"
10 #include "chrome/browser/chromeos/login/users/fake_user_manager.h"
11 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
12 #include "chrome/browser/metrics/chromeos_metrics_provider.h"
13 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "chromeos/dbus/fake_bluetooth_adapter_client.h"
15 #include "chromeos/dbus/fake_bluetooth_agent_manager_client.h"
16 #include "chromeos/dbus/fake_bluetooth_device_client.h"
17 #include "chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h"
18 #include "chromeos/dbus/fake_bluetooth_gatt_descriptor_client.h"
19 #include "chromeos/dbus/fake_bluetooth_gatt_service_client.h"
20 #include "chromeos/dbus/fake_bluetooth_input_client.h"
21 #include "chromeos/dbus/power_manager_client.h"
22 #include "chromeos/login/login_state.h"
23 #include "components/metrics/proto/system_profile.pb.h"
24 #include "components/user_manager/user_manager.h"
25 #include "content/public/test/test_browser_thread_bundle.h"
26 #include "content/public/test/test_utils.h"
27 #include "testing/gtest/include/gtest/gtest.h"
29 #if defined(USE_X11)
30 #include "ui/events/devices/x11/device_data_manager_x11.h"
31 #endif
33 using chromeos::DBusThreadManager;
34 using chromeos::DBusThreadManagerSetter;
35 using chromeos::BluetoothAdapterClient;
36 using chromeos::BluetoothAgentManagerClient;
37 using chromeos::BluetoothDeviceClient;
38 using chromeos::BluetoothGattCharacteristicClient;
39 using chromeos::BluetoothGattDescriptorClient;
40 using chromeos::BluetoothGattServiceClient;
41 using chromeos::BluetoothInputClient;
42 using chromeos::FakeBluetoothAdapterClient;
43 using chromeos::FakeBluetoothAgentManagerClient;
44 using chromeos::FakeBluetoothDeviceClient;
45 using chromeos::FakeBluetoothGattCharacteristicClient;
46 using chromeos::FakeBluetoothGattDescriptorClient;
47 using chromeos::FakeBluetoothGattServiceClient;
48 using chromeos::FakeBluetoothInputClient;
49 using chromeos::PowerManagerClient;
50 using chromeos::STUB_DBUS_CLIENT_IMPLEMENTATION;
52 class ChromeOSMetricsProviderTest : public testing::Test {
53 public:
54 ChromeOSMetricsProviderTest() {}
56 protected:
57 virtual void SetUp() override {
58 #if defined(USE_X11)
59 ui::DeviceDataManagerX11::CreateInstance();
60 #endif
62 // Set up the fake Bluetooth environment,
63 scoped_ptr<DBusThreadManagerSetter> dbus_setter =
64 DBusThreadManager::GetSetterForTesting();
65 dbus_setter->SetBluetoothAdapterClient(
66 scoped_ptr<BluetoothAdapterClient>(new FakeBluetoothAdapterClient));
67 dbus_setter->SetBluetoothDeviceClient(
68 scoped_ptr<BluetoothDeviceClient>(new FakeBluetoothDeviceClient));
69 dbus_setter->SetBluetoothGattCharacteristicClient(
70 scoped_ptr<BluetoothGattCharacteristicClient>(
71 new FakeBluetoothGattCharacteristicClient));
72 dbus_setter->SetBluetoothGattDescriptorClient(
73 scoped_ptr<BluetoothGattDescriptorClient>(
74 new FakeBluetoothGattDescriptorClient));
75 dbus_setter->SetBluetoothGattServiceClient(
76 scoped_ptr<BluetoothGattServiceClient>(
77 new FakeBluetoothGattServiceClient));
78 dbus_setter->SetBluetoothInputClient(
79 scoped_ptr<BluetoothInputClient>(new FakeBluetoothInputClient));
80 dbus_setter->SetBluetoothAgentManagerClient(
81 scoped_ptr<BluetoothAgentManagerClient>(
82 new FakeBluetoothAgentManagerClient));
84 // Set up a PowerManagerClient instance for PerfProvider.
85 dbus_setter->SetPowerManagerClient(
86 scoped_ptr<PowerManagerClient>(
87 PowerManagerClient::Create(STUB_DBUS_CLIENT_IMPLEMENTATION)));
89 // Grab pointers to members of the thread manager for easier testing.
90 fake_bluetooth_adapter_client_ = static_cast<FakeBluetoothAdapterClient*>(
91 DBusThreadManager::Get()->GetBluetoothAdapterClient());
92 fake_bluetooth_device_client_ = static_cast<FakeBluetoothDeviceClient*>(
93 DBusThreadManager::Get()->GetBluetoothDeviceClient());
95 // Initialize the login state trackers.
96 if (!chromeos::LoginState::IsInitialized())
97 chromeos::LoginState::Initialize();
100 virtual void TearDown() override {
101 // Destroy the login state tracker if it was initialized.
102 chromeos::LoginState::Shutdown();
104 DBusThreadManager::Shutdown();
107 protected:
108 FakeBluetoothAdapterClient* fake_bluetooth_adapter_client_;
109 FakeBluetoothDeviceClient* fake_bluetooth_device_client_;
111 private:
112 content::TestBrowserThreadBundle thread_bundle_;
114 DISALLOW_COPY_AND_ASSIGN(ChromeOSMetricsProviderTest);
117 TEST_F(ChromeOSMetricsProviderTest, MultiProfileUserCount) {
118 std::string user1("user1@example.com");
119 std::string user2("user2@example.com");
120 std::string user3("user3@example.com");
122 // |scoped_enabler| takes over the lifetime of |user_manager|.
123 chromeos::FakeUserManager* user_manager = new chromeos::FakeUserManager();
124 chromeos::ScopedUserManagerEnabler scoped_enabler(user_manager);
125 user_manager->AddKioskAppUser(user1);
126 user_manager->AddKioskAppUser(user2);
127 user_manager->AddKioskAppUser(user3);
129 user_manager->LoginUser(user1);
130 user_manager->LoginUser(user3);
132 ChromeOSMetricsProvider provider;
133 provider.OnDidCreateMetricsLog();
134 metrics::SystemProfileProto system_profile;
135 provider.ProvideSystemProfileMetrics(&system_profile);
136 EXPECT_EQ(2u, system_profile.multi_profile_user_count());
139 TEST_F(ChromeOSMetricsProviderTest, MultiProfileCountInvalidated) {
140 std::string user1("user1@example.com");
141 std::string user2("user2@example.com");
142 std::string user3("user3@example.com");
144 // |scoped_enabler| takes over the lifetime of |user_manager|.
145 chromeos::FakeUserManager* user_manager = new chromeos::FakeUserManager();
146 chromeos::ScopedUserManagerEnabler scoped_enabler(user_manager);
147 user_manager->AddKioskAppUser(user1);
148 user_manager->AddKioskAppUser(user2);
149 user_manager->AddKioskAppUser(user3);
151 user_manager->LoginUser(user1);
153 ChromeOSMetricsProvider provider;
154 provider.OnDidCreateMetricsLog();
156 metrics::SystemProfileProto system_profile;
157 provider.ProvideSystemProfileMetrics(&system_profile);
158 EXPECT_EQ(1u, system_profile.multi_profile_user_count());
160 user_manager->LoginUser(user2);
161 provider.ProvideSystemProfileMetrics(&system_profile);
162 EXPECT_EQ(0u, system_profile.multi_profile_user_count());
165 TEST_F(ChromeOSMetricsProviderTest, BluetoothHardwareDisabled) {
166 ChromeOSMetricsProvider provider;
167 provider.OnDidCreateMetricsLog();
168 metrics::SystemProfileProto system_profile;
169 provider.ProvideSystemProfileMetrics(&system_profile);
171 EXPECT_TRUE(system_profile.has_hardware());
172 EXPECT_TRUE(system_profile.hardware().has_bluetooth());
174 EXPECT_TRUE(system_profile.hardware().bluetooth().is_present());
175 EXPECT_FALSE(system_profile.hardware().bluetooth().is_enabled());
178 TEST_F(ChromeOSMetricsProviderTest, BluetoothHardwareEnabled) {
179 FakeBluetoothAdapterClient::Properties* properties =
180 fake_bluetooth_adapter_client_->GetProperties(
181 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
182 properties->powered.ReplaceValue(true);
184 ChromeOSMetricsProvider provider;
185 metrics::SystemProfileProto system_profile;
186 provider.ProvideSystemProfileMetrics(&system_profile);
188 EXPECT_TRUE(system_profile.has_hardware());
189 EXPECT_TRUE(system_profile.hardware().has_bluetooth());
191 EXPECT_TRUE(system_profile.hardware().bluetooth().is_present());
192 EXPECT_TRUE(system_profile.hardware().bluetooth().is_enabled());
195 TEST_F(ChromeOSMetricsProviderTest, BluetoothPairedDevices) {
196 // The fake bluetooth adapter class already claims to be paired with one
197 // device when initialized. Add a second and third fake device to it so we
198 // can test the cases where a device is not paired (LE device, generally)
199 // and a device that does not have Device ID information.
200 fake_bluetooth_device_client_->CreateDevice(
201 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
202 dbus::ObjectPath(FakeBluetoothDeviceClient::kRequestPinCodePath));
204 fake_bluetooth_device_client_->CreateDevice(
205 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
206 dbus::ObjectPath(FakeBluetoothDeviceClient::kConfirmPasskeyPath));
208 FakeBluetoothDeviceClient::Properties* properties =
209 fake_bluetooth_device_client_->GetProperties(
210 dbus::ObjectPath(FakeBluetoothDeviceClient::kConfirmPasskeyPath));
211 properties->paired.ReplaceValue(true);
213 ChromeOSMetricsProvider provider;
214 provider.OnDidCreateMetricsLog();
215 metrics::SystemProfileProto system_profile;
216 provider.ProvideSystemProfileMetrics(&system_profile);
218 ASSERT_TRUE(system_profile.has_hardware());
219 ASSERT_TRUE(system_profile.hardware().has_bluetooth());
221 // Only two of the devices should appear.
222 EXPECT_EQ(2, system_profile.hardware().bluetooth().paired_device_size());
224 typedef metrics::SystemProfileProto::Hardware::Bluetooth::PairedDevice
225 PairedDevice;
227 // First device should match the Paired Device object, complete with
228 // parsed Device ID information.
229 PairedDevice device1 = system_profile.hardware().bluetooth().paired_device(0);
231 EXPECT_EQ(FakeBluetoothDeviceClient::kPairedDeviceClass,
232 device1.bluetooth_class());
233 EXPECT_EQ(PairedDevice::DEVICE_COMPUTER, device1.type());
234 EXPECT_EQ(0x001122U, device1.vendor_prefix());
235 EXPECT_EQ(PairedDevice::VENDOR_ID_USB, device1.vendor_id_source());
236 EXPECT_EQ(0x05ACU, device1.vendor_id());
237 EXPECT_EQ(0x030DU, device1.product_id());
238 EXPECT_EQ(0x0306U, device1.device_id());
240 // Second device should match the Confirm Passkey object, this has
241 // no Device ID information.
242 PairedDevice device2 = system_profile.hardware().bluetooth().paired_device(1);
244 EXPECT_EQ(FakeBluetoothDeviceClient::kConfirmPasskeyClass,
245 device2.bluetooth_class());
246 EXPECT_EQ(PairedDevice::DEVICE_PHONE, device2.type());
247 EXPECT_EQ(0x207D74U, device2.vendor_prefix());
248 EXPECT_EQ(PairedDevice::VENDOR_ID_UNKNOWN, device2.vendor_id_source());