1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/pairing/message_buffer.h" 6 7#include "net/base/io_buffer.h" 8#include "testing/gtest/include/gtest/gtest.h" 9 10namespace pairing_chromeos { 11 12typedef testing::Test MessageBufferTest; 13 14TEST_F(MessageBufferTest, BasicReadWrite) { 15 MessageBuffer message_buffer; 16 scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(3)); 17 io_buffer->data()[0] = 3; 18 io_buffer->data()[1] = 1; 19 io_buffer->data()[2] = 4; 20 21 message_buffer.AddIOBuffer(io_buffer, 3); 22 23 EXPECT_EQ(message_buffer.AvailableBytes(), 3); 24 char data = 0; 25 message_buffer.ReadBytes(&data, 1); 26 EXPECT_EQ(data, 3); 27 EXPECT_EQ(message_buffer.AvailableBytes(), 2); 28 message_buffer.ReadBytes(&data, 1); 29 EXPECT_EQ(data, 1); 30 EXPECT_EQ(message_buffer.AvailableBytes(), 1); 31 message_buffer.ReadBytes(&data, 1); 32 EXPECT_EQ(data, 4); 33 EXPECT_EQ(message_buffer.AvailableBytes(), 0); 34} 35 36TEST_F(MessageBufferTest, SplitBuffer) { 37 MessageBuffer message_buffer; 38 scoped_refptr<net::IOBuffer> io_buffer0(new net::IOBuffer(1)); 39 io_buffer0->data()[0] = 3; 40 41 scoped_refptr<net::IOBuffer> io_buffer1(new net::IOBuffer(2)); 42 io_buffer1->data()[0] = 1; 43 io_buffer1->data()[1] = 4; 44 45 message_buffer.AddIOBuffer(io_buffer0, 1); 46 message_buffer.AddIOBuffer(io_buffer1, 2); 47 48 EXPECT_EQ(message_buffer.AvailableBytes(), 3); 49 char data[3]; 50 message_buffer.ReadBytes(data, 3); 51 EXPECT_EQ(message_buffer.AvailableBytes(), 0); 52 EXPECT_EQ(data[0], 3); 53 EXPECT_EQ(data[1], 1); 54 EXPECT_EQ(data[2], 4); 55} 56 57TEST_F(MessageBufferTest, EmptyBuffer) { 58 MessageBuffer message_buffer; 59 scoped_refptr<net::IOBuffer> io_buffer0(new net::IOBuffer(1)); 60 io_buffer0->data()[0] = 3; 61 62 scoped_refptr<net::IOBuffer> io_buffer1(new net::IOBuffer(0)); 63 scoped_refptr<net::IOBuffer> io_buffer2(new net::IOBuffer(2)); 64 io_buffer2->data()[0] = 1; 65 io_buffer2->data()[1] = 4; 66 67 message_buffer.AddIOBuffer(io_buffer0, 1); 68 message_buffer.AddIOBuffer(io_buffer1, 0); 69 message_buffer.AddIOBuffer(io_buffer2, 2); 70 71 EXPECT_EQ(message_buffer.AvailableBytes(), 3); 72 char data = 0; 73 message_buffer.ReadBytes(&data, 1); 74 EXPECT_EQ(data, 3); 75 EXPECT_EQ(message_buffer.AvailableBytes(), 2); 76 message_buffer.ReadBytes(&data, 1); 77 EXPECT_EQ(data, 1); 78 EXPECT_EQ(message_buffer.AvailableBytes(), 1); 79 message_buffer.ReadBytes(&data, 1); 80 EXPECT_EQ(data, 4); 81 EXPECT_EQ(message_buffer.AvailableBytes(), 0); 82} 83 84} // namespace pairing_chromeos 85