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

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

Issue 1544403002: [rtp_rtcp] rtcp::Fir cleaned and got Parse function. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 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/fir.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h"
12 12
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webrtc/test/rtcp_packet_parser.h"
16 15
16 using testing::AllOf;
17 using testing::ElementsAre;
18 using testing::ElementsAreArray;
19 using testing::Eq;
20 using testing::Field;
21 using testing::make_tuple;
17 using webrtc::rtcp::Fir; 22 using webrtc::rtcp::Fir;
18 using webrtc::rtcp::RawPacket; 23 using webrtc::rtcp::RawPacket;
19 using webrtc::test::RtcpPacketParser; 24 using webrtc::RTCPUtility::RtcpCommonHeader;
25 using webrtc::RTCPUtility::RtcpParseCommonHeader;
20 26
21 namespace webrtc { 27 namespace webrtc {
28 namespace {
22 29
23 const uint32_t kSenderSsrc = 0x12345678; 30 const uint32_t kSenderSsrc = 0x12345678;
24 const uint32_t kRemoteSsrc = 0x23456789; 31 const uint32_t kRemoteSsrc = 0x23456789;
32 const uint8_t kSeqNr = 13;
33 // Manually created Fir packet matching constants above.
34 const uint8_t kPacket[] = {0x84, 206, 0x00, 0x04,
35 0x12, 0x34, 0x56, 0x78,
36 0x00, 0x00, 0x00, 0x00,
37 0x23, 0x45, 0x67, 0x89,
38 0x0d, 0x00, 0x00, 0x00};
25 39
26 TEST(RtcpPacketFirTest, Fir) { 40 bool ParseFir(const uint8_t* buffer, size_t length, Fir* fir) {
41 RtcpCommonHeader header;
42 EXPECT_TRUE(RtcpParseCommonHeader(buffer, length, &header));
43 EXPECT_THAT(header.BlockSize(), Eq(length));
44 return fir->Parse(header, buffer + RtcpCommonHeader::kHeaderSizeBytes);
45 }
46
47 TEST(RtcpPacketFirTest, Parse) {
48 Fir mutable_parsed;
49 EXPECT_TRUE(ParseFir(kPacket, sizeof(kPacket), &mutable_parsed));
50 const Fir& parsed = mutable_parsed; // Read values from constant object.
51
52 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
53 EXPECT_THAT(parsed.requests(),
54 ElementsAre(AllOf(Field(&Fir::Request::ssrc, Eq(kRemoteSsrc)),
55 Field(&Fir::Request::seq_nr, Eq(kSeqNr)))));
56 }
57
58 TEST(RtcpPacketFirTest, Create) {
27 Fir fir; 59 Fir fir;
28 fir.From(kSenderSsrc); 60 fir.From(kSenderSsrc);
29 fir.To(kRemoteSsrc); 61 fir.WithRequestTo(kRemoteSsrc, kSeqNr);
30 fir.WithCommandSeqNum(123);
31 62
32 rtc::scoped_ptr<RawPacket> packet(fir.Build()); 63 rtc::scoped_ptr<RawPacket> packet = fir.Build();
33 RtcpPacketParser parser; 64
34 parser.Parse(packet->Buffer(), packet->Length()); 65 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()),
35 EXPECT_EQ(1, parser.fir()->num_packets()); 66 ElementsAreArray(kPacket));
36 EXPECT_EQ(kSenderSsrc, parser.fir()->Ssrc());
37 EXPECT_EQ(1, parser.fir_item()->num_packets());
38 EXPECT_EQ(kRemoteSsrc, parser.fir_item()->Ssrc());
39 EXPECT_EQ(123U, parser.fir_item()->SeqNum());
40 } 67 }
41 68
69 TEST(RtcpPacketFirTest, TwoFciEntries) {
70 Fir fir;
71 fir.From(kSenderSsrc);
72 fir.WithRequestTo(kRemoteSsrc, kSeqNr);
73 fir.WithRequestTo(kRemoteSsrc + 1, kSeqNr + 1);
74
75 rtc::scoped_ptr<RawPacket> packet = fir.Build();
76 Fir parsed;
77 EXPECT_TRUE(ParseFir(packet->Buffer(), packet->Length(), &parsed));
78
79 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
80 EXPECT_THAT(parsed.requests(),
81 ElementsAre(AllOf(Field(&Fir::Request::ssrc, Eq(kRemoteSsrc)),
82 Field(&Fir::Request::seq_nr, Eq(kSeqNr))),
83 AllOf(Field(&Fir::Request::ssrc, Eq(kRemoteSsrc + 1)),
84 Field(&Fir::Request::seq_nr, Eq(kSeqNr + 1)))));
85 }
86
87 TEST(RtcpPacketFirTest, ParseFailsOnZeroFciEntries) {
88 Fir fir;
89 fir.From(kSenderSsrc);
90 fir.WithRequestTo(kRemoteSsrc, kSeqNr);
91
92 rtc::scoped_ptr<RawPacket> packet = fir.Build();
93
94 RtcpCommonHeader header;
95 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header);
96 ASSERT_EQ(16u, header.payload_size_bytes); // Common: 8, 1xfci: 8.
97 header.payload_size_bytes = 8; // Common: 8, 0xfcis.
98
99 Fir parsed;
100 EXPECT_FALSE(parsed.Parse(
101 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes));
102 }
103
104 TEST(RtcpPacketFirTest, ParseFailsOnFractionalFciEntries) {
105 Fir fir;
106 fir.From(kSenderSsrc);
107 fir.WithRequestTo(kRemoteSsrc, kSeqNr);
108 fir.WithRequestTo(kRemoteSsrc + 1, kSeqNr + 1);
109
110 rtc::scoped_ptr<RawPacket> packet = fir.Build();
111
112 RtcpCommonHeader header;
113 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header);
114 ASSERT_EQ(24u, header.payload_size_bytes); // Common: 8, 2xfcis: 16.
115
116 const uint8_t* payload =
117 packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes;
118 Fir good;
119 EXPECT_TRUE(good.Parse(header, payload));
120 for (size_t i = 1; i < 8; ++i) {
121 header.payload_size_bytes = 16 + i;
122 Fir bad;
123 EXPECT_FALSE(bad.Parse(header, payload));
124 }
125 }
126 } // namespace
42 } // namespace webrtc 127 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.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