blob: 189fd103e9abe9d0181083d7c146256479020479 [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 */
Jonas Olssona4d87372019-07-05 19:08:33 +020010#include "rtc_base/experiments/field_trial_units.h"
11
Sebastian Jansson9eb38862018-06-14 16:47:42 +020012#include <string>
13
Yves Gerey3e707812018-11-28 16:47:49 +010014#include "absl/types/optional.h"
Sebastian Jansson9eb38862018-06-14 16:47:42 +020015#include "rtc_base/experiments/field_trial_parser.h"
Yves Gerey3e707812018-11-28 16:47:49 +010016#include "test/gtest.h"
Sebastian Jansson9eb38862018-06-14 16:47:42 +020017
18namespace webrtc {
19namespace {
20struct DummyExperiment {
21 FieldTrialParameter<DataRate> target_rate =
22 FieldTrialParameter<DataRate>("t", DataRate::kbps(100));
23 FieldTrialParameter<TimeDelta> period =
24 FieldTrialParameter<TimeDelta>("p", TimeDelta::ms(100));
25 FieldTrialOptional<DataSize> max_buffer =
Danil Chapovalov0a1d1892018-06-21 11:48:25 +020026 FieldTrialOptional<DataSize>("b", absl::nullopt);
Sebastian Jansson9eb38862018-06-14 16:47:42 +020027
28 explicit DummyExperiment(std::string field_trial) {
29 ParseFieldTrial({&target_rate, &max_buffer, &period}, field_trial);
30 }
31};
32} // namespace
33
34TEST(FieldTrialParserUnitsTest, FallsBackToDefaults) {
35 DummyExperiment exp("");
36 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(100));
Sebastian Janssonfea46372018-09-03 10:15:13 +020037 EXPECT_FALSE(exp.max_buffer.GetOptional().has_value());
Sebastian Jansson9eb38862018-06-14 16:47:42 +020038 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(100));
39}
40TEST(FieldTrialParserUnitsTest, ParsesUnitParameters) {
41 DummyExperiment exp("t:300kbps,b:5bytes,p:300ms");
42 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020043 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(5));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020044 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
45}
46TEST(FieldTrialParserUnitsTest, ParsesDefaultUnitParameters) {
47 DummyExperiment exp("t:300,b:5,p:300");
48 EXPECT_EQ(exp.target_rate.Get(), DataRate::kbps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020049 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(5));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020050 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
51}
52TEST(FieldTrialParserUnitsTest, ParsesInfinityParameter) {
53 DummyExperiment exp("t:inf,p:inf");
54 EXPECT_EQ(exp.target_rate.Get(), DataRate::Infinity());
55 EXPECT_EQ(exp.period.Get(), TimeDelta::PlusInfinity());
56}
57TEST(FieldTrialParserUnitsTest, ParsesOtherUnitParameters) {
58 DummyExperiment exp("t:300bps,p:0.3 seconds,b:8 bytes");
59 EXPECT_EQ(exp.target_rate.Get(), DataRate::bps(300));
Sebastian Janssonfea46372018-09-03 10:15:13 +020060 EXPECT_EQ(*exp.max_buffer.GetOptional(), DataSize::bytes(8));
Sebastian Jansson9eb38862018-06-14 16:47:42 +020061 EXPECT_EQ(exp.period.Get(), TimeDelta::ms(300));
62}
Sebastian Janssonb22f0772018-11-19 17:44:33 +010063TEST(FieldTrialParserUnitsTest, IgnoresOutOfRange) {
64 FieldTrialConstrained<DataRate> rate("r", DataRate::kbps(30),
65 DataRate::kbps(10), DataRate::kbps(100));
66 FieldTrialConstrained<TimeDelta> delta("d", TimeDelta::ms(30),
67 TimeDelta::ms(10), TimeDelta::ms(100));
68 FieldTrialConstrained<DataSize> size(
69 "s", DataSize::bytes(30), DataSize::bytes(10), DataSize::bytes(100));
70 ParseFieldTrial({&rate, &delta, &size}, "r:0,d:0,s:0");
71 EXPECT_EQ(rate->kbps(), 30);
72 EXPECT_EQ(delta->ms(), 30);
73 EXPECT_EQ(size->bytes(), 30);
74 ParseFieldTrial({&rate, &delta, &size}, "r:300,d:300,s:300");
75 EXPECT_EQ(rate->kbps(), 30);
76 EXPECT_EQ(delta->ms(), 30);
77 EXPECT_EQ(size->bytes(), 30);
78 ParseFieldTrial({&rate, &delta, &size}, "r:50,d:50,s:50");
79 EXPECT_EQ(rate->kbps(), 50);
80 EXPECT_EQ(delta->ms(), 50);
81 EXPECT_EQ(size->bytes(), 50);
82}
Sebastian Jansson9eb38862018-06-14 16:47:42 +020083
84} // namespace webrtc