|  | // 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(new 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(new net::IOBuffer(1)); | 
|  | io_buffer0->data()[0] = 3; | 
|  |  | 
|  | scoped_refptr<net::IOBuffer> io_buffer1(new 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(new net::IOBuffer(1)); | 
|  | io_buffer0->data()[0] = 3; | 
|  |  | 
|  | scoped_refptr<net::IOBuffer> io_buffer1(new net::IOBuffer(0)); | 
|  | scoped_refptr<net::IOBuffer> io_buffer2(new 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 |