diff --git a/api/field_trials_unittest.cc b/api/field_trials_unittest.cc index 213ca2db86..082222cee1 100644 --- a/api/field_trials_unittest.cc +++ b/api/field_trials_unittest.cc @@ -10,8 +10,11 @@ #include "api/field_trials.h" +#include + #include "api/transport/field_trial_based_config.h" #include "system_wrappers/include/field_trial.h" +#include "test/gmock.h" #include "test/gtest.h" #if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) @@ -19,67 +22,79 @@ #endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) namespace webrtc { +namespace { -TEST(FieldTrials, EmptyString) { +using ::testing::NotNull; + +TEST(FieldTrialsTest, EmptyStringHasNoEffect) { FieldTrials f(""); EXPECT_FALSE(f.IsEnabled("MyCoolTrial")); EXPECT_FALSE(f.IsDisabled("MyCoolTrial")); } -TEST(FieldTrials, EnableDisable) { - FieldTrials f("MyCoolTrial/Enabled/MyUncoolTrial/Disabled/"); +TEST(FieldTrialsTest, EnabledDisabledMustBeFirstInValue) { + FieldTrials f( + "MyCoolTrial/EnabledFoo/" + "MyUncoolTrial/DisabledBar/" + "AnotherTrial/BazEnabled/"); EXPECT_TRUE(f.IsEnabled("MyCoolTrial")); EXPECT_TRUE(f.IsDisabled("MyUncoolTrial")); + EXPECT_FALSE(f.IsEnabled("AnotherTrial")); } -TEST(FieldTrials, SetGlobalStringAndReadFromFieldTrial) { - const char* s = "MyCoolTrial/Enabled/MyUncoolTrial/Disabled/"; +TEST(FieldTrialsTest, FieldTrialsDoesNotReadGlobalString) { + static constexpr char s[] = "MyCoolTrial/Enabled/MyUncoolTrial/Disabled/"; webrtc::field_trial::InitFieldTrialsFromString(s); - FieldTrialBasedConfig f; - EXPECT_TRUE(f.IsEnabled("MyCoolTrial")); - EXPECT_TRUE(f.IsDisabled("MyUncoolTrial")); + FieldTrials f(""); + EXPECT_FALSE(f.IsEnabled("MyCoolTrial")); + EXPECT_FALSE(f.IsDisabled("MyUncoolTrial")); } -TEST(FieldTrials, SetFieldTrialAndReadFromGlobalString) { +TEST(FieldTrialsTest, FieldTrialsWritesGlobalString) { FieldTrials f("MyCoolTrial/Enabled/MyUncoolTrial/Disabled/"); EXPECT_TRUE(webrtc::field_trial::IsEnabled("MyCoolTrial")); EXPECT_TRUE(webrtc::field_trial::IsDisabled("MyUncoolTrial")); } -TEST(FieldTrials, RestoresGlobalString) { - const char* s = "SomeString/Enabled/"; +TEST(FieldTrialsTest, FieldTrialsRestoresGlobalStringAfterDestruction) { + static constexpr char s[] = "SomeString/Enabled/"; webrtc::field_trial::InitFieldTrialsFromString(s); { FieldTrials f("SomeOtherString/Enabled/"); - EXPECT_EQ(std::string("SomeOtherString/Enabled/"), - webrtc::field_trial::GetFieldTrialString()); + EXPECT_STREQ(webrtc::field_trial::GetFieldTrialString(), + "SomeOtherString/Enabled/"); } - EXPECT_EQ(s, webrtc::field_trial::GetFieldTrialString()); + EXPECT_STREQ(webrtc::field_trial::GetFieldTrialString(), s); } #if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) -TEST(FieldTrials, OnlyOneInstance) { +TEST(FieldTrialsTest, FieldTrialsDoesNotSupportSimultaneousInstances) { FieldTrials f("SomeString/Enabled/"); RTC_EXPECT_DEATH(FieldTrials("SomeOtherString/Enabled/").Lookup("Whatever"), "Only one instance"); } #endif // GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) -TEST(FieldTrials, SequentialInstances) { +TEST(FieldTrialsTest, FieldTrialsSupportsSeparateInstances) { { FieldTrials f("SomeString/Enabled/"); } { FieldTrials f("SomeOtherString/Enabled/"); } } -TEST(FieldTrials, NoGlobals) { - auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/"); - EXPECT_TRUE(f1); +TEST(FieldTrialsTest, NonGlobalFieldTrialsInstanceDoesNotModifyGlobalString) { + std::unique_ptr f = + FieldTrials::CreateNoGlobal("SomeString/Enabled/"); + ASSERT_THAT(f, NotNull()); + EXPECT_TRUE(f->IsEnabled("SomeString")); + EXPECT_FALSE(webrtc::field_trial::IsEnabled("SomeString")); } -TEST(FieldTrials, SeveralNoGlobals) { - auto f1 = FieldTrials::CreateNoGlobal("SomeString/Enabled/"); - auto f2 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/"); - ASSERT_TRUE(f1); - ASSERT_TRUE(f2); +TEST(FieldTrialsTest, NonGlobalFieldTrialsSupportSimultaneousInstances) { + std::unique_ptr f1 = + FieldTrials::CreateNoGlobal("SomeString/Enabled/"); + std::unique_ptr f2 = + FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/"); + ASSERT_THAT(f1, NotNull()); + ASSERT_THAT(f2, NotNull()); EXPECT_TRUE(f1->IsEnabled("SomeString")); EXPECT_FALSE(f1->IsEnabled("SomeOtherString")); @@ -88,16 +103,26 @@ TEST(FieldTrials, SeveralNoGlobals) { EXPECT_TRUE(f2->IsEnabled("SomeOtherString")); } -TEST(FieldTrials, GlobalAndNoGlobals) { - FieldTrials f0("SomeString/Enabled/"); - auto f1 = FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/"); - ASSERT_TRUE(f1); +TEST(FieldTrialsTest, GlobalAndNonGlobalFieldTrialsAreDisjoint) { + FieldTrials f1("SomeString/Enabled/"); + std::unique_ptr f2 = + FieldTrials::CreateNoGlobal("SomeOtherString/Enabled/"); + ASSERT_THAT(f2, NotNull()); - EXPECT_TRUE(f0.IsEnabled("SomeString")); - EXPECT_FALSE(f0.IsEnabled("SomeOtherString")); + EXPECT_TRUE(f1.IsEnabled("SomeString")); + EXPECT_FALSE(f1.IsEnabled("SomeOtherString")); - EXPECT_FALSE(f1->IsEnabled("SomeString")); - EXPECT_TRUE(f1->IsEnabled("SomeOtherString")); + EXPECT_FALSE(f2->IsEnabled("SomeString")); + EXPECT_TRUE(f2->IsEnabled("SomeOtherString")); } +TEST(FieldTrialsTest, FieldTrialBasedConfigReadsGlobalString) { + static constexpr char s[] = "MyCoolTrial/Enabled/MyUncoolTrial/Disabled/"; + webrtc::field_trial::InitFieldTrialsFromString(s); + FieldTrialBasedConfig f; + EXPECT_TRUE(f.IsEnabled("MyCoolTrial")); + EXPECT_TRUE(f.IsDisabled("MyUncoolTrial")); +} + +} // namespace } // namespace webrtc