OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
6 #include "base/ref_counted.h" | 6 #include "base/ref_counted.h" |
7 #include "base/scoped_ptr.h" | 7 #include "base/scoped_ptr.h" |
8 #include "net/base/io_buffer.h" | 8 #include "net/base/io_buffer.h" |
9 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
10 #include "net/socket/socket.h" | 10 #include "net/socket/socket.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 // owns the object and it will free it in the end. | 47 // owns the object and it will free it in the end. |
48 MockStream* stream_; | 48 MockStream* stream_; |
49 scoped_ptr<StreamSocketAdapter> target_; | 49 scoped_ptr<StreamSocketAdapter> target_; |
50 net::CompletionCallbackImpl<StreamSocketAdapterTest> callback_; | 50 net::CompletionCallbackImpl<StreamSocketAdapterTest> callback_; |
51 int callback_result_; | 51 int callback_result_; |
52 MessageLoopForIO message_loop_; | 52 MessageLoopForIO message_loop_; |
53 }; | 53 }; |
54 | 54 |
55 // Verify that Read() calls Read() in stream. | 55 // Verify that Read() calls Read() in stream. |
56 TEST_F(StreamSocketAdapterTest, Read) { | 56 TEST_F(StreamSocketAdapterTest, Read) { |
57 scoped_refptr<IOBuffer> buffer = new IOBuffer(kBufferSize); | 57 scoped_refptr<IOBuffer> buffer(new IOBuffer(kBufferSize)); |
58 | 58 |
59 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) | 59 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) |
60 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), | 60 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), |
61 Return(talk_base::SR_SUCCESS))); | 61 Return(talk_base::SR_SUCCESS))); |
62 | 62 |
63 int result = target_->Read(buffer, kBufferSize, &callback_); | 63 int result = target_->Read(buffer, kBufferSize, &callback_); |
64 EXPECT_EQ(kTestDataSize, result); | 64 EXPECT_EQ(kTestDataSize, result); |
65 EXPECT_EQ(0, callback_result_); | 65 EXPECT_EQ(0, callback_result_); |
66 } | 66 } |
67 | 67 |
68 // Verify that read callback is called for pending reads. | 68 // Verify that read callback is called for pending reads. |
69 TEST_F(StreamSocketAdapterTest, ReadPending) { | 69 TEST_F(StreamSocketAdapterTest, ReadPending) { |
70 scoped_refptr<IOBuffer> buffer = new IOBuffer(kBufferSize); | 70 scoped_refptr<IOBuffer> buffer(new IOBuffer(kBufferSize)); |
71 | 71 |
72 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) | 72 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) |
73 .Times(2) | 73 .Times(2) |
74 .WillOnce(Return(talk_base::SR_BLOCK)) | 74 .WillOnce(Return(talk_base::SR_BLOCK)) |
75 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), | 75 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), |
76 Return(talk_base::SR_SUCCESS))); | 76 Return(talk_base::SR_SUCCESS))); |
77 | 77 |
78 int result = target_->Read(buffer, kBufferSize, &callback_); | 78 int result = target_->Read(buffer, kBufferSize, &callback_); |
79 ASSERT_EQ(net::ERR_IO_PENDING, result); | 79 ASSERT_EQ(net::ERR_IO_PENDING, result); |
80 | 80 |
81 stream_->SignalEvent(stream_, talk_base::SE_READ, 0); | 81 stream_->SignalEvent(stream_, talk_base::SE_READ, 0); |
82 EXPECT_EQ(kTestDataSize, callback_result_); | 82 EXPECT_EQ(kTestDataSize, callback_result_); |
83 } | 83 } |
84 | 84 |
85 // Verify that Read() returns error after Close(). | 85 // Verify that Read() returns error after Close(). |
86 TEST_F(StreamSocketAdapterTest, ReadClose) { | 86 TEST_F(StreamSocketAdapterTest, ReadClose) { |
87 scoped_refptr<IOBuffer> buffer = new IOBuffer(kBufferSize); | 87 scoped_refptr<IOBuffer> buffer(new IOBuffer(kBufferSize)); |
88 | 88 |
89 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) | 89 EXPECT_CALL(*stream_, Read(buffer->data(), kBufferSize, _, _)) |
90 .WillOnce(Return(talk_base::SR_BLOCK)); | 90 .WillOnce(Return(talk_base::SR_BLOCK)); |
91 | 91 |
92 int result = target_->Read(buffer, kBufferSize, &callback_); | 92 int result = target_->Read(buffer, kBufferSize, &callback_); |
93 ASSERT_EQ(net::ERR_IO_PENDING, result); | 93 ASSERT_EQ(net::ERR_IO_PENDING, result); |
94 | 94 |
95 EXPECT_CALL(*stream_, Close()); | 95 EXPECT_CALL(*stream_, Close()); |
96 target_->Close(kTestError); | 96 target_->Close(kTestError); |
97 EXPECT_EQ(kTestError, callback_result_); | 97 EXPECT_EQ(kTestError, callback_result_); |
98 | 98 |
99 // All Read() calls after Close() should return the error. | 99 // All Read() calls after Close() should return the error. |
100 EXPECT_EQ(kTestError, target_->Read(buffer, kBufferSize, &callback_)); | 100 EXPECT_EQ(kTestError, target_->Read(buffer, kBufferSize, &callback_)); |
101 } | 101 } |
102 | 102 |
103 // Verify that Write() calls stream's Write() and returns result. | 103 // Verify that Write() calls stream's Write() and returns result. |
104 TEST_F(StreamSocketAdapterTest, Write) { | 104 TEST_F(StreamSocketAdapterTest, Write) { |
105 scoped_refptr<IOBuffer> buffer = new IOBuffer(kTestDataSize); | 105 scoped_refptr<IOBuffer> buffer(new IOBuffer(kTestDataSize)); |
106 | 106 |
107 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) | 107 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) |
108 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), | 108 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), |
109 Return(talk_base::SR_SUCCESS))); | 109 Return(talk_base::SR_SUCCESS))); |
110 | 110 |
111 int result = target_->Write(buffer, kTestDataSize, &callback_); | 111 int result = target_->Write(buffer, kTestDataSize, &callback_); |
112 EXPECT_EQ(kTestDataSize, result); | 112 EXPECT_EQ(kTestDataSize, result); |
113 EXPECT_EQ(0, callback_result_); | 113 EXPECT_EQ(0, callback_result_); |
114 } | 114 } |
115 | 115 |
116 // Verify that write callback is called for pending writes. | 116 // Verify that write callback is called for pending writes. |
117 TEST_F(StreamSocketAdapterTest, WritePending) { | 117 TEST_F(StreamSocketAdapterTest, WritePending) { |
118 scoped_refptr<IOBuffer> buffer = new IOBuffer(kTestDataSize); | 118 scoped_refptr<IOBuffer> buffer(new IOBuffer(kTestDataSize)); |
119 | 119 |
120 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) | 120 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) |
121 .Times(2) | 121 .Times(2) |
122 .WillOnce(Return(talk_base::SR_BLOCK)) | 122 .WillOnce(Return(talk_base::SR_BLOCK)) |
123 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), | 123 .WillOnce(DoAll(SetArgumentPointee<2>(kTestDataSize), |
124 Return(talk_base::SR_SUCCESS))); | 124 Return(talk_base::SR_SUCCESS))); |
125 | 125 |
126 int result = target_->Write(buffer, kTestDataSize, &callback_); | 126 int result = target_->Write(buffer, kTestDataSize, &callback_); |
127 ASSERT_EQ(net::ERR_IO_PENDING, result); | 127 ASSERT_EQ(net::ERR_IO_PENDING, result); |
128 | 128 |
129 stream_->SignalEvent(stream_, talk_base::SE_WRITE, 0); | 129 stream_->SignalEvent(stream_, talk_base::SE_WRITE, 0); |
130 EXPECT_EQ(kTestDataSize, callback_result_); | 130 EXPECT_EQ(kTestDataSize, callback_result_); |
131 } | 131 } |
132 | 132 |
133 // Verify that Write() returns error after Close(). | 133 // Verify that Write() returns error after Close(). |
134 TEST_F(StreamSocketAdapterTest, WriteClose) { | 134 TEST_F(StreamSocketAdapterTest, WriteClose) { |
135 scoped_refptr<IOBuffer> buffer = new IOBuffer(kTestDataSize); | 135 scoped_refptr<IOBuffer> buffer(new IOBuffer(kTestDataSize)); |
136 | 136 |
137 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) | 137 EXPECT_CALL(*stream_, Write(buffer->data(), kTestDataSize, _, _)) |
138 .WillOnce(Return(talk_base::SR_BLOCK)); | 138 .WillOnce(Return(talk_base::SR_BLOCK)); |
139 | 139 |
140 int result = target_->Write(buffer, kTestDataSize, &callback_); | 140 int result = target_->Write(buffer, kTestDataSize, &callback_); |
141 ASSERT_EQ(net::ERR_IO_PENDING, result); | 141 ASSERT_EQ(net::ERR_IO_PENDING, result); |
142 | 142 |
143 EXPECT_CALL(*stream_, Close()); | 143 EXPECT_CALL(*stream_, Close()); |
144 target_->Close(kTestError); | 144 target_->Close(kTestError); |
145 EXPECT_EQ(kTestError, callback_result_); | 145 EXPECT_EQ(kTestError, callback_result_); |
146 | 146 |
147 // All Write() calls after Close() should return the error. | 147 // All Write() calls after Close() should return the error. |
148 EXPECT_EQ(kTestError, target_->Write(buffer, kTestError, &callback_)); | 148 EXPECT_EQ(kTestError, target_->Write(buffer, kTestError, &callback_)); |
149 } | 149 } |
150 | 150 |
151 } // namespace remoting | 151 } // namespace remoting |
OLD | NEW |