chromium/chrome/browser/metrics/lacros_metrics_provider_unittest.cc

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/metrics/lacros_metrics_provider.h"

#include "base/test/metrics/histogram_tester.h"
#include "base/test/task_environment.h"
#include "chrome/browser/metrics/enrollment_status.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "chromeos/lacros/lacros_test_helper.h"
#include "chromeos/startup/browser_init_params.h"
#include "components/ukm/test_ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h"

using UkmEntry = ukm::builders::ChromeOS_DeviceManagement;

TEST(LacrosMetricsProviderTest, EnrollmentStatusRecordedForCurrentSession) {
  base::test::TaskEnvironment task_environment;
  chromeos::ScopedLacrosServiceTestHelper lacros_test_helper;

  // Simulate lacros initialization on an enterprise-enrolled device.
  crosapi::mojom::BrowserInitParamsPtr init_params =
      crosapi::mojom::BrowserInitParams::New();
  init_params->device_mode = crosapi::mojom::DeviceMode::kEnterprise;
  chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params));

  // Provide current session metrics.
  base::HistogramTester histogram_tester;
  LacrosMetricsProvider metrics_provider;
  metrics::ChromeUserMetricsExtension uma_proto;
  metrics_provider.ProvideCurrentSessionData(&uma_proto);

  // Enrollment status is recorded.
  histogram_tester.ExpectUniqueSample(
      "UMA.EnrollmentStatus", static_cast<int>(EnrollmentStatus::kManaged), 1);
}

TEST(LacrosMetricsProviderTest,
     EnrollmentStatusRecordedForCurrentSessionUKMData) {
  base::test::TaskEnvironment task_environment;
  chromeos::ScopedLacrosServiceTestHelper lacros_test_helper;

  // Simulate lacros initialization on an enterprise-enrolled device.
  crosapi::mojom::BrowserInitParamsPtr init_params =
      crosapi::mojom::BrowserInitParams::New();
  init_params->device_mode = crosapi::mojom::DeviceMode::kEnterprise;
  chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params));

  // Provide current session UKM Data.
  ukm::TestAutoSetUkmRecorder test_ukm_recorder;
  LacrosMetricsProvider metrics_provider;
  metrics_provider.ProvideCurrentSessionUKMData();

  // Enrollment status is recorded as a UKM entry
  auto ukm_entries = test_ukm_recorder.GetEntriesByName(UkmEntry::kEntryName);
  EXPECT_EQ(1u, ukm_entries.size());
  ukm::TestAutoSetUkmRecorder::ExpectEntryMetric(
      ukm_entries[0], UkmEntry::kEnrollmentStatusName,
      static_cast<int>(EnrollmentStatus::kManaged));
}