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