blob: e2d4122918bf5b91f7aa1cf80aae77e9b2e1fcc6 [file] [log] [blame]
// Copyright 2014 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 "components/pairing/message_buffer.h"
#include "net/base/io_buffer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace pairing_chromeos {
typedef testing::Test MessageBufferTest;
TEST_F(MessageBufferTest, BasicReadWrite) {
MessageBuffer message_buffer;
scoped_refptr<net::IOBuffer> io_buffer =
base::MakeRefCounted<net::IOBuffer>(3);
io_buffer->data()[0] = 3;
io_buffer->data()[1] = 1;
io_buffer->data()[2] = 4;
message_buffer.AddIOBuffer(io_buffer, 3);
EXPECT_EQ(message_buffer.AvailableBytes(), 3);
char data = 0;
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 3);
EXPECT_EQ(message_buffer.AvailableBytes(), 2);
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 1);
EXPECT_EQ(message_buffer.AvailableBytes(), 1);
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 4);
EXPECT_EQ(message_buffer.AvailableBytes(), 0);
}
TEST_F(MessageBufferTest, SplitBuffer) {
MessageBuffer message_buffer;
scoped_refptr<net::IOBuffer> io_buffer0 =
base::MakeRefCounted<net::IOBuffer>(1);
io_buffer0->data()[0] = 3;
scoped_refptr<net::IOBuffer> io_buffer1 =
base::MakeRefCounted<net::IOBuffer>(2);
io_buffer1->data()[0] = 1;
io_buffer1->data()[1] = 4;
message_buffer.AddIOBuffer(io_buffer0, 1);
message_buffer.AddIOBuffer(io_buffer1, 2);
EXPECT_EQ(message_buffer.AvailableBytes(), 3);
char data[3];
message_buffer.ReadBytes(data, 3);
EXPECT_EQ(message_buffer.AvailableBytes(), 0);
EXPECT_EQ(data[0], 3);
EXPECT_EQ(data[1], 1);
EXPECT_EQ(data[2], 4);
}
TEST_F(MessageBufferTest, EmptyBuffer) {
MessageBuffer message_buffer;
scoped_refptr<net::IOBuffer> io_buffer0 =
base::MakeRefCounted<net::IOBuffer>(1);
io_buffer0->data()[0] = 3;
scoped_refptr<net::IOBuffer> io_buffer1 =
base::MakeRefCounted<net::IOBuffer>(0);
scoped_refptr<net::IOBuffer> io_buffer2 =
base::MakeRefCounted<net::IOBuffer>(2);
io_buffer2->data()[0] = 1;
io_buffer2->data()[1] = 4;
message_buffer.AddIOBuffer(io_buffer0, 1);
message_buffer.AddIOBuffer(io_buffer1, 0);
message_buffer.AddIOBuffer(io_buffer2, 2);
EXPECT_EQ(message_buffer.AvailableBytes(), 3);
char data = 0;
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 3);
EXPECT_EQ(message_buffer.AvailableBytes(), 2);
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 1);
EXPECT_EQ(message_buffer.AvailableBytes(), 1);
message_buffer.ReadBytes(&data, 1);
EXPECT_EQ(data, 4);
EXPECT_EQ(message_buffer.AvailableBytes(), 0);
}
} // namespace pairing_chromeos