diff options
Diffstat (limited to 'third_party/libwebrtc/system_wrappers/source/field_trial_unittest.cc')
-rw-r--r-- | third_party/libwebrtc/system_wrappers/source/field_trial_unittest.cc | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/third_party/libwebrtc/system_wrappers/source/field_trial_unittest.cc b/third_party/libwebrtc/system_wrappers/source/field_trial_unittest.cc new file mode 100644 index 0000000000..ada6313e67 --- /dev/null +++ b/third_party/libwebrtc/system_wrappers/source/field_trial_unittest.cc @@ -0,0 +1,107 @@ +/* + * Copyright 2019 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +#include "system_wrappers/include/field_trial.h" + +#include "rtc_base/checks.h" +#include "test/gtest.h" +#include "test/testsupport/rtc_expect_death.h" + +namespace webrtc { +namespace field_trial { +#if GTEST_HAS_DEATH_TEST && RTC_DCHECK_IS_ON && !defined(WEBRTC_ANDROID) && \ + !defined(WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT) +TEST(FieldTrialValidationTest, AcceptsValidInputs) { + InitFieldTrialsFromString(""); + InitFieldTrialsFromString("Audio/Enabled/"); + InitFieldTrialsFromString("Audio/Enabled/Video/Disabled/"); + EXPECT_TRUE(FieldTrialsStringIsValid("")); + EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/")); + EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled/")); + + // Duplicate trials with the same value is fine + InitFieldTrialsFromString("Audio/Enabled/Audio/Enabled/"); + InitFieldTrialsFromString("Audio/Enabled/B/C/Audio/Enabled/"); + EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/Audio/Enabled/")); + EXPECT_TRUE(FieldTrialsStringIsValid("Audio/Enabled/B/C/Audio/Enabled/")); +} + +TEST(FieldTrialValidationDeathTest, RejectsBadInputs) { + // Bad delimiters + RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/EnabledVideo/Disabled/"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled//Video/Disabled/"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("/Audio/Enabled/Video/Disabled/"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled/Video/Disabled"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH( + InitFieldTrialsFromString("Audio/Enabled/Video/Disabled/garbage"), + "Invalid field trials string:"); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio/EnabledVideo/Disabled/")); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled//Video/Disabled/")); + EXPECT_FALSE(FieldTrialsStringIsValid("/Audio/Enabled/Video/Disabled/")); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled")); + EXPECT_FALSE( + FieldTrialsStringIsValid("Audio/Enabled/Video/Disabled/garbage")); + + // Empty trial or group + RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio//"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("/Enabled/"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("//"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH(InitFieldTrialsFromString("//Enabled"), + "Invalid field trials string:"); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio//")); + EXPECT_FALSE(FieldTrialsStringIsValid("/Enabled/")); + EXPECT_FALSE(FieldTrialsStringIsValid("//")); + EXPECT_FALSE(FieldTrialsStringIsValid("//Enabled")); + + // Duplicate trials with different values is not fine + RTC_EXPECT_DEATH(InitFieldTrialsFromString("Audio/Enabled/Audio/Disabled/"), + "Invalid field trials string:"); + RTC_EXPECT_DEATH( + InitFieldTrialsFromString("Audio/Enabled/B/C/Audio/Disabled/"), + "Invalid field trials string:"); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/Audio/Disabled/")); + EXPECT_FALSE(FieldTrialsStringIsValid("Audio/Enabled/B/C/Audio/Disabled/")); +} + +TEST(FieldTrialMergingTest, MergesValidInput) { + EXPECT_EQ(MergeFieldTrialsStrings("Video/Enabled/", "Audio/Enabled/"), + "Audio/Enabled/Video/Enabled/"); + EXPECT_EQ(MergeFieldTrialsStrings("Audio/Disabled/Video/Enabled/", + "Audio/Enabled/"), + "Audio/Enabled/Video/Enabled/"); + EXPECT_EQ( + MergeFieldTrialsStrings("Audio/Enabled/Video/Enabled/", "Audio/Enabled/"), + "Audio/Enabled/Video/Enabled/"); + EXPECT_EQ( + MergeFieldTrialsStrings("Audio/Enabled/Audio/Enabled/", "Video/Enabled/"), + "Audio/Enabled/Video/Enabled/"); +} + +TEST(FieldTrialMergingDeathTest, DchecksBadInput) { + RTC_EXPECT_DEATH(MergeFieldTrialsStrings("Audio/Enabled/", "garbage"), + "Invalid field trials string:"); +} + +TEST(FieldTrialMergingTest, HandlesEmptyInput) { + EXPECT_EQ(MergeFieldTrialsStrings("", "Audio/Enabled/"), "Audio/Enabled/"); + EXPECT_EQ(MergeFieldTrialsStrings("Audio/Enabled/", ""), "Audio/Enabled/"); + EXPECT_EQ(MergeFieldTrialsStrings("", ""), ""); +} +#endif // GTEST_HAS_DEATH_TEST && RTC_DCHECK_IS_ON && !defined(WEBRTC_ANDROID) + // && !defined(WEBRTC_EXCLUDE_FIELD_TRIAL_DEFAULT) + +} // namespace field_trial +} // namespace webrtc |