Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: webrtc/audio/audio_send_stream_tests.cc

Issue 3007383002: Replace voe_auto_test (Closed)
Patch Set: rebase Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2017 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
11 #include "webrtc/test/call_test.h"
12 #include "webrtc/test/gtest.h"
13 #include "webrtc/test/rtcp_packet_parser.h"
14
15 namespace webrtc {
16 namespace test {
17 namespace {
18
19 class AudioSendTest : public SendTest {
20 public:
21 AudioSendTest() : SendTest(CallTest::kDefaultTimeoutMs) {}
22
23 size_t GetNumVideoStreams() const override {
24 return 0;
25 }
26 size_t GetNumAudioStreams() const override {
27 return 1;
28 }
29 size_t GetNumFlexfecStreams() const override {
30 return 0;
31 }
32 };
33 } // namespace
34
35 using AudioSendStreamCallTest = CallTest;
36
37 TEST_F(AudioSendStreamCallTest, SupportsCName) {
38 static std::string kCName = "PjqatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo=";
39 class CNameObserver : public AudioSendTest {
40 public:
41 CNameObserver() : AudioSendTest() {}
ossu 2017/09/14 11:51:58 Will CNameObserver() = default; do?
the sun 2017/09/14 12:36:39 Done.
42
43 private:
44 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
45 RtcpPacketParser parser;
46 EXPECT_TRUE(parser.Parse(packet, length));
47 if (parser.sdes()->num_packets() > 0) {
48 EXPECT_EQ(1u, parser.sdes()->chunks().size());
49 EXPECT_EQ(kCName, parser.sdes()->chunks()[0].cname);
50
51 observation_complete_.Set();
52 }
53
54 return SEND_PACKET;
55 }
56
57 void ModifyAudioConfigs(
58 AudioSendStream::Config* send_config,
59 std::vector<AudioReceiveStream::Config>* receive_configs) override {
60 send_config->rtp.c_name = kCName;
61 }
62
63 void PerformTest() override {
64 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME.";
65 }
66 } test;
67
68 RunBaseTest(&test);
69 }
70
71 TEST_F(AudioSendStreamCallTest, SupportsAudioLevel) {
72 class AudioLevelObserver : public AudioSendTest {
73 public:
74 AudioLevelObserver() : AudioSendTest() {
75 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
76 kRtpExtensionAudioLevel, test::kAudioLevelExtensionId));
77 }
78
79 Action OnSendRtp(const uint8_t* packet, size_t length) override {
80 RTPHeader header;
81 EXPECT_TRUE(parser_->Parse(packet, length, &header));
82
83 EXPECT_TRUE(header.extension.hasAudioLevel);
ossu 2017/09/14 11:51:58 The old tests included one that checked that no au
the sun 2017/09/14 12:36:40 Done.
84 if (header.extension.audioLevel != 0) {
85 // Wait for at least one packet with a non-zero level.
86 observation_complete_.Set();
87 } else {
88 LOG(LS_WARNING) << "Got a packet with zero audioLevel - waiting"
ossu 2017/09/14 11:51:58 When can this happen? Where does the audio come fr
the sun 2017/09/14 12:36:39 The test signal is a periodic noise burst.
ossu 2017/09/14 12:51:32 Alright. I was thinking if this would often get lo
the sun 2017/09/14 20:05:05 It is benign as long as the test eventually comple
89 " for another packet...";
90 }
91
92 return SEND_PACKET;
93 }
94
95 void ModifyAudioConfigs(
96 AudioSendStream::Config* send_config,
97 std::vector<AudioReceiveStream::Config>* receive_configs) override {
98 send_config->rtp.extensions.clear();
99 send_config->rtp.extensions.push_back(RtpExtension(
100 RtpExtension::kAudioLevelUri, test::kAudioLevelExtensionId));
101 }
102
103 void PerformTest() override {
104 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet.";
105 }
106 } test;
107
108 RunBaseTest(&test);
109 }
110
111 TEST_F(AudioSendStreamCallTest, SupportsTransportWideSequenceNumbers) {
ossu 2017/09/14 11:51:58 Is this test new? It looks like there are some see
the sun 2017/09/14 12:36:39 AbsoluteSendTime is no longer used. There was a le
ossu 2017/09/14 12:51:32 Acknowledged.
112 static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId;
113 class TransportWideSequenceNumberObserver : public AudioSendTest {
114 public:
115 TransportWideSequenceNumberObserver() : AudioSendTest() {
116 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
117 kRtpExtensionTransportSequenceNumber, kExtensionId));
118 }
119
120 private:
121 Action OnSendRtp(const uint8_t* packet, size_t length) override {
122 RTPHeader header;
123 EXPECT_TRUE(parser_->Parse(packet, length, &header));
124
125 EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
126 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
127 EXPECT_FALSE(header.extension.hasAbsoluteSendTime);
128
129 observation_complete_.Set();
130
131 return SEND_PACKET;
132 }
133
134 void ModifyAudioConfigs(
135 AudioSendStream::Config* send_config,
136 std::vector<AudioReceiveStream::Config>* receive_configs) override {
137 send_config->rtp.extensions.clear();
138 send_config->rtp.extensions.push_back(RtpExtension(
139 RtpExtension::kTransportSequenceNumberUri, kExtensionId));
140 }
141
142 void PerformTest() override {
143 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet.";
144 }
145 } test;
146
147 RunBaseTest(&test);
148 }
149
150 TEST_F(AudioSendStreamCallTest, SendDtmf) {
151 static const uint8_t kDtmfPayloadType = 120;
152 static const int kDtmfPayloadFrequency = 8000;
153 static const int kDtmfEventFirst = 12;
ossu 2017/09/14 11:51:58 It looks like this differs from the ranges tested
the sun 2017/09/14 12:36:39 It doesn't matter. The point is to test that event
ossu 2017/09/14 12:51:32 Acknowledged.
154 static const int kDtmfEventLast = 25;
155 static const int kDtmfDuration = 10;
156 class DtmfObserver : public AudioSendTest {
157 public:
158 DtmfObserver() : AudioSendTest() {}
ossu 2017/09/14 11:51:57 = default here as well?
the sun 2017/09/14 12:36:40 Done.
159
160 private:
161 Action OnSendRtp(const uint8_t* packet, size_t length) override {
162 RTPHeader header;
163 EXPECT_TRUE(parser_->Parse(packet, length, &header));
164
165 if (header.payloadType == kDtmfPayloadType) {
166 EXPECT_EQ(12u, header.headerLength);
167 const uint8_t event = packet[12];
168 if (expected_dtmf_event_ == event) {
ossu 2017/09/14 11:51:58 Will you want to ensure no other DTMF events are b
the sun 2017/09/14 12:36:40 In part, we're already testing this since for each
ossu 2017/09/14 12:51:32 Why not EXPECT_EQ(expected_dtmf_event_, event)? Ri
the sun 2017/09/14 20:05:06 Well, AFAIU (RFC 4733) extra events are perfectly
169 if (expected_dtmf_event_ == kDtmfEventLast) {
170 observation_complete_.Set();
171 } else {
172 ++expected_dtmf_event_;
173 }
174 }
175 }
176
177 return SEND_PACKET;
178 }
179
180 void OnAudioStreamsCreated(
181 AudioSendStream* send_stream,
182 const std::vector<AudioReceiveStream*>& receive_streams) override {
183 // Need to start stream here, else DTMF events are dropped.
184 send_stream->Start();
185 for (int event = kDtmfEventFirst; event <= kDtmfEventLast; ++event) {
186 send_stream->SendTelephoneEvent(kDtmfPayloadType, kDtmfPayloadFrequency,
187 event, kDtmfDuration);
188 }
189 }
190
191 void PerformTest() override {
192 EXPECT_TRUE(Wait()) << "Timed out while waiting for DTMF stream.";
193 }
194
195 int expected_dtmf_event_ = kDtmfEventFirst;
196 } test;
197
198 RunBaseTest(&test);
199 }
200
201 } // namespace test
202 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698