1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This file includes unit tests for the RtpHeaderExtensionMap.
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
18cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
19cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
20cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/typedefs.h"
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpHeaderExtensionTest : public ::testing::Test {
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected:
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RtpHeaderExtensionTest() {}
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ~RtpHeaderExtensionTest() {}
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RtpHeaderExtensionMap map_;
3098b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org  static const uint8_t kId;
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3398b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.orgconst uint8_t RtpHeaderExtensionTest::kId = 3;
3498b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, Register) {
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Size());
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(1, map_.Size());
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Size());
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, RegisterIllegalArg) {
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // Valid range for id: [1-14].
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(-1, map_.Register(kRtpExtensionTransmissionTimeOffset, 0));
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(-1, map_.Register(kRtpExtensionTransmissionTimeOffset, 15));
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
49d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.comTEST_F(RtpHeaderExtensionTest, Idempotent) {
50d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
51d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
52d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com  EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
53d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com  EXPECT_EQ(0, map_.Deregister(kRtpExtensionTransmissionTimeOffset));
54d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com}
55d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, NonUniqueId) {
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
58d1932fc3a0b4bec0349b1c53f923784baa7d9a26bemasc@google.com  EXPECT_EQ(-1, map_.Register(kRtpExtensionAudioLevel, kId));
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, GetTotalLength) {
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.GetTotalLengthInBytes());
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
6498b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org  EXPECT_EQ(kRtpOneByteHeaderLength + kTransmissionTimeOffsetLength,
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            map_.GetTotalLengthInBytes());
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, GetLengthUntilBlockStart) {
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(-1, map_.GetLengthUntilBlockStartInBytes(
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      kRtpExtensionTransmissionTimeOffset));
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
7298b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org  EXPECT_EQ(static_cast<int>(kRtpOneByteHeaderLength),
7398b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org            map_.GetLengthUntilBlockStartInBytes(
7498b201189e601aa1863085e0016e868d2db416b1pbos@webrtc.org                kRtpExtensionTransmissionTimeOffset));
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, GetType) {
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RTPExtensionType typeOut;
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(-1, map_.GetType(kId, &typeOut));
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.GetType(kId, &typeOut));
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, typeOut);
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, GetId) {
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  uint8_t idOut;
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(-1, map_.GetId(kRtpExtensionTransmissionTimeOffset, &idOut));
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.GetId(kRtpExtensionTransmissionTimeOffset, &idOut));
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kId, idOut);
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, IterateTypes) {
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionNone, map_.First());
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionNone, map_.Next(kRtpExtensionTransmissionTimeOffset));
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, map_.First());
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionNone, map_.Next(kRtpExtensionTransmissionTimeOffset));
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, GetCopy) {
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RtpHeaderExtensionMap mapOut;
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  map_.GetCopy(&mapOut);
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(1, mapOut.Size());
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(kRtpExtensionTransmissionTimeOffset, mapOut.First());
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTEST_F(RtpHeaderExtensionTest, Erase) {
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Register(kRtpExtensionTransmissionTimeOffset, kId));
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(1, map_.Size());
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  map_.Erase();
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  EXPECT_EQ(0, map_.Size());
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}  // namespace webrtc
121