// Copyright 2023 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/chromeos_metrics_provider.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_command_line.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
TEST(ChromeOSHistogramMetricsProvider, NoCommandLine) {
base::HistogramTester histogram_tester;
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_OnlyOne) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_NotInts) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "s");
command_line->AppendSwitchASCII("feature-management-max-level", "t");
command_line->AppendSwitchASCII("feature-management-scope", "u");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_OnlyOneInt) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
command_line->AppendSwitchASCII("feature-management-max-level", "t");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Invalid_Level) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "-1");
command_line->AppendSwitchASCII("feature-management-max-level", "1");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Negative_MaxLevel) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
command_line->AppendSwitchASCII("feature-management-max-level", "-1");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Small_MaxLevel) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
command_line->AppendSwitchASCII("feature-management-max-level", "0");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Success_NonCBX) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "0");
command_line->AppendSwitchASCII("feature-management-max-level", "1");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_TRUE(provider.ProvideHistograms());
histogram_tester.ExpectUniqueSample("Platform.Segmentation.FeatureLevel", 0,
1);
histogram_tester.ExpectUniqueSample("Platform.Segmentation.ScopeLevel", 0, 1);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Success_HB) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
command_line->AppendSwitchASCII("feature-management-max-level", "1");
command_line->AppendSwitchASCII("feature-management-scope", "1");
ChromeOSHistogramMetricsProvider provider;
EXPECT_TRUE(provider.ProvideHistograms());
histogram_tester.ExpectUniqueSample("Platform.Segmentation.FeatureLevel", 1,
1);
histogram_tester.ExpectUniqueSample("Platform.Segmentation.ScopeLevel", 2, 1);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_Success_SB) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "1");
command_line->AppendSwitchASCII("feature-management-max-level", "1");
command_line->AppendSwitchASCII("feature-management-scope", "0");
ChromeOSHistogramMetricsProvider provider;
EXPECT_TRUE(provider.ProvideHistograms());
histogram_tester.ExpectUniqueSample("Platform.Segmentation.FeatureLevel", 1,
1);
histogram_tester.ExpectUniqueSample("Platform.Segmentation.ScopeLevel", 1, 1);
}
TEST(ChromeOSHistogramMetricsProvider, CommandLine_NonCBX_Hardbranded) {
base::HistogramTester histogram_tester;
base::test::ScopedCommandLine scoped_command_line;
base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine();
command_line->AppendSwitchASCII("feature-management-level", "0");
command_line->AppendSwitchASCII("feature-management-max-level", "1");
command_line->AppendSwitchASCII("feature-management-scope", "1");
ChromeOSHistogramMetricsProvider provider;
EXPECT_FALSE(provider.ProvideHistograms());
histogram_tester.ExpectTotalCount("Platform.Segmentation.FeatureLevel", 0);
histogram_tester.ExpectTotalCount("Platform.Segmentation.ScopeLevel", 0);
}
} // namespace