blob: ada6313e6744a8651ebf8750de67227f2c911e1c [file] [log] [blame]
Jonas Olsson5b2eda42019-06-11 14:29:40 +02001/*
2 * Copyright 2019 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#include "system_wrappers/include/field_trial.h"
11
12#include "rtc_base/checks.h"
13#include "test/gtest.h"
Artem Titov9dc209a2019-11-28 17:09:30 +010014#include "test/testsupport/rtc_expect_death.h"
Jonas Olsson5b2eda42019-06-11 14:29:40 +020015
16namespace webrtc {
17namespace field_trial {
18#if GTEST_HAS_DEATH_TEST && RTC_DCHECK_IS_ON && !defined(WEBRTC_ANDROID) && \
19 !defined(WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT)
20TEST(FieldTrialValidationTest, AcceptsValidInputs) {
21 InitFieldTrialsFromString("");
22 InitFieldTrialsFromString("Audio/Enabled/");
23 InitFieldTrialsFromString("Audio/Enabled/Video/Disabled/");
Konrad Hofbaueree1e0152019-12-05 16:25:40 +010024 EXPECT_TRUE(FieldTrialsStringIsValid(""));
25 EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/"));
26 EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled/"));
Jonas Olsson5b2eda42019-06-11 14:29:40 +020027
28 // Duplicate trials with the same value is fine
29 InitFieldTrialsFromString("Audio/Enabled/Audio/Enabled/");
30 InitFieldTrialsFromString("Audio/Enabled/B/C/Audio/Enabled/");
Konrad Hofbaueree1e0152019-12-05 16:25:40 +010031 EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/Audio/Enabled/"));
32 EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/B/C/Audio/Enabled/"));
Jonas Olsson5b2eda42019-06-11 14:29:40 +020033}
34
Tommia5e07cc2020-05-26 21:40:37 +020035TEST(FieldTrialValidationDeathTest, RejectsBadInputs) {
Jonas Olsson5b2eda42019-06-11 14:29:40 +020036 // Bad delimiters
Artem Titov9dc209a2019-11-28 17:09:30 +010037 RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/EnabledVideo/Disabled/"),
38 "Invalid field trials string:");
39 RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled//Video/Disabled/"),
40 "Invalid field trials string:");
41 RTC_EXPECT_DEATH(InitFieldTrialsFromString("/Audio/Enabled/Video/Disabled/"),
42 "Invalid field trials string:");
43 RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled/Video/Disabled"),
44 "Invalid field trials string:");
45 RTC_EXPECT_DEATH(
Jonas Olsson5b2eda42019-06-11 14:29:40 +020046 InitFieldTrialsFromString("Audio/Enabled/Video/Disabled/garbage"),
47 "Invalid field trials string:");
Konrad Hofbaueree1e0152019-12-05 16:25:40 +010048 EXPECT_FALSE(FieldTrialsStringIsValid("Audio/EnabledVideo/Disabled/"));
49 EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled//Video/Disabled/"));
50 EXPECT_FALSE(FieldTrialsStringIsValid("/Audio/Enabled/Video/Disabled/"));
51 EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled"));
52 EXPECT_FALSE(
53 FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled/garbage"));
54
55 // Empty trial or group
56 RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio//"),
57 "Invalid field trials string:");
58 RTC_EXPECT_DEATH(InitFieldTrialsFromString("/Enabled/"),
59 "Invalid field trials string:");
60 RTC_EXPECT_DEATH(InitFieldTrialsFromString("//"),
61 "Invalid field trials string:");
62 RTC_EXPECT_DEATH(InitFieldTrialsFromString("//Enabled"),
63 "Invalid field trials string:");
64 EXPECT_FALSE(FieldTrialsStringIsValid("Audio//"));
65 EXPECT_FALSE(FieldTrialsStringIsValid("/Enabled/"));
66 EXPECT_FALSE(FieldTrialsStringIsValid("//"));
67 EXPECT_FALSE(FieldTrialsStringIsValid("//Enabled"));
Jonas Olsson5b2eda42019-06-11 14:29:40 +020068
69 // Duplicate trials with different values is not fine
Artem Titov9dc209a2019-11-28 17:09:30 +010070 RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled/Audio/Disabled/"),
71 "Invalid field trials string:");
72 RTC_EXPECT_DEATH(
73 InitFieldTrialsFromString("Audio/Enabled/B/C/Audio/Disabled/"),
74 "Invalid field trials string:");
Konrad Hofbaueree1e0152019-12-05 16:25:40 +010075 EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/Audio/Disabled/"));
76 EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/B/C/Audio/Disabled/"));
77}
78
79TEST(FieldTrialMergingTest, MergesValidInput) {
80 EXPECT_EQ(MergeFieldTrialsStrings("Video/Enabled/", "Audio/Enabled/"),
81 "Audio/Enabled/Video/Enabled/");
82 EXPECT_EQ(MergeFieldTrialsStrings("Audio/Disabled/Video/Enabled/",
83 "Audio/Enabled/"),
84 "Audio/Enabled/Video/Enabled/");
85 EXPECT_EQ(
86 MergeFieldTrialsStrings("Audio/Enabled/Video/Enabled/", "Audio/Enabled/"),
87 "Audio/Enabled/Video/Enabled/");
88 EXPECT_EQ(
89 MergeFieldTrialsStrings("Audio/Enabled/Audio/Enabled/", "Video/Enabled/"),
90 "Audio/Enabled/Video/Enabled/");
91}
92
Tommia5e07cc2020-05-26 21:40:37 +020093TEST(FieldTrialMergingDeathTest, DchecksBadInput) {
Konrad Hofbaueree1e0152019-12-05 16:25:40 +010094 RTC_EXPECT_DEATH(MergeFieldTrialsStrings("Audio/Enabled/", "garbage"),
95 "Invalid field trials string:");
96}
97
98TEST(FieldTrialMergingTest, HandlesEmptyInput) {
99 EXPECT_EQ(MergeFieldTrialsStrings("", "Audio/Enabled/"), "Audio/Enabled/");
100 EXPECT_EQ(MergeFieldTrialsStrings("Audio/Enabled/", ""), "Audio/Enabled/");
101 EXPECT_EQ(MergeFieldTrialsStrings("", ""), "");
Jonas Olsson5b2eda42019-06-11 14:29:40 +0200102}
103#endif // GTEST_HAS_DEATH_TEST && RTC_DCHECK_IS_ON && !defined(WEBRTC_ANDROID)
104 // && !defined(WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT)
105
106} // namespace field_trial
107} // namespace webrtc