1 /*
2 * Copyright (c) 2012 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
12 /*
13 * This file includes unit tests for the RtpHeaderExtensionMap.
14 */
15
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
19 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
20 #include "webrtc/typedefs.h"
21
22 namespace webrtc {
23
24 class RtpHeaderExtensionTest : public ::testing::Test {
25 protected:
RtpHeaderExtensionTest()26 RtpHeaderExtensionTest() {}
~RtpHeaderExtensionTest()27 ~RtpHeaderExtensionTest() {}
28
29 RtpHeaderExtensionMap map_;
30 static const uint8_t kId;
31 };
32
33 const uint8_t RtpHeaderExtensionTest::kId = 3;
34
TEST_F(RtpHeaderExtensionTest,Register)35 TEST_F(RtpHeaderExtensionTest, Register) {
36 EXPECT_EQ(0, map_.Size());
37 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
38 EXPECT_TRUE(map_.IsRegistered(kRtpExtensionTransmissionTimeOffset));
39 EXPECT_EQ(1, map_.Size());
40 EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
41 EXPECT_EQ(0, map_.Size());
42
43 EXPECT_EQ(0, map_.RegisterInactive(kRtpExtensionTransmissionTimeOffset, kId));
44 EXPECT_EQ(0, map_.Size());
45 EXPECT_TRUE(map_.IsRegistered(kRtpExtensionTransmissionTimeOffset));
46 EXPECT_TRUE(map_.SetActive(kRtpExtensionTransmissionTimeOffset, true));
47 EXPECT_EQ(1, map_.Size());
48 }
49
TEST_F(RtpHeaderExtensionTest,RegisterIllegalArg)50 TEST_F(RtpHeaderExtensionTest, RegisterIllegalArg) {
51 // Valid range for id: [1-14].
52 EXPECT_EQ(-1, map_.Register(kRtpExtensionTransmissionTimeOffset, 0));
53 EXPECT_EQ(-1, map_.Register(kRtpExtensionTransmissionTimeOffset, 15));
54 }
55
TEST_F(RtpHeaderExtensionTest,Idempotent)56 TEST_F(RtpHeaderExtensionTest, Idempotent) {
57 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
58 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
59 EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
60 EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
61 }
62
TEST_F(RtpHeaderExtensionTest,NonUniqueId)63 TEST_F(RtpHeaderExtensionTest, NonUniqueId) {
64 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
65 EXPECT_EQ(-1, map_.Register(kRtpExtensionAudioLevel, kId));
66 EXPECT_EQ(-1, map_.RegisterInactive(kRtpExtensionAudioLevel, kId));
67 }
68
TEST_F(RtpHeaderExtensionTest,GetTotalLength)69 TEST_F(RtpHeaderExtensionTest, GetTotalLength) {
70 EXPECT_EQ(0u, map_.GetTotalLengthInBytes());
71 EXPECT_EQ(0, map_.RegisterInactive(kRtpExtensionTransmissionTimeOffset, kId));
72 EXPECT_EQ(0u, map_.GetTotalLengthInBytes());
73
74 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
75 EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength,
76 map_.GetTotalLengthInBytes());
77 }
78
TEST_F(RtpHeaderExtensionTest,GetLengthUntilBlockStart)79 TEST_F(RtpHeaderExtensionTest, GetLengthUntilBlockStart) {
80 EXPECT_EQ(-1, map_.GetLengthUntilBlockStartInBytes(
81 kRtpExtensionTransmissionTimeOffset));
82 EXPECT_EQ(0, map_.RegisterInactive(kRtpExtensionTransmissionTimeOffset, kId));
83 EXPECT_EQ(-1, map_.GetLengthUntilBlockStartInBytes(
84 kRtpExtensionTransmissionTimeOffset));
85
86 EXPECT_TRUE(map_.SetActive(kRtpExtensionTransmissionTimeOffset, true));
87 EXPECT_EQ(static_cast<int>(kRtpOneByteHeaderLength),
88 map_.GetLengthUntilBlockStartInBytes(
89 kRtpExtensionTransmissionTimeOffset));
90 }
91
TEST_F(RtpHeaderExtensionTest,GetType)92 TEST_F(RtpHeaderExtensionTest, GetType) {
93 RTPExtensionType typeOut;
94 EXPECT_EQ(-1, map_.GetType(kId, &typeOut));
95
96 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
97 EXPECT_EQ(0, map_.GetType(kId, &typeOut));
98 EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, typeOut);
99 }
100
TEST_F(RtpHeaderExtensionTest,GetId)101 TEST_F(RtpHeaderExtensionTest, GetId) {
102 uint8_t idOut;
103 EXPECT_EQ(-1, map_.GetId(kRtpExtensionTransmissionTimeOffset, &idOut));
104
105 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
106 EXPECT_EQ(0, map_.GetId(kRtpExtensionTransmissionTimeOffset, &idOut));
107 EXPECT_EQ(kId, idOut);
108 }
109
TEST_F(RtpHeaderExtensionTest,IterateTypes)110 TEST_F(RtpHeaderExtensionTest, IterateTypes) {
111 EXPECT_EQ(kRtpExtensionNone, map_.First());
112 EXPECT_EQ(kRtpExtensionNone, map_.Next(kRtpExtensionTransmissionTimeOffset));
113
114 EXPECT_EQ(0, map_.RegisterInactive(kRtpExtensionTransmissionTimeOffset, kId));
115
116 EXPECT_EQ(kRtpExtensionNone, map_.First());
117
118 EXPECT_TRUE(map_.SetActive(kRtpExtensionTransmissionTimeOffset, true));
119
120 EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, map_.First());
121 EXPECT_EQ(kRtpExtensionNone, map_.Next(kRtpExtensionTransmissionTimeOffset));
122 }
123
TEST_F(RtpHeaderExtensionTest,GetCopy)124 TEST_F(RtpHeaderExtensionTest, GetCopy) {
125 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
126
127 RtpHeaderExtensionMap mapOut;
128 map_.GetCopy(&mapOut);
129 EXPECT_EQ(1, mapOut.Size());
130 EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, mapOut.First());
131 }
132
TEST_F(RtpHeaderExtensionTest,Erase)133 TEST_F(RtpHeaderExtensionTest, Erase) {
134 EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
135 EXPECT_EQ(1, map_.Size());
136 map_.Erase();
137 EXPECT_EQ(0, map_.Size());
138 }
139 } // namespace webrtc
140