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