From 5fbe42a0b367caa38b27a9ff5f73e98c6c7bacc7 Mon Sep 17 00:00:00 2001 From: Emil Lundmark Date: Thu, 30 Jun 2022 16:50:55 +0200 Subject: [PATCH] Clean up FieldTrials unit tests This renames the tests to also capture the expected outcome of the test along with some minor code cleanups. Some tests have also been added or extended to tests more invariants. Bug: None Change-Id: I0bc733026118eb90646929b164bfc148665556a8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267169 Reviewed-by: Jonas Oreland Commit-Queue: Per Kjellander Reviewed-by: Per Kjellander Auto-Submit: Emil Lundmark Cr-Commit-Position: refs/heads/main@{#37673} --- api/field_trials_unittest.cc | 89 +++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 32 deletions(-) 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