OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include <utility> | 11 #include <utility> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adapto
r_impl.h" | 15 #include "webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adapto
r_impl.h" |
16 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
.h" | 16 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
.h" |
17 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
_manager.h" | 17 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller
_manager.h" |
18 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump
_writer.h" | |
19 | 18 |
20 namespace webrtc { | 19 namespace webrtc { |
21 | 20 |
22 using ::testing::_; | 21 using ::testing::_; |
23 using ::testing::NiceMock; | 22 using ::testing::NiceMock; |
24 using ::testing::Return; | 23 using ::testing::Return; |
25 using ::testing::SetArgPointee; | |
26 | 24 |
27 namespace { | 25 namespace { |
28 | 26 |
29 constexpr size_t kNumControllers = 2; | 27 constexpr size_t kNumControllers = 2; |
30 | 28 |
31 constexpr int64_t kClockInitialTimeMs = 12345678; | |
32 | |
33 MATCHER_P(NetworkMetricsIs, metric, "") { | 29 MATCHER_P(NetworkMetricsIs, metric, "") { |
34 return arg.uplink_bandwidth_bps == metric.uplink_bandwidth_bps && | 30 return arg.uplink_bandwidth_bps == metric.uplink_bandwidth_bps && |
35 arg.target_audio_bitrate_bps == metric.target_audio_bitrate_bps && | 31 arg.target_audio_bitrate_bps == metric.target_audio_bitrate_bps && |
36 arg.rtt_ms == metric.rtt_ms && | |
37 arg.uplink_packet_loss_fraction == metric.uplink_packet_loss_fraction; | 32 arg.uplink_packet_loss_fraction == metric.uplink_packet_loss_fraction; |
38 } | 33 } |
39 | 34 |
40 MATCHER_P(ConstraintsReceiverFrameLengthRangeIs, frame_length_range, "") { | 35 MATCHER_P(ConstraintsReceiverFrameLengthRangeIs, frame_length_range, "") { |
41 return arg.receiver_frame_length_range->min_frame_length_ms == | 36 return arg.receiver_frame_length_range->min_frame_length_ms == |
42 frame_length_range.min_frame_length_ms && | 37 frame_length_range.min_frame_length_ms && |
43 arg.receiver_frame_length_range->max_frame_length_ms == | 38 arg.receiver_frame_length_range->max_frame_length_ms == |
44 frame_length_range.max_frame_length_ms; | 39 frame_length_range.max_frame_length_ms; |
45 } | 40 } |
46 | 41 |
47 MATCHER_P(EncoderRuntimeConfigIs, config, "") { | |
48 return arg.bitrate_bps == config.bitrate_bps && | |
49 arg.frame_length_ms == config.frame_length_ms && | |
50 arg.uplink_packet_loss_fraction == | |
51 config.uplink_packet_loss_fraction && | |
52 arg.enable_fec == config.enable_fec && | |
53 arg.enable_dtx == config.enable_dtx && | |
54 arg.num_channels == config.num_channels; | |
55 } | |
56 | |
57 struct AudioNetworkAdaptorStates { | 42 struct AudioNetworkAdaptorStates { |
58 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor; | 43 std::unique_ptr<AudioNetworkAdaptorImpl> audio_network_adaptor; |
59 std::vector<std::unique_ptr<MockController>> mock_controllers; | 44 std::vector<std::unique_ptr<MockController>> mock_controllers; |
60 std::unique_ptr<SimulatedClock> simulated_clock; | |
61 MockDebugDumpWriter* mock_debug_dump_writer; | |
62 }; | 45 }; |
63 | 46 |
64 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() { | 47 AudioNetworkAdaptorStates CreateAudioNetworkAdaptor() { |
65 AudioNetworkAdaptorStates states; | 48 AudioNetworkAdaptorStates states; |
66 std::vector<Controller*> controllers; | 49 std::vector<Controller*> controllers; |
67 for (size_t i = 0; i < kNumControllers; ++i) { | 50 for (size_t i = 0; i < kNumControllers; ++i) { |
68 auto controller = | 51 auto controller = |
69 std::unique_ptr<MockController>(new NiceMock<MockController>()); | 52 std::unique_ptr<MockController>(new NiceMock<MockController>()); |
70 EXPECT_CALL(*controller, Die()); | 53 EXPECT_CALL(*controller, Die()); |
71 controllers.push_back(controller.get()); | 54 controllers.push_back(controller.get()); |
72 states.mock_controllers.push_back(std::move(controller)); | 55 states.mock_controllers.push_back(std::move(controller)); |
73 } | 56 } |
74 | 57 |
75 auto controller_manager = std::unique_ptr<MockControllerManager>( | 58 auto controller_manager = std::unique_ptr<MockControllerManager>( |
76 new NiceMock<MockControllerManager>()); | 59 new NiceMock<MockControllerManager>()); |
77 | 60 |
78 EXPECT_CALL(*controller_manager, Die()); | 61 EXPECT_CALL(*controller_manager, Die()); |
79 EXPECT_CALL(*controller_manager, GetControllers()) | 62 EXPECT_CALL(*controller_manager, GetControllers()) |
80 .WillRepeatedly(Return(controllers)); | 63 .WillRepeatedly(Return(controllers)); |
81 EXPECT_CALL(*controller_manager, GetSortedControllers(_)) | 64 EXPECT_CALL(*controller_manager, GetSortedControllers(_)) |
82 .WillRepeatedly(Return(controllers)); | 65 .WillRepeatedly(Return(controllers)); |
83 | 66 |
84 states.simulated_clock.reset(new SimulatedClock(kClockInitialTimeMs * 1000)); | |
85 | |
86 auto debug_dump_writer = | |
87 std::unique_ptr<MockDebugDumpWriter>(new NiceMock<MockDebugDumpWriter>()); | |
88 EXPECT_CALL(*debug_dump_writer, Die()); | |
89 states.mock_debug_dump_writer = debug_dump_writer.get(); | |
90 | |
91 AudioNetworkAdaptorImpl::Config config; | |
92 config.clock = states.simulated_clock.get(); | |
93 // AudioNetworkAdaptorImpl governs the lifetime of controller manager. | 67 // AudioNetworkAdaptorImpl governs the lifetime of controller manager. |
94 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl( | 68 states.audio_network_adaptor.reset(new AudioNetworkAdaptorImpl( |
95 config, | 69 AudioNetworkAdaptorImpl::Config(), std::move(controller_manager))); |
96 std::move(controller_manager), std::move(debug_dump_writer))); | |
97 | 70 |
98 return states; | 71 return states; |
99 } | 72 } |
100 | 73 |
101 } // namespace | 74 } // namespace |
102 | 75 |
103 TEST(AudioNetworkAdaptorImplTest, | 76 TEST(AudioNetworkAdaptorImplTest, |
104 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) { | 77 MakeDecisionIsCalledOnGetEncoderRuntimeConfig) { |
105 auto states = CreateAudioNetworkAdaptor(); | 78 auto states = CreateAudioNetworkAdaptor(); |
106 | 79 |
(...skipping 21 matching lines...) Expand all Loading... |
128 auto states = CreateAudioNetworkAdaptor(); | 101 auto states = CreateAudioNetworkAdaptor(); |
129 | 102 |
130 for (auto& mock_controller : states.mock_controllers) { | 103 for (auto& mock_controller : states.mock_controllers) { |
131 EXPECT_CALL(*mock_controller, | 104 EXPECT_CALL(*mock_controller, |
132 SetConstraints(ConstraintsReceiverFrameLengthRangeIs( | 105 SetConstraints(ConstraintsReceiverFrameLengthRangeIs( |
133 Controller::Constraints::FrameLengthRange(20, 120)))); | 106 Controller::Constraints::FrameLengthRange(20, 120)))); |
134 } | 107 } |
135 states.audio_network_adaptor->SetReceiverFrameLengthRange(20, 120); | 108 states.audio_network_adaptor->SetReceiverFrameLengthRange(20, 120); |
136 } | 109 } |
137 | 110 |
138 TEST(AudioNetworkAdaptorImplTest, | |
139 DumpEncoderRuntimeConfigIsCalledOnGetEncoderRuntimeConfig) { | |
140 auto states = CreateAudioNetworkAdaptor(); | |
141 | |
142 AudioNetworkAdaptor::EncoderRuntimeConfig config; | |
143 config.bitrate_bps = rtc::Optional<int>(32000); | |
144 config.enable_fec = rtc::Optional<bool>(true); | |
145 | |
146 EXPECT_CALL(*states.mock_controllers[0], MakeDecision(_, _)) | |
147 .WillOnce(SetArgPointee<1>(config)); | |
148 | |
149 EXPECT_CALL(*states.mock_debug_dump_writer, | |
150 DumpEncoderRuntimeConfig(EncoderRuntimeConfigIs(config), | |
151 kClockInitialTimeMs)); | |
152 states.audio_network_adaptor->GetEncoderRuntimeConfig(); | |
153 } | |
154 | |
155 TEST(AudioNetworkAdaptorImplTest, | |
156 DumpNetworkMetricsIsCalledOnSetNetworkMetrics) { | |
157 auto states = CreateAudioNetworkAdaptor(); | |
158 | |
159 constexpr int kBandwidth = 16000; | |
160 constexpr float kPacketLoss = 0.7f; | |
161 constexpr int kRtt = 100; | |
162 | |
163 Controller::NetworkMetrics check; | |
164 check.uplink_bandwidth_bps = rtc::Optional<int>(kBandwidth); | |
165 int64_t timestamp_check = kClockInitialTimeMs; | |
166 | |
167 EXPECT_CALL(*states.mock_debug_dump_writer, | |
168 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | |
169 states.audio_network_adaptor->SetUplinkBandwidth(kBandwidth); | |
170 | |
171 states.simulated_clock->AdvanceTimeMilliseconds(100); | |
172 timestamp_check += 100; | |
173 check.uplink_packet_loss_fraction = rtc::Optional<float>(kPacketLoss); | |
174 EXPECT_CALL(*states.mock_debug_dump_writer, | |
175 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | |
176 states.audio_network_adaptor->SetUplinkPacketLossFraction(kPacketLoss); | |
177 | |
178 states.simulated_clock->AdvanceTimeMilliseconds(200); | |
179 timestamp_check += 200; | |
180 check.rtt_ms = rtc::Optional<int>(kRtt); | |
181 EXPECT_CALL(*states.mock_debug_dump_writer, | |
182 DumpNetworkMetrics(NetworkMetricsIs(check), timestamp_check)); | |
183 states.audio_network_adaptor->SetRtt(kRtt); | |
184 } | |
185 | |
186 } // namespace webrtc | 111 } // namespace webrtc |
OLD | NEW |