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 <jonaso@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Auto-Submit: Emil Lundmark <lndmrk@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37673}
This commit is contained in:
Emil Lundmark 2022-06-30 16:50:55 +02:00 committed by WebRTC LUCI CQ
parent 96191f8e68
commit 5fbe42a0b3

View file

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