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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr_unittest.cc

Issue 1675583002: [rtp_rtcp] rtcp::Tmmbr cleaned and got Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: spelling Created 4 years, 10 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
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 "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
12 12
13 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 16 using testing::ElementsAreArray;
16 #include "webrtc/test/rtcp_packet_parser.h" 17 using testing::IsEmpty;
17 18 using testing::make_tuple;
18 using webrtc::rtcp::RawPacket; 19 using webrtc::rtcp::RawPacket;
20 using webrtc::rtcp::TmmbItem;
19 using webrtc::rtcp::Tmmbr; 21 using webrtc::rtcp::Tmmbr;
20 using webrtc::test::RtcpPacketParser; 22 using webrtc::RTCPUtility::RtcpCommonHeader;
23 using webrtc::RTCPUtility::RtcpParseCommonHeader;
21 24
22 namespace webrtc { 25 namespace webrtc {
26 namespace {
23 const uint32_t kSenderSsrc = 0x12345678; 27 const uint32_t kSenderSsrc = 0x12345678;
24 const uint32_t kRemoteSsrc = 0x23456789; 28 const uint32_t kRemoteSsrc = 0x23456789;
29 const uint32_t kBitrateBps = 312000;
30 const uint16_t kOverhead = 0x1fe;
31 const uint8_t kPacket[] = {0x83, 205, 0x00, 0x04,
32 0x12, 0x34, 0x56, 0x78,
33 0x00, 0x00, 0x00, 0x00,
34 0x23, 0x45, 0x67, 0x89,
35 0x0a, 0x61, 0x61, 0xfe};
25 36
26 TEST(RtcpPacketTest, Tmmbr) { 37 bool ParseTmmbr(const uint8_t* buffer, size_t length, Tmmbr* tmmbr) {
38 RtcpCommonHeader header;
39 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
40 EXPECT_EQ(length, header.BlockSize());
41 return tmmbr->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
42 }
43 } // namespace
44
45 TEST(RtcpPacketTmmbrTest, Create) {
27 Tmmbr tmmbr; 46 Tmmbr tmmbr;
28 tmmbr.From(kSenderSsrc); 47 tmmbr.From(kSenderSsrc);
29 tmmbr.To(kRemoteSsrc); 48 tmmbr.WithTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
30 tmmbr.WithBitrateKbps(312);
31 tmmbr.WithOverhead(60);
32 49
33 rtc::scoped_ptr<RawPacket> packet(tmmbr.Build()); 50 rtc::scoped_ptr<RawPacket> packet = tmmbr.Build();
34 RtcpPacketParser parser; 51
35 parser.Parse(packet->Buffer(), packet->Length()); 52 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()),
36 EXPECT_EQ(1, parser.tmmbr()->num_packets()); 53 ElementsAreArray(kPacket));
37 EXPECT_EQ(kSenderSsrc, parser.tmmbr()->Ssrc());
38 EXPECT_EQ(1, parser.tmmbr_item()->num_packets());
39 EXPECT_EQ(312U, parser.tmmbr_item()->BitrateKbps());
40 EXPECT_EQ(60U, parser.tmmbr_item()->Overhead());
41 } 54 }
42 55
56 TEST(RtcpPacketTmmbrTest, Parse) {
57 Tmmbr tmmbr;
58 EXPECT_TRUE(ParseTmmbr(kPacket, sizeof(kPacket), &tmmbr));
59 const Tmmbr& parsed = tmmbr;
60
61 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
62 ASSERT_EQ(1u, parsed.requests().size());
63 EXPECT_EQ(kRemoteSsrc, parsed.requests().front().ssrc());
64 EXPECT_EQ(kBitrateBps, parsed.requests().front().bitrate_bps());
65 EXPECT_EQ(kOverhead, parsed.requests().front().packet_overhead());
66 }
67
68 TEST(RtcpPacketTmmbrTest, CreateAndParseWithTwoEntries) {
69 Tmmbr tmmbr;
70 tmmbr.From(kSenderSsrc);
71 tmmbr.WithTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
72 tmmbr.WithTmmbr(TmmbItem(kRemoteSsrc + 1, 4 * kBitrateBps, kOverhead + 1));
73
74 rtc::scoped_ptr<RawPacket> packet = tmmbr.Build();
75
76 Tmmbr parsed;
77 EXPECT_TRUE(ParseTmmbr(packet->Buffer(), packet->Length(), &parsed));
78
79 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
80 EXPECT_EQ(2u, parsed.requests().size());
81 EXPECT_EQ(kRemoteSsrc, parsed.requests()[0].ssrc());
82 EXPECT_EQ(kRemoteSsrc + 1, parsed.requests()[1].ssrc());
83 }
84
85 TEST(RtcpPacketTmmbrTest, ParseFailsWithoutItems) {
86 const uint8_t kZeroItemsPacket[] = {0x83, 205, 0x00, 0x02,
87 0x12, 0x34, 0x56, 0x78,
88 0x00, 0x00, 0x00, 0x00};
89
90 Tmmbr tmmbr;
91 EXPECT_FALSE(ParseTmmbr(kZeroItemsPacket, sizeof(kZeroItemsPacket), &tmmbr));
92 }
93
94 TEST(RtcpPacketTmmbrTest, ParseFailsOnUnAlignedPacket) {
95 const uint8_t kUnalignedPacket[] = {0x83, 205, 0x00, 0x05,
96 0x12, 0x34, 0x56, 0x78,
97 0x00, 0x00, 0x00, 0x00,
98 0x23, 0x45, 0x67, 0x89,
99 0x0a, 0x61, 0x61, 0xfe,
100 0x34, 0x56, 0x78, 0x9a};
101
102 Tmmbr tmmbr;
103 EXPECT_FALSE(ParseTmmbr(kUnalignedPacket, sizeof(kUnalignedPacket), &tmmbr));
104 }
43 } // namespace webrtc 105 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.cc ('k') | webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698