summaryrefslogtreecommitdiff
path: root/toxav/rtp_test.cc
blob: b08541426a03bdc56f4d1adae24b5fabc1775814 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "rtp.h"

#include "../toxcore/crypto_core.h"

#include <gtest/gtest.h>

namespace {

RTPHeader random_header() {
  return {
      random_u16(), random_u16(), random_u16(), random_u16(), random_u16(),
      random_u16(), random_u16(), random_u32(), random_u32(), random_u64(),
      random_u32(), random_u32(), random_u32(), random_u16(), random_u16(),
  };
}

TEST(Rtp, Deserialisation) {
  RTPHeader const header = random_header();

  uint8_t rdata[RTP_HEADER_SIZE];
  EXPECT_EQ(rtp_header_pack(rdata, &header), RTP_HEADER_SIZE);

  RTPHeader unpacked = {0};
  EXPECT_EQ(rtp_header_unpack(rdata, &unpacked), RTP_HEADER_SIZE);

  EXPECT_EQ(header.ve, unpacked.ve);
  EXPECT_EQ(header.pe, unpacked.pe);
  EXPECT_EQ(header.xe, unpacked.xe);
  EXPECT_EQ(header.cc, unpacked.cc);
  EXPECT_EQ(header.ma, unpacked.ma);
  EXPECT_EQ(header.pt, unpacked.pt);
  EXPECT_EQ(header.sequnum, unpacked.sequnum);
  EXPECT_EQ(header.timestamp, unpacked.timestamp);
  EXPECT_EQ(header.ssrc, unpacked.ssrc);
  EXPECT_EQ(header.flags, unpacked.flags);
  EXPECT_EQ(header.offset_full, unpacked.offset_full);
  EXPECT_EQ(header.data_length_full, unpacked.data_length_full);
  EXPECT_EQ(header.received_length_full, unpacked.received_length_full);
  EXPECT_EQ(header.offset_lower, unpacked.offset_lower);
  EXPECT_EQ(header.data_length_lower, unpacked.data_length_lower);
}

TEST(Rtp, SerialisingAllOnes) {
  RTPHeader header;
  memset(&header, 0xff, sizeof header);

  uint8_t rdata[RTP_HEADER_SIZE];
  rtp_header_pack(rdata, &header);

  EXPECT_EQ(std::string(reinterpret_cast<char const *>(rdata), sizeof rdata),
            std::string("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
                        "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
                        "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
                        "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
                        "\x00\x00\x00\x00\x00\x00\x00\x00"
                        "\x00\x00\x00\x00\x00\x00\x00\x00"
                        "\x00\x00\x00\x00\x00\x00\x00\x00"
                        "\x00\x00\x00\x00\x00\x00\x00\x00"
                        "\x00\x00\x00\x00\x00\x00\x00\x00"
                        "\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
                        RTP_HEADER_SIZE));
}

}  // namespace