| /* | |
| * Copyright (c) 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 "rtc_base/experiments/struct_parameters_parser.h" | |
| #include "rtc_base/gunit.h" | |
| namespace webrtc { | |
| namespace { | |
| struct DummyConfig { | |
| bool enabled = false; | |
| double factor = 0.5; | |
| int retries = 5; | |
| unsigned size = 3; | |
| bool ping = 0; | |
| std::optional<TimeDelta> duration; | |
| std::optional<TimeDelta> latency = TimeDelta::Millis(100); | |
| std::unique_ptr<StructParametersParser> Parser(); | |
| }; | |
| std::unique_ptr<StructParametersParser> DummyConfig::Parser() { | |
| // The empty comments ensures that each pair is on a separate line. | |
| return StructParametersParser::Create("e", &enabled, // | |
| "f", &factor, // | |
| "r", &retries, // | |
| "s", &size, // | |
| "p", &ping, // | |
| "d", &duration, // | |
| "l", &latency); | |
| } | |
| } // namespace | |
| TEST(StructParametersParserTest, ParsesValidParameters) { | |
| DummyConfig exp; | |
| exp.Parser()->Parse("e:1,f:-1.7,r:2,s:7,p:1,d:8,l:,"); | |
| EXPECT_TRUE(exp.enabled); | |
| EXPECT_EQ(exp.factor, -1.7); | |
| EXPECT_EQ(exp.retries, 2); | |
| EXPECT_EQ(exp.size, 7u); | |
| EXPECT_EQ(exp.ping, true); | |
| EXPECT_EQ(exp.duration.value().ms(), 8); | |
| EXPECT_FALSE(exp.latency); | |
| } | |
| TEST(StructParametersParserTest, UsesDefaults) { | |
| DummyConfig exp; | |
| exp.Parser()->Parse(""); | |
| EXPECT_FALSE(exp.enabled); | |
| EXPECT_EQ(exp.factor, 0.5); | |
| EXPECT_EQ(exp.retries, 5); | |
| EXPECT_EQ(exp.size, 3u); | |
| EXPECT_EQ(exp.ping, false); | |
| } | |
| TEST(StructParametersParserTest, EncodeAll) { | |
| DummyConfig exp; | |
| auto encoded = exp.Parser()->Encode(); | |
| // All parameters are encoded. | |
| EXPECT_EQ(encoded, "e:false,f:0.5,r:5,s:3,p:false,d:,l:100 ms"); | |
| } | |
| } // namespace webrtc |