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 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
11
12 #include <vector>
13
14 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
15 #include "modules/rtp_rtcp/source/rtp_header_extensions.h"
16 #include "test/gtest.h"
17
18 namespace webrtc {
19
TEST(RtpHeaderExtensionTest,RegisterByType)20 TEST(RtpHeaderExtensionTest, RegisterByType) {
21 RtpHeaderExtensionMap map;
22 EXPECT_FALSE(map.IsRegistered(TransmissionOffset::kId));
23
24 EXPECT_TRUE(map.RegisterByType(3, TransmissionOffset::kId));
25
26 EXPECT_TRUE(map.IsRegistered(TransmissionOffset::kId));
27 EXPECT_EQ(3, map.GetId(TransmissionOffset::kId));
28 EXPECT_EQ(TransmissionOffset::kId, map.GetType(3));
29 }
30
TEST(RtpHeaderExtensionTest,RegisterByUri)31 TEST(RtpHeaderExtensionTest, RegisterByUri) {
32 RtpHeaderExtensionMap map;
33
34 EXPECT_TRUE(map.RegisterByUri(3, TransmissionOffset::Uri()));
35
36 EXPECT_TRUE(map.IsRegistered(TransmissionOffset::kId));
37 EXPECT_EQ(3, map.GetId(TransmissionOffset::kId));
38 EXPECT_EQ(TransmissionOffset::kId, map.GetType(3));
39 }
40
TEST(RtpHeaderExtensionTest,RegisterWithTrait)41 TEST(RtpHeaderExtensionTest, RegisterWithTrait) {
42 RtpHeaderExtensionMap map;
43
44 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
45
46 EXPECT_TRUE(map.IsRegistered(TransmissionOffset::kId));
47 EXPECT_EQ(3, map.GetId(TransmissionOffset::kId));
48 EXPECT_EQ(TransmissionOffset::kId, map.GetType(3));
49 }
50
TEST(RtpHeaderExtensionTest,RegisterDuringContruction)51 TEST(RtpHeaderExtensionTest, RegisterDuringContruction) {
52 const std::vector<RtpExtension> config = {{TransmissionOffset::Uri(), 1},
53 {AbsoluteSendTime::Uri(), 3}};
54 const RtpHeaderExtensionMap map(config);
55
56 EXPECT_EQ(1, map.GetId(TransmissionOffset::kId));
57 EXPECT_EQ(3, map.GetId(AbsoluteSendTime::kId));
58 }
59
TEST(RtpHeaderExtensionTest,RegisterTwoByteHeaderExtensions)60 TEST(RtpHeaderExtensionTest, RegisterTwoByteHeaderExtensions) {
61 RtpHeaderExtensionMap map;
62 // Two-byte header extension needed for id: [15-255].
63 EXPECT_TRUE(map.Register<TransmissionOffset>(18));
64 EXPECT_TRUE(map.Register<AbsoluteSendTime>(255));
65 }
66
TEST(RtpHeaderExtensionTest,RegisterIllegalArg)67 TEST(RtpHeaderExtensionTest, RegisterIllegalArg) {
68 RtpHeaderExtensionMap map;
69 // Valid range for id: [1-255].
70 EXPECT_FALSE(map.Register<TransmissionOffset>(0));
71 EXPECT_FALSE(map.Register<TransmissionOffset>(256));
72 }
73
TEST(RtpHeaderExtensionTest,Idempotent)74 TEST(RtpHeaderExtensionTest, Idempotent) {
75 RtpHeaderExtensionMap map;
76
77 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
78 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
79
80 map.Deregister(TransmissionOffset::Uri());
81 map.Deregister(TransmissionOffset::Uri());
82 }
83
TEST(RtpHeaderExtensionTest,NonUniqueId)84 TEST(RtpHeaderExtensionTest, NonUniqueId) {
85 RtpHeaderExtensionMap map;
86 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
87
88 EXPECT_FALSE(map.Register<AudioLevel>(3));
89 EXPECT_TRUE(map.Register<AudioLevel>(4));
90 }
91
TEST(RtpHeaderExtensionTest,GetType)92 TEST(RtpHeaderExtensionTest, GetType) {
93 RtpHeaderExtensionMap map;
94 EXPECT_EQ(RtpHeaderExtensionMap::kInvalidType, map.GetType(3));
95 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
96
97 EXPECT_EQ(TransmissionOffset::kId, map.GetType(3));
98 }
99
TEST(RtpHeaderExtensionTest,GetId)100 TEST(RtpHeaderExtensionTest, GetId) {
101 RtpHeaderExtensionMap map;
102 EXPECT_EQ(RtpHeaderExtensionMap::kInvalidId,
103 map.GetId(TransmissionOffset::kId));
104 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
105
106 EXPECT_EQ(3, map.GetId(TransmissionOffset::kId));
107 }
108
TEST(RtpHeaderExtensionTest,RemapFails)109 TEST(RtpHeaderExtensionTest, RemapFails) {
110 RtpHeaderExtensionMap map;
111 EXPECT_TRUE(map.Register<TransmissionOffset>(3));
112 EXPECT_FALSE(map.Register<TransmissionOffset>(4));
113 }
114
115 } // namespace webrtc
116