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