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, 0x12, 0x34,
23                           0x56, 0x78, 0x23, 0x45, 0x67, 0x89};
24 const size_t kBlockSizeBytes = sizeof(kBlock);
25 static_assert(
26     kBlockSizeBytes == Rrtr::kLength,
27     "Size of manually created Rrtr block should match class constant");
28 
TEST(RtcpPacketRrtrTest,Create)29 TEST(RtcpPacketRrtrTest, Create) {
30   uint8_t buffer[Rrtr::kLength];
31   Rrtr rrtr;
32   rrtr.SetNtp(NtpTime(kNtpSec, kNtpFrac));
33 
34   rrtr.Create(buffer);
35   EXPECT_EQ(0, memcmp(buffer, kBlock, kBlockSizeBytes));
36 }
37 
TEST(RtcpPacketRrtrTest,Parse)38 TEST(RtcpPacketRrtrTest, Parse) {
39   Rrtr read_rrtr;
40   read_rrtr.Parse(kBlock);
41 
42   // Run checks on const object to ensure all accessors have const modifier.
43   const Rrtr& parsed = read_rrtr;
44 
45   EXPECT_EQ(kNtpSec, parsed.ntp().seconds());
46   EXPECT_EQ(kNtpFrac, parsed.ntp().fractions());
47 }
48 
49 }  // namespace
50 }  // namespace webrtc
51