blob: 213ca2db86c5d10c4ae18b2df5e93590e8ef217b [file] [log] [blame]
Jonas Oreland128c4dc2022-03-30 07:57:48 +02001/*
2 * Copyright 2022 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "api/field_trials.h"
12
13#include "api/transport/field_trial_based_config.h"
14#include "system_wrappers/include/field_trial.h"
15#include "test/gtest.h"
16
17#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
18#include "test/testsupport/rtc_expect_death.h"
19#endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
20
21namespace webrtc {
22
23TEST(FieldTrials, EmptyString) {
24 FieldTrials f("");
25 EXPECT_FALSE(f.IsEnabled("MyCoolTrial"));
26 EXPECT_FALSE(f.IsDisabled("MyCoolTrial"));
27}
28
29TEST(FieldTrials, EnableDisable) {
30 FieldTrials f("MyCoolTrial/Enabled/MyUncoolTrial/Disabled/");
31 EXPECT_TRUE(f.IsEnabled("MyCoolTrial"));
32 EXPECT_TRUE(f.IsDisabled("MyUncoolTrial"));
33}
34
35TEST(FieldTrials, SetGlobalStringAndReadFromFieldTrial) {
36 const char* s = "MyCoolTrial/Enabled/MyUncoolTrial/Disabled/";
37 webrtc::field_trial::InitFieldTrialsFromString(s);
38 FieldTrialBasedConfig f;
39 EXPECT_TRUE(f.IsEnabled("MyCoolTrial"));
40 EXPECT_TRUE(f.IsDisabled("MyUncoolTrial"));
41}
42
43TEST(FieldTrials, SetFieldTrialAndReadFromGlobalString) {
44 FieldTrials f("MyCoolTrial/Enabled/MyUncoolTrial/Disabled/");
45 EXPECT_TRUE(webrtc::field_trial::IsEnabled("MyCoolTrial"));
46 EXPECT_TRUE(webrtc::field_trial::IsDisabled("MyUncoolTrial"));
47}
48
49TEST(FieldTrials, RestoresGlobalString) {
50 const char* s = "SomeString/Enabled/";
51 webrtc::field_trial::InitFieldTrialsFromString(s);
52 {
53 FieldTrials f("SomeOtherString/Enabled/");
54 EXPECT_EQ(std::string("SomeOtherString/Enabled/"),
55 webrtc::field_trial::GetFieldTrialString());
56 }
57 EXPECT_EQ(s, webrtc::field_trial::GetFieldTrialString());
58}
59
60#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
61TEST(FieldTrials, OnlyOneInstance) {
62 FieldTrials f("SomeString/Enabled/");
63 RTC_EXPECT_DEATH(FieldTrials("SomeOtherString/Enabled/").Lookup("Whatever"),
64 "Only one instance");
65}
66#endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
67
68TEST(FieldTrials, SequentialInstances) {
69 { FieldTrials f("SomeString/Enabled/"); }
70 { FieldTrials f("SomeOtherString/Enabled/"); }
71}
72
Jonas Orelandf096e742022-05-31 11:15:19 +020073TEST(FieldTrials, NoGlobals) {
74 auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/");
75 EXPECT_TRUE(f1);
76}
77
78TEST(FieldTrials, SeveralNoGlobals) {
79 auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/");
80 auto f2 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/");
81 ASSERT_TRUE(f1);
82 ASSERT_TRUE(f2);
83
84 EXPECT_TRUE(f1->IsEnabled("SomeString"));
85 EXPECT_FALSE(f1->IsEnabled("SomeOtherString"));
86
87 EXPECT_FALSE(f2->IsEnabled("SomeString"));
88 EXPECT_TRUE(f2->IsEnabled("SomeOtherString"));
89}
90
91TEST(FieldTrials, GlobalAndNoGlobals) {
92 FieldTrials f0("SomeString/Enabled/");
93 auto f1 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/");
94 ASSERT_TRUE(f1);
95
96 EXPECT_TRUE(f0.IsEnabled("SomeString"));
97 EXPECT_FALSE(f0.IsEnabled("SomeOtherString"));
98
99 EXPECT_FALSE(f1->IsEnabled("SomeString"));
100 EXPECT_TRUE(f1->IsEnabled("SomeOtherString"));
101}
102
Jonas Oreland128c4dc2022-03-30 07:57:48 +0200103} // namespace webrtc