Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: webrtc/base/sslstreamadapter_unittest.cc

Issue 1440193002: Fix DTLS packet boundary handling in SSLStreamAdapterTests. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« webrtc/base/bufferqueue.cc ('K') | « webrtc/base/bufferqueue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 11
12 #include <algorithm> 12 #include <algorithm>
13 #include <set> 13 #include <set>
14 #include <string> 14 #include <string>
15 15
16 #include "webrtc/base/bufferqueue.h"
16 #include "webrtc/base/gunit.h" 17 #include "webrtc/base/gunit.h"
17 #include "webrtc/base/helpers.h" 18 #include "webrtc/base/helpers.h"
18 #include "webrtc/base/scoped_ptr.h" 19 #include "webrtc/base/scoped_ptr.h"
19 #include "webrtc/base/ssladapter.h" 20 #include "webrtc/base/ssladapter.h"
20 #include "webrtc/base/sslconfig.h" 21 #include "webrtc/base/sslconfig.h"
21 #include "webrtc/base/sslidentity.h" 22 #include "webrtc/base/sslidentity.h"
22 #include "webrtc/base/sslstreamadapter.h" 23 #include "webrtc/base/sslstreamadapter.h"
23 #include "webrtc/base/stream.h" 24 #include "webrtc/base/stream.h"
24 #include "webrtc/test/testsupport/gtest_disable.h" 25 #include "webrtc/test/testsupport/gtest_disable.h"
25 26
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 "-----END CERTIFICATE-----\n"; 68 "-----END CERTIFICATE-----\n";
68 69
69 #define MAYBE_SKIP_TEST(feature) \ 70 #define MAYBE_SKIP_TEST(feature) \
70 if (!(rtc::SSLStreamAdapter::feature())) { \ 71 if (!(rtc::SSLStreamAdapter::feature())) { \
71 LOG(LS_INFO) << "Feature disabled... skipping"; \ 72 LOG(LS_INFO) << "Feature disabled... skipping"; \
72 return; \ 73 return; \
73 } 74 }
74 75
75 class SSLStreamAdapterTestBase; 76 class SSLStreamAdapterTestBase;
76 77
77 class SSLDummyStream : public rtc::StreamInterface, 78 class SSLDummyStreamBase : public rtc::StreamInterface,
78 public sigslot::has_slots<> { 79 public sigslot::has_slots<> {
79 public: 80 public:
80 explicit SSLDummyStream(SSLStreamAdapterTestBase *test, 81 explicit SSLDummyStreamBase(SSLStreamAdapterTestBase *test,
tommi 2015/11/13 08:38:13 no need for explicit. can you change it so that th
joachim 2015/11/13 09:08:28 Done.
81 const std::string &side, 82 const std::string &side) :
82 rtc::FifoBuffer *in,
83 rtc::FifoBuffer *out) :
84 test_(test), 83 test_(test),
85 side_(side), 84 side_(side),
86 in_(in),
87 out_(out),
88 first_packet_(true) { 85 first_packet_(true) {
89 in_->SignalEvent.connect(this, &SSLDummyStream::OnEventIn);
90 out_->SignalEvent.connect(this, &SSLDummyStream::OnEventOut);
91 } 86 }
92 87
93 virtual rtc::StreamState GetState() const { return rtc::SS_OPEN; } 88 virtual rtc::StreamState GetState() const { return rtc::SS_OPEN; }
94 89
90 // Defined later
tommi 2015/11/13 08:38:13 nit: Can you expand on this comment a bit? Is the
joachim 2015/11/13 09:08:28 This comment was there before, I don't think it ma
91 virtual rtc::StreamResult Write(const void* data, size_t data_len,
92 size_t* written, int* error);
93
94 virtual rtc::StreamResult WriteData(const void* data, size_t data_len,
95 size_t* written, int* error) = 0;
96
97 protected:
98 SSLStreamAdapterTestBase *test_;
tommi 2015/11/13 08:38:12 SSLStreamAdapterTestBase* test_; you could also n
joachim 2015/11/13 09:08:28 Done.
99 const std::string side_;
100 bool first_packet_;
101 };
102
103 class SSLDummyStreamTLS : public SSLDummyStreamBase {
104 public:
105 explicit SSLDummyStreamTLS(SSLStreamAdapterTestBase *test,
106 const std::string &side,
107 rtc::FifoBuffer *in,
108 rtc::FifoBuffer *out) :
109 SSLDummyStreamBase(test, side),
110 in_(in),
111 out_(out) {
112 in_->SignalEvent.connect(this, &SSLDummyStreamTLS::OnEventIn);
113 out_->SignalEvent.connect(this, &SSLDummyStreamTLS::OnEventOut);
114 }
115
95 virtual rtc::StreamResult Read(void* buffer, size_t buffer_len, 116 virtual rtc::StreamResult Read(void* buffer, size_t buffer_len,
96 size_t* read, int* error) { 117 size_t* read, int* error) {
97 rtc::StreamResult r; 118 rtc::StreamResult r;
98 119
99 r = in_->Read(buffer, buffer_len, read, error); 120 r = in_->Read(buffer, buffer_len, read, error);
100 if (r == rtc::SR_BLOCK) 121 if (r == rtc::SR_BLOCK)
101 return rtc::SR_BLOCK; 122 return rtc::SR_BLOCK;
102 if (r == rtc::SR_EOS) 123 if (r == rtc::SR_EOS)
103 return rtc::SR_EOS; 124 return rtc::SR_EOS;
104 125
105 if (r != rtc::SR_SUCCESS) { 126 if (r != rtc::SR_SUCCESS) {
106 ADD_FAILURE(); 127 ADD_FAILURE();
107 return rtc::SR_ERROR; 128 return rtc::SR_ERROR;
108 } 129 }
109 130
110 return rtc::SR_SUCCESS; 131 return rtc::SR_SUCCESS;
111 } 132 }
112 133
113 // Catch readability events on in and pass them up. 134 // Catch readability events on in and pass them up.
114 virtual void OnEventIn(rtc::StreamInterface *stream, int sig, 135 virtual void OnEventIn(rtc::StreamInterface *stream, int sig,
115 int err) { 136 int err) {
116 int mask = (rtc::SE_READ | rtc::SE_CLOSE); 137 int mask = (rtc::SE_READ | rtc::SE_CLOSE);
117 138
118 if (sig & mask) { 139 if (sig & mask) {
119 LOG(LS_INFO) << "SSLDummyStream::OnEvent side=" << side_ << " sig=" 140 LOG(LS_INFO) << "SSLDummyStreamTLS::OnEvent side=" << side_ << " sig="
120 << sig << " forwarding upward"; 141 << sig << " forwarding upward";
121 PostEvent(sig & mask, 0); 142 PostEvent(sig & mask, 0);
122 } 143 }
123 } 144 }
124 145
125 // Catch writeability events on out and pass them up. 146 // Catch writeability events on out and pass them up.
126 virtual void OnEventOut(rtc::StreamInterface *stream, int sig, 147 virtual void OnEventOut(rtc::StreamInterface *stream, int sig,
127 int err) { 148 int err) {
128 if (sig & rtc::SE_WRITE) { 149 if (sig & rtc::SE_WRITE) {
129 LOG(LS_INFO) << "SSLDummyStream::OnEvent side=" << side_ << " sig=" 150 LOG(LS_INFO) << "SSLDummyStreamTLS::OnEvent side=" << side_ << " sig="
130 << sig << " forwarding upward"; 151 << sig << " forwarding upward";
131 152
132 PostEvent(sig & rtc::SE_WRITE, 0); 153 PostEvent(sig & rtc::SE_WRITE, 0);
133 } 154 }
134 } 155 }
135 156
136 // Write to the outgoing FifoBuffer 157 // Write to the outgoing FifoBuffer
137 rtc::StreamResult WriteData(const void* data, size_t data_len, 158 virtual rtc::StreamResult WriteData(const void* data, size_t data_len,
138 size_t* written, int* error) { 159 size_t* written, int* error) override {
139 return out_->Write(data, data_len, written, error); 160 return out_->Write(data, data_len, written, error);
140 } 161 }
141 162
142 // Defined later
143 virtual rtc::StreamResult Write(const void* data, size_t data_len,
144 size_t* written, int* error);
145
146 virtual void Close() { 163 virtual void Close() {
147 LOG(LS_INFO) << "Closing outbound stream"; 164 LOG(LS_INFO) << "Closing outbound stream";
148 out_->Close(); 165 out_->Close();
149 } 166 }
150 167
151 private: 168 private:
152 SSLStreamAdapterTestBase *test_;
153 const std::string side_;
154 rtc::FifoBuffer *in_; 169 rtc::FifoBuffer *in_;
155 rtc::FifoBuffer *out_; 170 rtc::FifoBuffer *out_;
156 bool first_packet_; 171 };
172
173 class SSLDummyStreamDTLS : public SSLDummyStreamBase {
174 public:
175 explicit SSLDummyStreamDTLS(SSLStreamAdapterTestBase *test,
176 const std::string &side,
177 rtc::BufferQueue *in,
178 rtc::BufferQueue *out) :
179 SSLDummyStreamBase(test, side),
180 in_(in),
181 out_(out),
182 closed_(false) {
183 in_->SignalEvent.connect(this, &SSLDummyStreamDTLS::OnEventIn);
184 out_->SignalEvent.connect(this, &SSLDummyStreamDTLS::OnEventOut);
185 }
186
187 virtual rtc::StreamResult Read(void* buffer, size_t buffer_len,
188 size_t* read, int* error) {
189 if (closed_) {
190 return rtc::SR_ERROR;
191 }
192 if (!in_->ReadFront(buffer, buffer_len, read)) {
193 return rtc::SR_BLOCK;
194 }
195 return rtc::SR_SUCCESS;
196 }
197
198 // Catch readability events on in and pass them up.
199 virtual void OnEventIn(rtc::BufferQueue *queue, int events) {
200 if (events & rtc::BQ_READ) {
201 LOG(LS_INFO) << "SSLDummyStreamDTLS::OnEvent side=" << side_
202 << " events=" << events << " forwarding upward";
tommi 2015/11/13 08:38:13 fix indent (4 spaces or preferably align the <<)
joachim 2015/11/13 09:08:28 Done.
203 PostEvent(rtc::SE_READ, 0);
204 }
205 }
206
207 // Catch writeability events on out and pass them up.
208 virtual void OnEventOut(rtc::BufferQueue *queue, int events) {
209 if (events & rtc::BQ_WRITE) {
210 LOG(LS_INFO) << "SSLDummyStreamDTLS::OnEvent side=" << side_
211 << " events=" << events << " forwarding upward";
tommi 2015/11/13 08:38:13 and here
joachim 2015/11/13 09:08:28 Done.
212 PostEvent(rtc::SE_WRITE, 0);
213 }
214 }
215
216 // Write to the outgoing BufferQueue
217 virtual rtc::StreamResult WriteData(const void* data, size_t data_len,
218 size_t* written, int* error) override {
219 if (closed_) {
220 return rtc::SR_ERROR;
221 }
222 if (!out_->WriteBack(data, data_len, written)) {
223 return rtc::SR_BLOCK;
224 }
225 return rtc::SR_SUCCESS;
226 }
227
228 virtual void Close() {
229 LOG(LS_INFO) << "Closing outbound stream";
230 closed_ = true;
231 }
232
233 private:
234 rtc::BufferQueue *in_;
235 rtc::BufferQueue *out_;
236 bool closed_;
157 }; 237 };
158 238
159 static const int kFifoBufferSize = 4096; 239 static const int kFifoBufferSize = 4096;
240 static const int kBufferCapacity = 1;
241 static const size_t kDefaultBufferSize = 2048;
160 242
161 class SSLStreamAdapterTestBase : public testing::Test, 243 class SSLStreamAdapterTestBase : public testing::Test,
162 public sigslot::has_slots<> { 244 public sigslot::has_slots<> {
163 public: 245 public:
164 SSLStreamAdapterTestBase( 246 SSLStreamAdapterTestBase(
165 const std::string& client_cert_pem, 247 const std::string& client_cert_pem,
166 const std::string& client_private_key_pem, 248 const std::string& client_private_key_pem,
167 bool dtls, 249 bool dtls,
168 rtc::KeyParams client_key_type = rtc::KeyParams(rtc::KT_DEFAULT), 250 rtc::KeyParams client_key_type = rtc::KeyParams(rtc::KT_DEFAULT),
169 rtc::KeyParams server_key_type = rtc::KeyParams(rtc::KT_DEFAULT)) 251 rtc::KeyParams server_key_type = rtc::KeyParams(rtc::KT_DEFAULT))
170 : client_buffer_(kFifoBufferSize), 252 : client_cert_pem_(client_cert_pem),
171 server_buffer_(kFifoBufferSize), 253 client_private_key_pem_(client_private_key_pem),
172 client_stream_( 254 client_key_type_(client_key_type),
173 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_)), 255 server_key_type_(server_key_type),
174 server_stream_( 256 client_stream_(NULL),
175 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_)), 257 server_stream_(NULL),
176 client_ssl_(rtc::SSLStreamAdapter::Create(client_stream_)),
177 server_ssl_(rtc::SSLStreamAdapter::Create(server_stream_)),
178 client_identity_(NULL), 258 client_identity_(NULL),
179 server_identity_(NULL), 259 server_identity_(NULL),
180 delay_(0), 260 delay_(0),
181 mtu_(1460), 261 mtu_(1460),
182 loss_(0), 262 loss_(0),
183 lose_first_packet_(false), 263 lose_first_packet_(false),
184 damage_(false), 264 damage_(false),
185 dtls_(dtls), 265 dtls_(dtls),
186 handshake_wait_(5000), 266 handshake_wait_(5000),
187 identities_set_(false) { 267 identities_set_(false) {
188 // Set use of the test RNG to get predictable loss patterns. 268 // Set use of the test RNG to get predictable loss patterns.
189 rtc::SetRandomTestMode(true); 269 rtc::SetRandomTestMode(true);
190
191 // Set up the slots
192 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
193 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
194
195 if (!client_cert_pem.empty() && !client_private_key_pem.empty()) {
196 client_identity_ = rtc::SSLIdentity::FromPEMStrings(
197 client_private_key_pem, client_cert_pem);
198 } else {
199 client_identity_ = rtc::SSLIdentity::Generate("client", client_key_type);
200 }
201 server_identity_ = rtc::SSLIdentity::Generate("server", server_key_type);
202
203 client_ssl_->SetIdentity(client_identity_);
204 server_ssl_->SetIdentity(server_identity_);
205 } 270 }
206 271
207 ~SSLStreamAdapterTestBase() { 272 ~SSLStreamAdapterTestBase() {
208 // Put it back for the next test. 273 // Put it back for the next test.
209 rtc::SetRandomTestMode(false); 274 rtc::SetRandomTestMode(false);
210 } 275 }
211 276
277 virtual void SetUp() override {
278 CreateStreams();
279
280 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_));
281 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_));
282
283 // Set up the slots
284 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
285 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
286
287 if (!client_cert_pem_.empty() && !client_private_key_pem_.empty()) {
288 client_identity_ = rtc::SSLIdentity::FromPEMStrings(
289 client_private_key_pem_, client_cert_pem_);
290 } else {
291 client_identity_ = rtc::SSLIdentity::Generate("client", client_key_type_);
292 }
293 server_identity_ = rtc::SSLIdentity::Generate("server", server_key_type_);
294
295 client_ssl_->SetIdentity(client_identity_);
296 server_ssl_->SetIdentity(server_identity_);
297 }
298
299 virtual void TearDown() override {
300 client_ssl_.reset(NULL);
tommi 2015/11/13 08:38:13 nit: use nullptr. Is this necessary though? Won'
joachim 2015/11/13 09:08:28 Changed to nullptr. This is necessary because othe
301 server_ssl_.reset(NULL);
302 }
303
304 virtual void CreateStreams() = 0;
305
212 // Recreate the client/server identities with the specified validity period. 306 // Recreate the client/server identities with the specified validity period.
213 // |not_before| and |not_after| are offsets from the current time in number 307 // |not_before| and |not_after| are offsets from the current time in number
214 // of seconds. 308 // of seconds.
215 void ResetIdentitiesWithValidity(int not_before, int not_after) { 309 void ResetIdentitiesWithValidity(int not_before, int not_after) {
216 client_stream_ = 310 CreateStreams();
217 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_);
218 server_stream_ =
219 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_);
220 311
221 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); 312 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_));
222 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); 313 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_));
223 314
224 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); 315 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
225 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); 316 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
226 317
227 rtc::SSLIdentityParams client_params; 318 rtc::SSLIdentityParams client_params;
228 client_params.key_params = rtc::KeyParams(rtc::KT_DEFAULT); 319 client_params.key_params = rtc::KeyParams(rtc::KT_DEFAULT);
229 client_params.common_name = "client"; 320 client_params.common_name = "client";
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 if (expect_success) { 415 if (expect_success) {
325 EXPECT_TRUE_WAIT((client_ssl_->GetState() == rtc::SS_OPEN) 416 EXPECT_TRUE_WAIT((client_ssl_->GetState() == rtc::SS_OPEN)
326 && (server_ssl_->GetState() == rtc::SS_OPEN), 417 && (server_ssl_->GetState() == rtc::SS_OPEN),
327 handshake_wait_); 418 handshake_wait_);
328 } else { 419 } else {
329 EXPECT_TRUE_WAIT(client_ssl_->GetState() == rtc::SS_CLOSED, 420 EXPECT_TRUE_WAIT(client_ssl_->GetState() == rtc::SS_CLOSED,
330 handshake_wait_); 421 handshake_wait_);
331 } 422 }
332 } 423 }
333 424
334 rtc::StreamResult DataWritten(SSLDummyStream *from, const void *data, 425 rtc::StreamResult DataWritten(SSLDummyStreamBase *from, const void *data,
335 size_t data_len, size_t *written, 426 size_t data_len, size_t *written,
tommi 2015/11/13 08:38:13 can you fix the indentation since you're here?
joachim 2015/11/13 09:08:28 Done here and in some other places.
336 int *error) { 427 int *error) {
337 // Randomly drop loss_ percent of packets 428 // Randomly drop loss_ percent of packets
338 if (rtc::CreateRandomId() % 100 < static_cast<uint32_t>(loss_)) { 429 if (rtc::CreateRandomId() % 100 < static_cast<uint32_t>(loss_)) {
339 LOG(LS_INFO) << "Randomly dropping packet, size=" << data_len; 430 LOG(LS_INFO) << "Randomly dropping packet, size=" << data_len;
340 *written = data_len; 431 *written = data_len;
341 return rtc::SR_SUCCESS; 432 return rtc::SR_SUCCESS;
342 } 433 }
343 if (dtls_ && (data_len > mtu_)) { 434 if (dtls_ && (data_len > mtu_)) {
344 LOG(LS_INFO) << "Dropping packet > mtu, size=" << data_len; 435 LOG(LS_INFO) << "Dropping packet > mtu, size=" << data_len;
345 *written = data_len; 436 *written = data_len;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 use_context, 527 use_context,
437 result, result_len); 528 result, result_len);
438 } 529 }
439 530
440 // To be implemented by subclasses. 531 // To be implemented by subclasses.
441 virtual void WriteData() = 0; 532 virtual void WriteData() = 0;
442 virtual void ReadData(rtc::StreamInterface *stream) = 0; 533 virtual void ReadData(rtc::StreamInterface *stream) = 0;
443 virtual void TestTransfer(int size) = 0; 534 virtual void TestTransfer(int size) = 0;
444 535
445 protected: 536 protected:
446 rtc::FifoBuffer client_buffer_; 537 std::string client_cert_pem_;
447 rtc::FifoBuffer server_buffer_; 538 std::string client_private_key_pem_;
448 SSLDummyStream *client_stream_; // freed by client_ssl_ destructor 539 rtc::KeyParams client_key_type_;
449 SSLDummyStream *server_stream_; // freed by server_ssl_ destructor 540 rtc::KeyParams server_key_type_;
541 SSLDummyStreamBase *client_stream_; // freed by client_ssl_ destructor
542 SSLDummyStreamBase *server_stream_; // freed by server_ssl_ destructor
450 rtc::scoped_ptr<rtc::SSLStreamAdapter> client_ssl_; 543 rtc::scoped_ptr<rtc::SSLStreamAdapter> client_ssl_;
451 rtc::scoped_ptr<rtc::SSLStreamAdapter> server_ssl_; 544 rtc::scoped_ptr<rtc::SSLStreamAdapter> server_ssl_;
452 rtc::SSLIdentity *client_identity_; // freed by client_ssl_ destructor 545 rtc::SSLIdentity *client_identity_; // freed by client_ssl_ destructor
453 rtc::SSLIdentity *server_identity_; // freed by server_ssl_ destructor 546 rtc::SSLIdentity *server_identity_; // freed by server_ssl_ destructor
454 int delay_; 547 int delay_;
455 size_t mtu_; 548 size_t mtu_;
456 int loss_; 549 int loss_;
457 bool lose_first_packet_; 550 bool lose_first_packet_;
458 bool damage_; 551 bool damage_;
459 bool dtls_; 552 bool dtls_;
460 int handshake_wait_; 553 int handshake_wait_;
461 bool identities_set_; 554 bool identities_set_;
462 }; 555 };
463 556
464 class SSLStreamAdapterTestTLS 557 class SSLStreamAdapterTestTLS
465 : public SSLStreamAdapterTestBase, 558 : public SSLStreamAdapterTestBase,
466 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> { 559 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> {
467 public: 560 public:
468 SSLStreamAdapterTestTLS() 561 SSLStreamAdapterTestTLS()
469 : SSLStreamAdapterTestBase("", 562 : SSLStreamAdapterTestBase("",
470 "", 563 "",
471 false, 564 false,
472 ::testing::get<0>(GetParam()), 565 ::testing::get<0>(GetParam()),
473 ::testing::get<1>(GetParam())){}; 566 ::testing::get<1>(GetParam())),
567 client_buffer_(kFifoBufferSize),
568 server_buffer_(kFifoBufferSize) {
569 }
570
571 virtual void CreateStreams() override {
572 client_stream_ =
573 new SSLDummyStreamTLS(this, "c2s", &client_buffer_, &server_buffer_);
574 server_stream_ =
575 new SSLDummyStreamTLS(this, "s2c", &server_buffer_, &client_buffer_);
576 }
474 577
475 // Test data transfer for TLS 578 // Test data transfer for TLS
476 virtual void TestTransfer(int size) { 579 virtual void TestTransfer(int size) {
477 LOG(LS_INFO) << "Starting transfer test with " << size << " bytes"; 580 LOG(LS_INFO) << "Starting transfer test with " << size << " bytes";
478 // Create some dummy data to send. 581 // Create some dummy data to send.
479 size_t received; 582 size_t received;
480 583
481 send_stream_.ReserveSize(size); 584 send_stream_.ReserveSize(size);
482 for (int i = 0; i < size; ++i) { 585 for (int i = 0; i < size; ++i) {
483 char ch = static_cast<char>(i); 586 char ch = static_cast<char>(i);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 break; 661 break;
559 662
560 ASSERT_EQ(rtc::SR_SUCCESS, r); 663 ASSERT_EQ(rtc::SR_SUCCESS, r);
561 LOG(LS_INFO) << "Read " << bread; 664 LOG(LS_INFO) << "Read " << bread;
562 665
563 recv_stream_.Write(buffer, bread, NULL, NULL); 666 recv_stream_.Write(buffer, bread, NULL, NULL);
564 } 667 }
565 } 668 }
566 669
567 private: 670 private:
671 rtc::FifoBuffer client_buffer_;
672 rtc::FifoBuffer server_buffer_;
568 rtc::MemoryStream send_stream_; 673 rtc::MemoryStream send_stream_;
569 rtc::MemoryStream recv_stream_; 674 rtc::MemoryStream recv_stream_;
570 }; 675 };
571 676
572 class SSLStreamAdapterTestDTLS 677 class SSLStreamAdapterTestDTLS
573 : public SSLStreamAdapterTestBase, 678 : public SSLStreamAdapterTestBase,
574 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> { 679 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> {
575 public: 680 public:
576 SSLStreamAdapterTestDTLS() 681 SSLStreamAdapterTestDTLS()
577 : SSLStreamAdapterTestBase("", 682 : SSLStreamAdapterTestBase("",
578 "", 683 "",
579 true, 684 true,
580 ::testing::get<0>(GetParam()), 685 ::testing::get<0>(GetParam()),
581 ::testing::get<1>(GetParam())), 686 ::testing::get<1>(GetParam())),
687 client_buffer_(kBufferCapacity, kDefaultBufferSize),
688 server_buffer_(kBufferCapacity, kDefaultBufferSize),
582 packet_size_(1000), 689 packet_size_(1000),
583 count_(0), 690 count_(0),
584 sent_(0) {} 691 sent_(0) {}
585 692
586 SSLStreamAdapterTestDTLS(const std::string& cert_pem, 693 SSLStreamAdapterTestDTLS(const std::string& cert_pem,
587 const std::string& private_key_pem) : 694 const std::string& private_key_pem) :
588 SSLStreamAdapterTestBase(cert_pem, private_key_pem, true), 695 SSLStreamAdapterTestBase(cert_pem, private_key_pem, true),
696 client_buffer_(kBufferCapacity, kDefaultBufferSize),
697 server_buffer_(kBufferCapacity, kDefaultBufferSize),
589 packet_size_(1000), count_(0), sent_(0) { 698 packet_size_(1000), count_(0), sent_(0) {
590 } 699 }
591 700
701 virtual void CreateStreams() override {
702 client_stream_ =
703 new SSLDummyStreamDTLS(this, "c2s", &client_buffer_, &server_buffer_);
704 server_stream_ =
705 new SSLDummyStreamDTLS(this, "s2c", &server_buffer_, &client_buffer_);
706 }
707
592 virtual void WriteData() { 708 virtual void WriteData() {
593 unsigned char *packet = new unsigned char[1600]; 709 unsigned char *packet = new unsigned char[1600];
594 710
595 do { 711 while (sent_ < count_) {
596 memset(packet, sent_ & 0xff, packet_size_); 712 memset(packet, sent_ & 0xff, packet_size_);
597 *(reinterpret_cast<uint32_t *>(packet)) = sent_; 713 *(reinterpret_cast<uint32_t *>(packet)) = sent_;
598 714
599 size_t sent; 715 size_t sent;
600 int rv = client_ssl_->Write(packet, packet_size_, &sent, 0); 716 int rv = client_ssl_->Write(packet, packet_size_, &sent, 0);
601 if (rv == rtc::SR_SUCCESS) { 717 if (rv == rtc::SR_SUCCESS) {
602 LOG(LS_VERBOSE) << "Sent: " << sent_; 718 LOG(LS_VERBOSE) << "Sent: " << sent_;
603 sent_++; 719 sent_++;
604 } else if (rv == rtc::SR_BLOCK) { 720 } else if (rv == rtc::SR_BLOCK) {
605 LOG(LS_VERBOSE) << "Blocked..."; 721 LOG(LS_VERBOSE) << "Blocked...";
606 break; 722 break;
607 } else { 723 } else {
608 ADD_FAILURE(); 724 ADD_FAILURE();
609 break; 725 break;
610 } 726 }
611 } while (sent_ < count_); 727 };
tommi 2015/11/13 08:38:13 remove semicolon
joachim 2015/11/13 09:08:28 Done.
612 728
613 delete [] packet; 729 delete [] packet;
614 } 730 }
615 731
616 virtual void ReadData(rtc::StreamInterface *stream) { 732 virtual void ReadData(rtc::StreamInterface *stream) {
617 unsigned char buffer[2000]; 733 unsigned char buffer[2000];
618 size_t bread; 734 size_t bread;
619 int err2; 735 int err2;
620 rtc::StreamResult r; 736 rtc::StreamResult r;
621 737
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 EXPECT_EQ(0U, received_.size()); 776 EXPECT_EQ(0U, received_.size());
661 } else if (loss_ == 0) { 777 } else if (loss_ == 0) {
662 EXPECT_EQ_WAIT(static_cast<size_t>(sent_), received_.size(), 1000); 778 EXPECT_EQ_WAIT(static_cast<size_t>(sent_), received_.size(), 1000);
663 } else { 779 } else {
664 LOG(LS_INFO) << "Sent " << sent_ << " packets; received " << 780 LOG(LS_INFO) << "Sent " << sent_ << " packets; received " <<
665 received_.size(); 781 received_.size();
666 } 782 }
667 }; 783 };
668 784
669 private: 785 private:
786 rtc::BufferQueue client_buffer_;
787 rtc::BufferQueue server_buffer_;
670 size_t packet_size_; 788 size_t packet_size_;
671 int count_; 789 int count_;
672 int sent_; 790 int sent_;
673 std::set<int> received_; 791 std::set<int> received_;
674 }; 792 };
675 793
676 794
677 rtc::StreamResult SSLDummyStream::Write(const void* data, size_t data_len, 795 rtc::StreamResult SSLDummyStreamBase::Write(const void* data, size_t data_len,
678 size_t* written, int* error) { 796 size_t* written, int* error) {
679 *written = data_len; 797 *written = data_len;
680 798
681 LOG(LS_INFO) << "Writing to loopback " << data_len; 799 LOG(LS_INFO) << "Writing to loopback " << data_len;
682 800
683 if (first_packet_) { 801 if (first_packet_) {
684 first_packet_ = false; 802 first_packet_ = false;
685 if (test_->GetLoseFirstPacket()) { 803 if (test_->GetLoseFirstPacket()) {
686 LOG(LS_INFO) << "Losing initial packet of length " << data_len; 804 LOG(LS_INFO) << "Losing initial packet of length " << data_len;
687 return rtc::SR_SUCCESS; 805 return rtc::SR_SUCCESS;
688 } 806 }
689 } 807 }
690 808
691 return test_->DataWritten(this, data, data_len, written, error); 809 return test_->DataWritten(this, data, data_len, written, error);
692
693 return rtc::SR_SUCCESS;
694 }; 810 };
695 811
696 class SSLStreamAdapterTestDTLSFromPEMStrings : public SSLStreamAdapterTestDTLS { 812 class SSLStreamAdapterTestDTLSFromPEMStrings : public SSLStreamAdapterTestDTLS {
697 public: 813 public:
698 SSLStreamAdapterTestDTLSFromPEMStrings() : 814 SSLStreamAdapterTestDTLSFromPEMStrings() :
699 SSLStreamAdapterTestDTLS(kCERT_PEM, kRSA_PRIVATE_KEY_PEM) { 815 SSLStreamAdapterTestDTLS(kCERT_PEM, kRSA_PRIVATE_KEY_PEM) {
700 } 816 }
701 }; 817 };
702 818
703 // Basic tests: TLS 819 // Basic tests: TLS
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 // Test a handshake with small MTU 891 // Test a handshake with small MTU
776 // Disabled due to https://code.google.com/p/webrtc/issues/detail?id=3910 892 // Disabled due to https://code.google.com/p/webrtc/issues/detail?id=3910
777 TEST_P(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSConnectWithSmallMtu) { 893 TEST_P(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSConnectWithSmallMtu) {
778 MAYBE_SKIP_TEST(HaveDtls); 894 MAYBE_SKIP_TEST(HaveDtls);
779 SetMtu(700); 895 SetMtu(700);
780 SetHandshakeWait(20000); 896 SetHandshakeWait(20000);
781 TestHandshake(); 897 TestHandshake();
782 }; 898 };
783 899
784 // Test transfer -- trivial 900 // Test transfer -- trivial
785 // Disabled due to https://code.google.com/p/webrtc/issues/detail?id=5005 901 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSTransfer) {
786 TEST_P(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSTransfer) {
787 MAYBE_SKIP_TEST(HaveDtls); 902 MAYBE_SKIP_TEST(HaveDtls);
788 TestHandshake(); 903 TestHandshake();
789 TestTransfer(100); 904 TestTransfer(100);
790 }; 905 };
791 906
792 // Disabled due to https://code.google.com/p/webrtc/issues/detail?id=5005 907 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSTransferWithLoss) {
793 TEST_P(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSTransferWithLoss) {
794 MAYBE_SKIP_TEST(HaveDtls); 908 MAYBE_SKIP_TEST(HaveDtls);
795 TestHandshake(); 909 TestHandshake();
796 SetLoss(10); 910 SetLoss(10);
797 TestTransfer(100); 911 TestTransfer(100);
798 }; 912 };
799 913
800 // Disabled due to https://code.google.com/p/webrtc/issues/detail?id=5005 914 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSTransferWithDamage) {
801 TEST_P(SSLStreamAdapterTestDTLS, DISABLED_TestDTLSTransferWithDamage) {
802 MAYBE_SKIP_TEST(HaveDtls); 915 MAYBE_SKIP_TEST(HaveDtls);
803 SetDamage(); // Must be called first because first packet 916 SetDamage(); // Must be called first because first packet
804 // write happens at end of handshake. 917 // write happens at end of handshake.
805 TestHandshake(); 918 TestHandshake();
806 TestTransfer(100); 919 TestTransfer(100);
807 }; 920 };
808 921
809 // Test DTLS-SRTP with all high ciphers 922 // Test DTLS-SRTP with all high ciphers
810 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHigh) { 923 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHigh) {
811 MAYBE_SKIP_TEST(HaveDtlsSrtp); 924 MAYBE_SKIP_TEST(HaveDtlsSrtp);
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1054 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); 1167 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256))));
1055 INSTANTIATE_TEST_CASE_P( 1168 INSTANTIATE_TEST_CASE_P(
1056 SSLStreamAdapterTestsDTLS, 1169 SSLStreamAdapterTestsDTLS,
1057 SSLStreamAdapterTestDTLS, 1170 SSLStreamAdapterTestDTLS,
1058 Combine(Values(rtc::KeyParams::RSA(1024, 65537), 1171 Combine(Values(rtc::KeyParams::RSA(1024, 65537),
1059 rtc::KeyParams::RSA(1152, 65537), 1172 rtc::KeyParams::RSA(1152, 65537),
1060 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), 1173 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)),
1061 Values(rtc::KeyParams::RSA(1024, 65537), 1174 Values(rtc::KeyParams::RSA(1024, 65537),
1062 rtc::KeyParams::RSA(1152, 65537), 1175 rtc::KeyParams::RSA(1152, 65537),
1063 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); 1176 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256))));
OLDNEW
« webrtc/base/bufferqueue.cc ('K') | « webrtc/base/bufferqueue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698