1 /*
2  *  Copyright (c) 2015 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 
11 #include "modules/rtp_rtcp/source/rtcp_packet/rrtr.h"
12 
13 #include "test/gtest.h"
14 
15 using webrtc::rtcp::Rrtr;
16 
17 namespace webrtc {
18 namespace {
19 
20 const uint32_t kNtpSec = 0x12345678;
21 const uint32_t kNtpFrac = 0x23456789;
22 const uint8_t kBlock[] = {0x04, 0x00, 0x00, 0x02,
23                           0x12, 0x34, 0x56, 0x78,
24                           0x23, 0x45, 0x67, 0x89};
25 const size_t kBlockSizeBytes = sizeof(kBlock);
26 static_assert(
27     kBlockSizeBytes == Rrtr::kLength,
28     "Size of manually created Rrtr block should match class constant");
29 
TEST(RtcpPacketRrtrTest,Create)30 TEST(RtcpPacketRrtrTest, Create) {
31   uint8_t buffer[Rrtr::kLength];
32   Rrtr rrtr;
33   rrtr.SetNtp(NtpTime(kNtpSec, kNtpFrac));
34 
35   rrtr.Create(buffer);
36   EXPECT_EQ(0, memcmp(buffer, kBlock, kBlockSizeBytes));
37 }
38 
TEST(RtcpPacketRrtrTest,Parse)39 TEST(RtcpPacketRrtrTest, Parse) {
40   Rrtr read_rrtr;
41   read_rrtr.Parse(kBlock);
42 
43   // Run checks on const object to ensure all accessors have const modifier.
44   const Rrtr& parsed = read_rrtr;
45 
46   EXPECT_EQ(kNtpSec, parsed.ntp().seconds());
47   EXPECT_EQ(kNtpFrac, parsed.ntp().fractions());
48 }
49 
50 }  // namespace
51 }  // namespace webrtc
52