blob: 0df503cce46e37f4709ce5f0d228aa48b22f518e [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/peerconnection/byte_buffer_queue.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace blink {
using testing::ElementsAre;
TEST(ByteBufferQueueTest, DefaultConstructor) {
ByteBufferQueue buffer_queue;
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_TRUE(buffer_queue.empty());
}
TEST(ByteBufferQueueTest, AppendEmpty) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({});
EXPECT_TRUE(buffer_queue.empty());
}
TEST(ByteBufferQueueTest, AppendOneSegment) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
EXPECT_EQ(3u, buffer_queue.size());
}
TEST(ByteBufferQueueTest, AppendTwoSegments) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
buffer_queue.Append({4, 5});
EXPECT_EQ(5u, buffer_queue.size());
}
TEST(ByteBufferQueueTest, ReadIntoEmpty) {
ByteBufferQueue buffer_queue;
Vector<uint8_t> data(100);
EXPECT_EQ(0u, buffer_queue.ReadInto(base::make_span(data)));
}
TEST(ByteBufferQueueTest, ReadIntoLessThanOneSegment) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
Vector<uint8_t> data(2);
EXPECT_EQ(2u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_EQ(1u, buffer_queue.size());
EXPECT_THAT(data, ElementsAre(1, 2));
}
TEST(ByteBufferQueueTest, ReadIntoExactOneSegmentSize) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
Vector<uint8_t> data(3);
EXPECT_EQ(3u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_THAT(data, ElementsAre(1, 2, 3));
}
TEST(ByteBufferQueueTest, ReadIntoOverOneSegmentSize) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
Vector<uint8_t> data(5);
EXPECT_EQ(3u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_THAT(data, ElementsAre(1, 2, 3, 0, 0));
}
TEST(ByteBufferQueueTest, ReadIntoEmptyData) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
Vector<uint8_t> data;
EXPECT_EQ(0u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_EQ(3u, buffer_queue.size());
}
TEST(ByteBufferQueueTest, ReadIntoExactlyTwoSegments) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
buffer_queue.Append({4, 5});
Vector<uint8_t> data(5);
EXPECT_EQ(5u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_THAT(data, ElementsAre(1, 2, 3, 4, 5));
}
TEST(ByteBufferQueueTest, ReadIntoAcrossTwoSegmentsMisaligned) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
buffer_queue.Append({4, 5});
Vector<uint8_t> data(2);
EXPECT_EQ(2u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_THAT(data, ElementsAre(1, 2));
EXPECT_EQ(2u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_THAT(data, ElementsAre(3, 4));
EXPECT_EQ(1u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_THAT(data, ElementsAre(5, 4));
}
TEST(ByteBufferQueueTest, ClearEmptyBuffer) {
ByteBufferQueue buffer_queue;
buffer_queue.Clear();
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_TRUE(buffer_queue.empty());
}
TEST(ByteBufferQueueTest, ReadIntoAfterClearThenAppend) {
ByteBufferQueue buffer_queue;
buffer_queue.Append({1, 2, 3});
Vector<uint8_t> data(2);
buffer_queue.ReadInto(base::make_span(data));
buffer_queue.Clear();
EXPECT_EQ(0u, buffer_queue.size());
EXPECT_EQ(0u, buffer_queue.ReadInto(base::make_span(data)));
buffer_queue.Append({4, 5});
EXPECT_EQ(2u, buffer_queue.ReadInto(base::make_span(data)));
EXPECT_THAT(data, ElementsAre(4, 5));
}
} // namespace blink