147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/bytebuffer.h"
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/byteorder.h"
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/common.h"
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h"
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(ByteBufferTest, TestByteOrder) {
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint16 n16 = 1;
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint32 n32 = 1;
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint64 n64 = 1;
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(n16, NetworkToHost16(HostToNetwork16(n16)));
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(n32, NetworkToHost32(HostToNetwork32(n32)));
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(n64, NetworkToHost64(HostToNetwork64(n64)));
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  if (IsHostBigEndian()) {
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // The host is the network (big) endian.
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n16, HostToNetwork16(n16));
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n32, HostToNetwork32(n32));
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n64, HostToNetwork64(n64));
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // GetBE converts big endian to little endian here.
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n16 >> 8, GetBE16(&n16));
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n32 >> 24, GetBE32(&n32));
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n64 >> 56, GetBE64(&n64));
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  } else {
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // The host is little endian.
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_NE(n16, HostToNetwork16(n16));
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_NE(n32, HostToNetwork32(n32));
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_NE(n64, HostToNetwork64(n64));
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // GetBE converts little endian to big endian here.
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(GetBE16(&n16), HostToNetwork16(n16));
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(GetBE32(&n32), HostToNetwork32(n32));
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(GetBE64(&n64), HostToNetwork64(n64));
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // GetBE converts little endian to big endian here.
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n16 << 8, GetBE16(&n16));
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n32 << 24, GetBE32(&n32));
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(n64 << 56, GetBE64(&n64));
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(ByteBufferTest, TestBufferLength) {
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ByteBuffer buffer;
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size_t size = 0;
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.WriteUInt8(1);
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ++size;
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.WriteUInt16(1);
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size += 2;
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.WriteUInt24(1);
6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size += 3;
7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.WriteUInt32(1);
7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size += 4;
7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.WriteUInt64(1);
7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size += 8;
7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.Consume(0));
8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.Consume(4));
8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size -= 4;
8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(size, buffer.Length());
8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(ByteBufferTest, TestGetSetReadPosition) {
8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ByteBuffer buffer("ABCDEF", 6);
9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(6U, buffer.Length());
9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ByteBuffer::ReadPosition pos(buffer.GetReadPosition());
9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.SetReadPosition(pos));
9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(6U, buffer.Length());
9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::string read;
9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.ReadString(&read, 3));
9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ("ABC", read);
9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(3U, buffer.Length());
9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.SetReadPosition(pos));
9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(6U, buffer.Length());
10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  read.clear();
10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.ReadString(&read, 3));
10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ("ABC", read);
10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(3U, buffer.Length());
10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // For a resize by writing Capacity() number of bytes.
10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  size_t capacity = buffer.Capacity();
10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  buffer.ReserveWriteBuffer(buffer.Capacity());
10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(capacity + 3U, buffer.Length());
10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(buffer.SetReadPosition(pos));
10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  read.clear();
11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(buffer.ReadString(&read, 3));
11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ("DEF", read);
11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(ByteBufferTest, TestReadWriteBuffer) {
11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ByteBuffer::ByteOrder orders[2] = { ByteBuffer::ORDER_HOST,
11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                      ByteBuffer::ORDER_NETWORK };
11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  for (size_t i = 0; i < ARRAY_SIZE(orders); i++) {
11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    ByteBuffer buffer(orders[i]);
11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(orders[i], buffer.Order());
12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint8 ru8;
12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_FALSE(buffer.ReadUInt8(&ru8));
12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read uint8.
12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint8 wu8 = 1;
12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt8(wu8);
12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt8(&ru8));
12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu8, ru8);
12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read uint16.
13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint16 wu16 = (1 << 8) + 1;
13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt16(wu16);
13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint16 ru16;
13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt16(&ru16));
13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu16, ru16);
13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read uint24.
13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint32 wu24 = (3 << 16) + (2 << 8) + 1;
14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt24(wu24);
14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint32 ru24;
14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt24(&ru24));
14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu24, ru24);
14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read uint32.
14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint32 wu32 = (4 << 24) + (3 << 16) + (2 << 8) + 1;
14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt32(wu32);
14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint32 ru32;
15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt32(&ru32));
15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu32, ru32);
15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read uint64.
15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint32 another32 = (8 << 24) + (7 << 16) + (6 << 8) + 5;
15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint64 wu64 = (static_cast<uint64>(another32) << 32) + wu32;
15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt64(wu64);
15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    uint64 ru64;
15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt64(&ru64));
16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu64, ru64);
16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read string.
16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    std::string write_string("hello");
16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteString(write_string);
16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    std::string read_string;
16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadString(&read_string, write_string.size()));
16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(write_string, read_string);
16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read bytes
17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    char write_bytes[] = "foo";
17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteBytes(write_bytes, 3);
17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    char read_bytes[3];
17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadBytes(read_bytes, 3));
17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    for (int i = 0; i < 3; ++i) {
17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      EXPECT_EQ(write_bytes[i], read_bytes[i]);
17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    }
17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read reserved buffer space
18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    char* write_dst = buffer.ReserveWriteBuffer(3);
18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    memcpy(write_dst, write_bytes, 3);
18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    memset(read_bytes, 0, 3);
18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadBytes(read_bytes, 3));
18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    for (int i = 0; i < 3; ++i) {
18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      EXPECT_EQ(write_bytes[i], read_bytes[i]);
18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    }
18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    // Write and read in order.
19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt8(wu8);
19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt16(wu16);
19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt24(wu24);
19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt32(wu32);
19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    buffer.WriteUInt64(wu64);
19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt8(&ru8));
19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu8, ru8);
19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt16(&ru16));
20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu16, ru16);
20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt24(&ru24));
20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu24, ru24);
20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt32(&ru32));
20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu32, ru32);
20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_TRUE(buffer.ReadUInt64(&ru64));
20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(wu64, ru64);
20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    EXPECT_EQ(0U, buffer.Length());
20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
212