| Index: chrome/browser/metrics/chromeos_metrics_provider_unittest.cc
|
| 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 0000000000000000000000000000000000000000..4ed21a0f0a38c8844b58882d8373f4ca26e423e5
|
| --- /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());
|
| +}
|
|
|