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

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

Issue 1670973002: [rtp_rtcp] rtcp::Tmmbn cleaned and got Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase & 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
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/tmmbn.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.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::Tmmbn; 21 using webrtc::rtcp::Tmmbn;
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[] = {0x84, 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, TmmbnWithNoItem) { 37 bool ParseTmmbn(const uint8_t* buffer, size_t length, Tmmbn* tmmbn) {
38 RtcpCommonHeader header;
39 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
40 EXPECT_EQ(length, header.BlockSize());
41 return tmmbn->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
42 }
43 } // namespace
44
45 TEST(RtcpPacketTmmbnTest, Create) {
46 Tmmbn tmmbn;
47 tmmbn.From(kSenderSsrc);
48 tmmbn.WithTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
49
50 rtc::scoped_ptr<RawPacket> packet = tmmbn.Build();
51
52 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()),
53 ElementsAreArray(kPacket));
54 }
55
56 TEST(RtcpPacketTmmbnTest, Parse) {
57 Tmmbn tmmbn;
58 EXPECT_TRUE(ParseTmmbn(kPacket, sizeof(kPacket), &tmmbn));
59
60 const Tmmbn& parsed = tmmbn;
61
62 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
63 ASSERT_EQ(1u, parsed.items().size());
64 EXPECT_EQ(kRemoteSsrc, parsed.items().front().ssrc());
65 EXPECT_EQ(kBitrateBps, parsed.items().front().bitrate_bps());
66 EXPECT_EQ(kOverhead, parsed.items().front().packet_overhead());
67 }
68
69 TEST(RtcpPacketTmmbnTest, CreateAndParseWithoutItems) {
27 Tmmbn tmmbn; 70 Tmmbn tmmbn;
28 tmmbn.From(kSenderSsrc); 71 tmmbn.From(kSenderSsrc);
29 72
30 rtc::scoped_ptr<RawPacket> packet(tmmbn.Build()); 73 rtc::scoped_ptr<RawPacket> packet = tmmbn.Build();
31 RtcpPacketParser parser; 74 Tmmbn parsed;
32 parser.Parse(packet->Buffer(), packet->Length()); 75 EXPECT_TRUE(ParseTmmbn(packet->Buffer(), packet->Length(), &parsed));
33 EXPECT_EQ(1, parser.tmmbn()->num_packets()); 76
34 EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc()); 77 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
35 EXPECT_EQ(0, parser.tmmbn_items()->num_packets()); 78 EXPECT_THAT(parsed.items(), IsEmpty());
36 } 79 }
37 80
38 TEST(RtcpPacketTest, TmmbnWithOneItem) { 81 TEST(RtcpPacketTmmbnTest, CreateAndParseWithTwoItems) {
39 Tmmbn tmmbn; 82 Tmmbn tmmbn;
40 tmmbn.From(kSenderSsrc); 83 tmmbn.From(kSenderSsrc);
41 EXPECT_TRUE(tmmbn.WithTmmbr(kRemoteSsrc, 312, 60)); 84 tmmbn.WithTmmbr(TmmbItem(kRemoteSsrc, kBitrateBps, kOverhead));
85 tmmbn.WithTmmbr(TmmbItem(kRemoteSsrc + 1, 4 * kBitrateBps, 40));
42 86
43 rtc::scoped_ptr<RawPacket> packet(tmmbn.Build()); 87 rtc::scoped_ptr<RawPacket> packet = tmmbn.Build();
44 RtcpPacketParser parser; 88 Tmmbn parsed;
45 parser.Parse(packet->Buffer(), packet->Length()); 89 EXPECT_TRUE(ParseTmmbn(packet->Buffer(), packet->Length(), &parsed));
46 EXPECT_EQ(1, parser.tmmbn()->num_packets()); 90
47 EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc()); 91 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
48 EXPECT_EQ(1, parser.tmmbn_items()->num_packets()); 92 EXPECT_EQ(2u, parsed.items().size());
49 EXPECT_EQ(kRemoteSsrc, parser.tmmbn_items()->Ssrc(0)); 93 EXPECT_EQ(kRemoteSsrc, parsed.items()[0].ssrc());
50 EXPECT_EQ(312U, parser.tmmbn_items()->BitrateKbps(0)); 94 EXPECT_EQ(kBitrateBps, parsed.items()[0].bitrate_bps());
51 EXPECT_EQ(60U, parser.tmmbn_items()->Overhead(0)); 95 EXPECT_EQ(kOverhead, parsed.items()[0].packet_overhead());
96 EXPECT_EQ(kRemoteSsrc + 1, parsed.items()[1].ssrc());
97 EXPECT_EQ(4 * kBitrateBps, parsed.items()[1].bitrate_bps());
98 EXPECT_EQ(40U, parsed.items()[1].packet_overhead());
52 } 99 }
53 100
54 TEST(RtcpPacketTest, TmmbnWithTwoItems) { 101 TEST(RtcpPacketTmmbnTest, ParseFailsOnTooSmallPacket) {
102 const uint8_t kSmallPacket[] = {0x84, 205, 0x00, 0x01,
103 0x12, 0x34, 0x56, 0x78};
55 Tmmbn tmmbn; 104 Tmmbn tmmbn;
56 tmmbn.From(kSenderSsrc); 105 EXPECT_FALSE(ParseTmmbn(kSmallPacket, sizeof(kSmallPacket), &tmmbn));
57 EXPECT_TRUE(tmmbn.WithTmmbr(kRemoteSsrc, 312, 60));
58 EXPECT_TRUE(tmmbn.WithTmmbr(kRemoteSsrc + 1, 1288, 40));
59
60 rtc::scoped_ptr<RawPacket> packet(tmmbn.Build());
61 RtcpPacketParser parser;
62 parser.Parse(packet->Buffer(), packet->Length());
63 EXPECT_EQ(1, parser.tmmbn()->num_packets());
64 EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc());
65 EXPECT_EQ(2, parser.tmmbn_items()->num_packets());
66 EXPECT_EQ(kRemoteSsrc, parser.tmmbn_items()->Ssrc(0));
67 EXPECT_EQ(312U, parser.tmmbn_items()->BitrateKbps(0));
68 EXPECT_EQ(60U, parser.tmmbn_items()->Overhead(0));
69 EXPECT_EQ(kRemoteSsrc + 1, parser.tmmbn_items()->Ssrc(1));
70 EXPECT_EQ(1288U, parser.tmmbn_items()->BitrateKbps(1));
71 EXPECT_EQ(40U, parser.tmmbn_items()->Overhead(1));
72 } 106 }
73 107
74 TEST(RtcpPacketTest, TmmbnWithTooManyItems) { 108 TEST(RtcpPacketTmmbnTest, ParseFailsOnUnAlignedPacket) {
109 const uint8_t kUnalignedPacket[] = {0x84, 205, 0x00, 0x03,
110 0x12, 0x34, 0x56, 0x78,
111 0x00, 0x00, 0x00, 0x00,
112 0x23, 0x45, 0x67, 0x89};
113
75 Tmmbn tmmbn; 114 Tmmbn tmmbn;
76 tmmbn.From(kSenderSsrc); 115 EXPECT_FALSE(ParseTmmbn(kUnalignedPacket, sizeof(kUnalignedPacket), &tmmbn));
77 const int kMaxTmmbrItems = 50;
78 for (int i = 0; i < kMaxTmmbrItems; ++i)
79 EXPECT_TRUE(tmmbn.WithTmmbr(kRemoteSsrc + i, 312, 60));
80
81 EXPECT_FALSE(tmmbn.WithTmmbr(kRemoteSsrc + kMaxTmmbrItems, 312, 60));
82 } 116 }
83
84 } // namespace webrtc 117 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698