blob: 94cbdb88522692b7989c40f99db57fec97f3dfb0 [file] [log] [blame]
Sebastian Jansson9eb38862018-06-14 16:47:42 +02001/*
2 * Copyright 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10#include <string>
11
Yves Gerey3e707812018-11-28 16:47:49 +010012#include "absl/types/optional.h"
Sebastian Jansson9eb38862018-06-14 16:47:42 +020013#include "rtc_base/experiments/field_trial_parser.h"
14#include "rtc_base/experiments/field_trial_units.h"
Yves Gerey3e707812018-11-28 16:47:49 +010015#include "test/gtest.h"
Sebastian Jansson9eb38862018-06-14 16:47:42 +020016
17namespace webrtc {
18namespace {
19struct DummyExperiment {
20 FieldTrialParameter<DataRate> target_rate =
21 FieldTrialParameter<DataRate>("t", DataRate::kbps(100));
22 FieldTrialParameter<TimeDelta> period =
23 FieldTrialParameter<TimeDelta>("p", TimeDelta::ms(100));
24 FieldTrialOptional<DataSize> max_buffer =
Danil Chapovalov0a1d1892018-06-21 11:48:25 +020025 FieldTrialOptional<DataSize>("b", absl::nullopt);
Sebastian Jansson9eb38862018-06-14 16:47:42 +020026
27 explicit DummyExperiment(std::string field_trial) {
28 ParseFieldTrial({&target_rate, &max_buffer, &period}, field_trial);
29 }
30};
31} // namespace
32
33TEST(FieldTrialParserUnitsTest, FallsBackToDefaults) {
34 DummyExperiment exp("");
35 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(100));
Sebastian Janssonfea46372018-09-03 10:15:13 +020036 EXPECT_FALSE(exp.max_buffer.GetOptional().has_value());
Sebastian Jansson9eb38862018-06-14 16:47:42 +020037 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(100));
38}
39TEST(FieldTrialParserUnitsTest, ParsesUnitParameters) {
40 DummyExperiment exp("t:300kbps,b:5bytes,p:300ms");
41 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020042 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(5));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020043 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
44}
45TEST(FieldTrialParserUnitsTest, ParsesDefaultUnitParameters) {
46 DummyExperiment exp("t:300,b:5,p:300");
47 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020048 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(5));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020049 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
50}
51TEST(FieldTrialParserUnitsTest, ParsesInfinityParameter) {
52 DummyExperiment exp("t:inf,p:inf");
53 EXPECT_EQ(exp.target_rate.Get(), DataRate::Infinity());
54 EXPECT_EQ(exp.period.Get(), TimeDelta::PlusInfinity());
55}
56TEST(FieldTrialParserUnitsTest, ParsesOtherUnitParameters) {
57 DummyExperiment exp("t:300bps,p:0.3 seconds,b:8 bytes");
58 EXPECT_EQ(exp.target_rate.Get(), DataRate::bps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020059 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(8));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020060 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
61}
Sebastian Janssonb22f0772018-11-19 17:44:33 +010062TEST(FieldTrialParserUnitsTest, IgnoresOutOfRange) {
63 FieldTrialConstrained<DataRate> rate("r", DataRate::kbps(30),
64 DataRate::kbps(10), DataRate::kbps(100));
65 FieldTrialConstrained<TimeDelta> delta("d", TimeDelta::ms(30),
66 TimeDelta::ms(10), TimeDelta::ms(100));
67 FieldTrialConstrained<DataSize> size(
68 "s", DataSize::bytes(30), DataSize::bytes(10), DataSize::bytes(100));
69 ParseFieldTrial({&rate, &delta, &size}, "r:0,d:0,s:0");
70 EXPECT_EQ(rate->kbps(), 30);
71 EXPECT_EQ(delta->ms(), 30);
72 EXPECT_EQ(size->bytes(), 30);
73 ParseFieldTrial({&rate, &delta, &size}, "r:300,d:300,s:300");
74 EXPECT_EQ(rate->kbps(), 30);
75 EXPECT_EQ(delta->ms(), 30);
76 EXPECT_EQ(size->bytes(), 30);
77 ParseFieldTrial({&rate, &delta, &size}, "r:50,d:50,s:50");
78 EXPECT_EQ(rate->kbps(), 50);
79 EXPECT_EQ(delta->ms(), 50);
80 EXPECT_EQ(size->bytes(), 50);
81}
Sebastian Jansson9eb38862018-06-14 16:47:42 +020082
83} // namespace webrtc