test_api.cc revision bda7f305c5d7d675f1c35813bd2b2a5732775bb9
18281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org/* 207c68b9c9de03b4110f25cb59d9d7ba8bad624bdleozwang@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 38281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * 48281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * Use of this source code is governed by a BSD-style license 58281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * that can be found in the LICENSE file in the root of the source 68281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * tree. An additional intellectual property rights grant can be found 78281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * in the file PATENTS. All contributing project authors may 88281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org * be found in the AUTHORS file in the root of the source tree. 98281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org */ 108281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 11bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org#include "webrtc/modules/rtp_rtcp/test/testAPI/test_api.h" 12bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org 138281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <algorithm> 148281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org#include <vector> 158281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 168281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgusing namespace webrtc; 178281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 188281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgclass RtpRtcpAPITest : public ::testing::Test { 198281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org protected: 20a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org RtpRtcpAPITest() : module(NULL), fake_clock(123456) { 218281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_CSRC[0] = 1234; 228d0cd07d0c5e30eacaac4c118f9fd624b11e67abstefan@webrtc.org test_CSRC[1] = 2345; 238281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_id = 123; 248281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_ssrc = 3456; 258281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_timestamp = 4567; 268281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org test_sequence_number = 2345; 278281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 288281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org ~RtpRtcpAPITest() {} 298281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 308281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual void SetUp() { 312853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org RtpRtcp::Configuration configuration; 322853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.id = test_id; 332853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.audio = true; 342853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org configuration.clock = &fake_clock; 352853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org module = RtpRtcp::CreateRtpRtcp(configuration); 368281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 378281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 388281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org virtual void TearDown() { 392853dde5201d9ddc284ce5efb9688f6340487acepwestin@webrtc.org delete module; 408281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org } 418281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 428281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org int test_id; 438281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org RtpRtcp* module; 448281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord32 test_ssrc; 458281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord32 test_timestamp; 468281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord16 test_sequence_number; 478281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord32 test_CSRC[webrtc::kRtpCsrcSize]; 48a678a3baee2e680bd521f3a6caf97707fffd6093stefan@webrtc.org SimulatedClock fake_clock; 498281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org}; 508281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 518281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgTEST_F(RtpRtcpAPITest, Basic) { 528281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetSequenceNumber(test_sequence_number)); 538281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(test_sequence_number, module->SequenceNumber()); 548281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 558281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetStartTimestamp(test_timestamp)); 568281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(test_timestamp, module->StartTimestamp()); 578281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 58d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_FALSE(module->Sending()); 598281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetSendingStatus(true)); 60d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_TRUE(module->Sending()); 618281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org} 628281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 638281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgTEST_F(RtpRtcpAPITest, MTU) { 648281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(-1, module->SetMaxTransferUnit(10)); 658281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(-1, module->SetMaxTransferUnit(IP_PACKET_SIZE + 1)); 668281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetMaxTransferUnit(1234)); 678281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(1234-20-8, module->MaxPayloadLength()); 688281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 698281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetTransportOverhead(true, true, 12)); 708281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(1234 - 20- 20 -20 - 12, module->MaxPayloadLength()); 718281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 728281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetTransportOverhead(false, false, 0)); 738281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(1234 - 20 - 8, module->MaxPayloadLength()); 748281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org} 758281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 768281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgTEST_F(RtpRtcpAPITest, SSRC) { 778281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetSSRC(test_ssrc)); 788281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(test_ssrc, module->SSRC()); 798281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org} 808281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 818281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgTEST_F(RtpRtcpAPITest, CSRC) { 828281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetCSRCs(test_CSRC, 2)); 838281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org WebRtc_UWord32 testOfCSRC[webrtc::kRtpCsrcSize]; 848281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(2, module->CSRCs(testOfCSRC)); 858281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(test_CSRC[0], testOfCSRC[0]); 868281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(test_CSRC[1], testOfCSRC[1]); 878281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org} 888281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 898281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.orgTEST_F(RtpRtcpAPITest, RTCP) { 908281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(kRtcpOff, module->RTCP()); 918281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetRTCPStatus(kRtcpCompound)); 928281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(kRtcpCompound, module->RTCP()); 938281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 948281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetCNAME("john.doe@test.test")); 958281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 9607c68b9c9de03b4110f25cb59d9d7ba8bad624bdleozwang@webrtc.org char cName[RTCP_CNAME_SIZE]; 978281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->CNAME(cName)); 988281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_STRCASEEQ(cName, "john.doe@test.test"); 998281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 100d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_FALSE(module->TMMBR()); 1018281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetTMMBRStatus(true)); 102d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_TRUE(module->TMMBR()); 1038281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(0, module->SetTMMBRStatus(false)); 104d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_FALSE(module->TMMBR()); 1058281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org 1068281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(kNackOff, module->NACK()); 107becf9c897c41eea3f021f99d87889c32c78b0de9stefan@webrtc.org EXPECT_EQ(0, module->SetNACKStatus(kNackRtcp, 450)); 1088281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org EXPECT_EQ(kNackRtcp, module->NACK()); 1098281e7dd4a8ac4b00aededd8ebf52e93f1d980e8pwestin@webrtc.org} 110bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org 111bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.orgTEST_F(RtpRtcpAPITest, RTXSender) { 112bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org unsigned int ssrc = 0; 113bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org RtxMode rtx_mode = kRtxOff; 114bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->SetRTXSendStatus(kRtxRetransmitted, true, 1)); 115bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->RTXSendStatus(&rtx_mode, &ssrc)); 116bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(kRtxRetransmitted, rtx_mode); 117bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(1u, ssrc); 118bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org rtx_mode = kRtxOff; 119bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->SetRTXSendStatus(kRtxOff, true, 0)); 120bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->RTXSendStatus(&rtx_mode, &ssrc)); 121bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(kRtxOff, rtx_mode); 122bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org} 123bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org 124bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.orgTEST_F(RtpRtcpAPITest, RTXReceiver) { 125bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org bool enable = false; 126bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org unsigned int ssrc = 0; 127bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->SetRTXReceiveStatus(true, 1)); 128bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->RTXReceiveStatus(&enable, &ssrc)); 129bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_TRUE(enable); 130bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(1u, ssrc); 131bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->SetRTXReceiveStatus(false, 0)); 132bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_EQ(0, module->RTXReceiveStatus(&enable, &ssrc)); 133bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org EXPECT_FALSE(enable); 134bda7f305c5d7d675f1c35813bd2b2a5732775bb9mikhal@webrtc.org} 135