diff options
Diffstat (limited to 'chrome/browser/metrics/chromeos_metrics_provider_unittest.cc')
-rw-r--r-- | chrome/browser/metrics/chromeos_metrics_provider_unittest.cc | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc b/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc new file mode 100644 index 0000000..4ed21a0 --- /dev/null +++ b/chrome/browser/metrics/chromeos_metrics_provider_unittest.cc @@ -0,0 +1,223 @@ +// Copyright 2014 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 "chrome/browser/metrics/chromeos_metrics_provider.h" + +#include <string> + +#include "base/basictypes.h" +#include "chrome/browser/chromeos/login/users/fake_user_manager.h" +#include "chrome/browser/chromeos/login/users/user_manager.h" +#include "chrome/browser/metrics/chromeos_metrics_provider.h" +#include "chromeos/dbus/fake_bluetooth_adapter_client.h" +#include "chromeos/dbus/fake_bluetooth_agent_manager_client.h" +#include "chromeos/dbus/fake_bluetooth_device_client.h" +#include "chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h" +#include "chromeos/dbus/fake_bluetooth_gatt_descriptor_client.h" +#include "chromeos/dbus/fake_bluetooth_gatt_service_client.h" +#include "chromeos/dbus/fake_bluetooth_input_client.h" +#include "chromeos/dbus/fake_dbus_thread_manager.h" +#include "components/metrics/proto/system_profile.pb.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "content/public/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +using chromeos::DBusThreadManager; +using chromeos::BluetoothAdapterClient; +using chromeos::BluetoothAgentManagerClient; +using chromeos::BluetoothDeviceClient; +using chromeos::BluetoothGattCharacteristicClient; +using chromeos::BluetoothGattDescriptorClient; +using chromeos::BluetoothGattServiceClient; +using chromeos::BluetoothInputClient; +using chromeos::FakeBluetoothAdapterClient; +using chromeos::FakeBluetoothAgentManagerClient; +using chromeos::FakeBluetoothDeviceClient; +using chromeos::FakeBluetoothGattCharacteristicClient; +using chromeos::FakeBluetoothGattDescriptorClient; +using chromeos::FakeBluetoothGattServiceClient; +using chromeos::FakeBluetoothInputClient; +using chromeos::FakeDBusThreadManager; + +class ChromeOSMetricsProviderTest : public testing::Test { + public: + ChromeOSMetricsProviderTest() {} + + protected: + virtual void SetUp() OVERRIDE { + // Set up the fake Bluetooth environment, + scoped_ptr<FakeDBusThreadManager> fake_dbus_thread_manager( + new FakeDBusThreadManager); + fake_dbus_thread_manager->SetBluetoothAdapterClient( + scoped_ptr<BluetoothAdapterClient>(new FakeBluetoothAdapterClient)); + fake_dbus_thread_manager->SetBluetoothDeviceClient( + scoped_ptr<BluetoothDeviceClient>(new FakeBluetoothDeviceClient)); + fake_dbus_thread_manager->SetBluetoothGattCharacteristicClient( + scoped_ptr<BluetoothGattCharacteristicClient>( + new FakeBluetoothGattCharacteristicClient)); + fake_dbus_thread_manager->SetBluetoothGattDescriptorClient( + scoped_ptr<BluetoothGattDescriptorClient>( + new FakeBluetoothGattDescriptorClient)); + fake_dbus_thread_manager->SetBluetoothGattServiceClient( + scoped_ptr<BluetoothGattServiceClient>( + new FakeBluetoothGattServiceClient)); + fake_dbus_thread_manager->SetBluetoothInputClient( + scoped_ptr<BluetoothInputClient>(new FakeBluetoothInputClient)); + fake_dbus_thread_manager->SetBluetoothAgentManagerClient( + scoped_ptr<BluetoothAgentManagerClient>( + new FakeBluetoothAgentManagerClient)); + DBusThreadManager::InitializeForTesting(fake_dbus_thread_manager.release()); + + // Grab pointers to members of the thread manager for easier testing. + fake_bluetooth_adapter_client_ = static_cast<FakeBluetoothAdapterClient*>( + DBusThreadManager::Get()->GetBluetoothAdapterClient()); + fake_bluetooth_device_client_ = static_cast<FakeBluetoothDeviceClient*>( + DBusThreadManager::Get()->GetBluetoothDeviceClient()); + } + + virtual void TearDown() OVERRIDE { DBusThreadManager::Shutdown(); } + + protected: + FakeBluetoothAdapterClient* fake_bluetooth_adapter_client_; + FakeBluetoothDeviceClient* fake_bluetooth_device_client_; + + private: + content::TestBrowserThreadBundle thread_bundle_; + + DISALLOW_COPY_AND_ASSIGN(ChromeOSMetricsProviderTest); +}; + +TEST_F(ChromeOSMetricsProviderTest, MultiProfileUserCount) { + std::string user1("user1@example.com"); + std::string user2("user2@example.com"); + std::string user3("user3@example.com"); + + // |scoped_enabler| takes over the lifetime of |user_manager|. + chromeos::FakeUserManager* user_manager = new chromeos::FakeUserManager(); + chromeos::ScopedUserManagerEnabler scoped_enabler(user_manager); + user_manager->AddKioskAppUser(user1); + user_manager->AddKioskAppUser(user2); + user_manager->AddKioskAppUser(user3); + + user_manager->LoginUser(user1); + user_manager->LoginUser(user3); + + ChromeOSMetricsProvider provider; + provider.OnDidCreateMetricsLog(); + metrics::SystemProfileProto system_profile; + provider.ProvideSystemProfileMetrics(&system_profile); + EXPECT_EQ(2u, system_profile.multi_profile_user_count()); +} + +TEST_F(ChromeOSMetricsProviderTest, MultiProfileCountInvalidated) { + std::string user1("user1@example.com"); + std::string user2("user2@example.com"); + std::string user3("user3@example.com"); + + // |scoped_enabler| takes over the lifetime of |user_manager|. + chromeos::FakeUserManager* user_manager = new chromeos::FakeUserManager(); + chromeos::ScopedUserManagerEnabler scoped_enabler(user_manager); + user_manager->AddKioskAppUser(user1); + user_manager->AddKioskAppUser(user2); + user_manager->AddKioskAppUser(user3); + + user_manager->LoginUser(user1); + + ChromeOSMetricsProvider provider; + provider.OnDidCreateMetricsLog(); + + metrics::SystemProfileProto system_profile; + provider.ProvideSystemProfileMetrics(&system_profile); + EXPECT_EQ(1u, system_profile.multi_profile_user_count()); + + user_manager->LoginUser(user2); + provider.ProvideSystemProfileMetrics(&system_profile); + EXPECT_EQ(0u, system_profile.multi_profile_user_count()); +} + +TEST_F(ChromeOSMetricsProviderTest, BluetoothHardwareDisabled) { + ChromeOSMetricsProvider provider; + provider.OnDidCreateMetricsLog(); + metrics::SystemProfileProto system_profile; + provider.ProvideSystemProfileMetrics(&system_profile); + + EXPECT_TRUE(system_profile.has_hardware()); + EXPECT_TRUE(system_profile.hardware().has_bluetooth()); + + EXPECT_TRUE(system_profile.hardware().bluetooth().is_present()); + EXPECT_FALSE(system_profile.hardware().bluetooth().is_enabled()); +} + +TEST_F(ChromeOSMetricsProviderTest, BluetoothHardwareEnabled) { + FakeBluetoothAdapterClient::Properties* properties = + fake_bluetooth_adapter_client_->GetProperties( + dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); + properties->powered.ReplaceValue(true); + + ChromeOSMetricsProvider provider; + metrics::SystemProfileProto system_profile; + provider.ProvideSystemProfileMetrics(&system_profile); + + EXPECT_TRUE(system_profile.has_hardware()); + EXPECT_TRUE(system_profile.hardware().has_bluetooth()); + + EXPECT_TRUE(system_profile.hardware().bluetooth().is_present()); + EXPECT_TRUE(system_profile.hardware().bluetooth().is_enabled()); +} + +TEST_F(ChromeOSMetricsProviderTest, BluetoothPairedDevices) { + // The fake bluetooth adapter class already claims to be paired with one + // device when initialized. Add a second and third fake device to it so we + // can test the cases where a device is not paired (LE device, generally) + // and a device that does not have Device ID information. + fake_bluetooth_device_client_->CreateDevice( + dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), + dbus::ObjectPath(FakeBluetoothDeviceClient::kRequestPinCodePath)); + + fake_bluetooth_device_client_->CreateDevice( + dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), + dbus::ObjectPath(FakeBluetoothDeviceClient::kConfirmPasskeyPath)); + + FakeBluetoothDeviceClient::Properties* properties = + fake_bluetooth_device_client_->GetProperties( + dbus::ObjectPath(FakeBluetoothDeviceClient::kConfirmPasskeyPath)); + properties->paired.ReplaceValue(true); + + ChromeOSMetricsProvider provider; + provider.OnDidCreateMetricsLog(); + metrics::SystemProfileProto system_profile; + provider.ProvideSystemProfileMetrics(&system_profile); + + ASSERT_TRUE(system_profile.has_hardware()); + ASSERT_TRUE(system_profile.hardware().has_bluetooth()); + + // Only two of the devices should appear. + EXPECT_EQ(2, system_profile.hardware().bluetooth().paired_device_size()); + + typedef metrics::SystemProfileProto::Hardware::Bluetooth::PairedDevice + PairedDevice; + + // First device should match the Paired Device object, complete with + // parsed Device ID information. + PairedDevice device1 = system_profile.hardware().bluetooth().paired_device(0); + + EXPECT_EQ(FakeBluetoothDeviceClient::kPairedDeviceClass, + device1.bluetooth_class()); + EXPECT_EQ(PairedDevice::DEVICE_COMPUTER, device1.type()); + EXPECT_EQ(0x001122U, device1.vendor_prefix()); + EXPECT_EQ(PairedDevice::VENDOR_ID_USB, device1.vendor_id_source()); + EXPECT_EQ(0x05ACU, device1.vendor_id()); + EXPECT_EQ(0x030DU, device1.product_id()); + EXPECT_EQ(0x0306U, device1.device_id()); + + // Second device should match the Confirm Passkey object, this has + // no Device ID information. + PairedDevice device2 = system_profile.hardware().bluetooth().paired_device(1); + + EXPECT_EQ(FakeBluetoothDeviceClient::kConfirmPasskeyClass, + device2.bluetooth_class()); + EXPECT_EQ(PairedDevice::DEVICE_PHONE, device2.type()); + EXPECT_EQ(0x207D74U, device2.vendor_prefix()); + EXPECT_EQ(PairedDevice::VENDOR_ID_UNKNOWN, device2.vendor_id_source()); +} |