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

Side by Side Diff: net/spdy/spdy_proxy_client_socket_unittest.cc

Issue 8912010: Revert 110965 - Allow chrome to handle 407 auth challenges to CONNECT requests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.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 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "net/spdy/spdy_proxy_client_socket.h" 5 #include "net/spdy/spdy_proxy_client_socket.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "net/base/address_list.h" 8 #include "net/base/address_list.h"
9 #include "net/base/net_log.h" 9 #include "net/base/net_log.h"
10 #include "net/base/net_log_unittest.h" 10 #include "net/base/net_log_unittest.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 virtual void TearDown(); 60 virtual void TearDown();
61 61
62 protected: 62 protected:
63 void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes, 63 void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes,
64 size_t writes_count); 64 size_t writes_count);
65 spdy::SpdyFrame* ConstructConnectRequestFrame(); 65 spdy::SpdyFrame* ConstructConnectRequestFrame();
66 spdy::SpdyFrame* ConstructConnectAuthRequestFrame(); 66 spdy::SpdyFrame* ConstructConnectAuthRequestFrame();
67 spdy::SpdyFrame* ConstructConnectReplyFrame(); 67 spdy::SpdyFrame* ConstructConnectReplyFrame();
68 spdy::SpdyFrame* ConstructConnectAuthReplyFrame(); 68 spdy::SpdyFrame* ConstructConnectAuthReplyFrame();
69 spdy::SpdyFrame* ConstructNtlmAuthReplyFrame();
70 spdy::SpdyFrame* ConstructConnectErrorReplyFrame(); 69 spdy::SpdyFrame* ConstructConnectErrorReplyFrame();
71 spdy::SpdyFrame* ConstructBodyFrame(const char* data, int length); 70 spdy::SpdyFrame* ConstructBodyFrame(const char* data, int length);
72 scoped_refptr<IOBufferWithSize> CreateBuffer(const char* data, int size); 71 scoped_refptr<IOBufferWithSize> CreateBuffer(const char* data, int size);
73 void AssertConnectSucceeds(); 72 void AssertConnectSucceeds();
74 void AssertConnectFails(int result); 73 void AssertConnectFails(int result);
75 void AssertConnectionEstablished(); 74 void AssertConnectionEstablished();
76 void AssertSyncReadEquals(const char* data, int len); 75 void AssertSyncReadEquals(const char* data, int len);
77 void AssertAsyncReadEquals(const char* data, int len); 76 void AssertAsyncReadEquals(const char* data, int len);
78 void AssertReadStarts(const char* data, int len); 77 void AssertReadStarts(const char* data, int len);
79 void AssertReadReturns(const char* data, int len); 78 void AssertReadReturns(const char* data, int len);
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 0, 382 0,
384 false, 383 false,
385 kStreamId, 384 kStreamId,
386 LOWEST, 385 LOWEST,
387 spdy::SYN_REPLY, 386 spdy::SYN_REPLY,
388 spdy::CONTROL_FLAG_NONE, 387 spdy::CONTROL_FLAG_NONE,
389 kStandardReplyHeaders, 388 kStandardReplyHeaders,
390 arraysize(kStandardReplyHeaders)); 389 arraysize(kStandardReplyHeaders));
391 } 390 }
392 391
393 // Constructs a SPDY SYN_REPLY frame to match the SPDY CONNECT which
394 // requires Proxy Authentication using NTLM.
395 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructNtlmAuthReplyFrame() {
396 const char* const kStandardReplyHeaders[] = {
397 "status", "407 Proxy Authentication Required",
398 "version", "HTTP/1.1",
399 "proxy-authenticate", "NTLM",
400 };
401
402 return ConstructSpdyControlFrame(NULL,
403 0,
404 false,
405 kStreamId,
406 LOWEST,
407 spdy::SYN_REPLY,
408 spdy::CONTROL_FLAG_NONE,
409 kStandardReplyHeaders,
410 arraysize(kStandardReplyHeaders));
411 }
412
413 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error. 392 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error.
414 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() { 393 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() {
415 const char* const kStandardReplyHeaders[] = { 394 const char* const kStandardReplyHeaders[] = {
416 "status", "500 Internal Server Error", 395 "status", "500 Internal Server Error",
417 "version", "HTTP/1.1", 396 "version", "HTTP/1.1",
418 }; 397 };
419 398
420 return ConstructSpdyControlFrame(NULL, 399 return ConstructSpdyControlFrame(NULL,
421 0, 400 0,
422 false, 401 false,
(...skipping 26 matching lines...) Expand all
449 428
450 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 429 Initialize(reads, arraysize(reads), writes, arraysize(writes));
451 430
452 ASSERT_FALSE(sock_->IsConnected()); 431 ASSERT_FALSE(sock_->IsConnected());
453 432
454 AssertConnectSucceeds(); 433 AssertConnectSucceeds();
455 434
456 AssertConnectionEstablished(); 435 AssertConnectionEstablished();
457 } 436 }
458 437
459 TEST_F(SpdyProxyClientSocketTest, ConnectWithUnsupportedAuth) {
460 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
461 MockWrite writes[] = {
462 CreateMockWrite(*conn, 0, false),
463 };
464
465 scoped_ptr<spdy::SpdyFrame> resp(ConstructNtlmAuthReplyFrame());
466 MockRead reads[] = {
467 CreateMockRead(*resp, 1, true),
468 MockRead(true, 0, 3), // EOF
469 };
470
471 Initialize(reads, arraysize(reads), writes, arraysize(writes));
472
473 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
474 }
475
476 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) { 438 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) {
477 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 439 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
478 MockWrite writes[] = { 440 MockWrite writes[] = {
479 CreateMockWrite(*conn, 0, false), 441 CreateMockWrite(*conn, 0, false),
480 }; 442 };
481 443
482 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 444 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
483 MockRead reads[] = { 445 MockRead reads[] = {
484 CreateMockRead(*resp, 1, true), 446 CreateMockRead(*resp, 1, true),
485 MockRead(true, 0, 3), // EOF 447 MockRead(true, 0, 3), // EOF
486 }; 448 };
487 449
488 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 450 Initialize(reads, arraysize(reads), writes, arraysize(writes));
489 451
490 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 452 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
491 453
492 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 454 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
493 ASSERT_TRUE(response != NULL); 455 ASSERT_TRUE(response != NULL);
494 ASSERT_EQ(407, response->headers->response_code()); 456 ASSERT_EQ(407, response->headers->response_code());
495 ASSERT_EQ("Proxy Authentication Required", 457 ASSERT_EQ("Proxy Authentication Required",
496 response->headers->GetStatusText()); 458 response->headers->GetStatusText());
497 } 459 }
498 460
499 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) { 461 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) {
500 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame()); 462 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame());
501 MockWrite writes[] = { 463 MockWrite writes[] = {
502 CreateMockWrite(*conn, 0, false), 464 CreateMockWrite(*conn, 0, false),
503 }; 465 };
504 466
505 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 467 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
506 MockRead reads[] = { 468 MockRead reads[] = {
507 CreateMockRead(*resp, 1, true), 469 CreateMockRead(*resp, 1, true),
508 MockRead(true, 0, 3), // EOF 470 MockRead(true, 0, 3), // EOF
509 }; 471 };
510 472
511 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 473 Initialize(reads, arraysize(reads), writes, arraysize(writes));
512 AddAuthToCache(); 474 AddAuthToCache();
513 475
514 AssertConnectSucceeds(); 476 AssertConnectSucceeds();
515 477
516 AssertConnectionEstablished(); 478 AssertConnectionEstablished();
517 } 479 }
518 480
519 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRestart) {
520 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
521 scoped_ptr<spdy::SpdyFrame> auth(ConstructConnectAuthRequestFrame());
522 MockWrite writes[] = {
523 CreateMockWrite(*conn, 0, false),
524 };
525
526 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
527 scoped_ptr<spdy::SpdyFrame> auth_resp(ConstructConnectReplyFrame());
528 MockRead reads[] = {
529 CreateMockRead(*resp, 1, true),
530 MockRead(true, 0, 3), // EOF
531 };
532
533 Initialize(reads, arraysize(reads), writes, arraysize(writes));
534
535 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED);
536
537 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
538 ASSERT_TRUE(response != NULL);
539 ASSERT_EQ(407, response->headers->response_code());
540 ASSERT_EQ("Proxy Authentication Required",
541 response->headers->GetStatusText());
542
543 AddAuthToCache();
544
545 ASSERT_EQ(OK, sock_->RestartWithAuth(&read_callback_old_));
546 // A SpdyProxyClientSocket sits on a single SPDY stream which can
547 // only be used for a single request/response.
548 ASSERT_FALSE(sock_->IsConnectedAndIdle());
549 }
550
551 TEST_F(SpdyProxyClientSocketTest, ConnectFails) { 481 TEST_F(SpdyProxyClientSocketTest, ConnectFails) {
552 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 482 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
553 MockWrite writes[] = { 483 MockWrite writes[] = {
554 CreateMockWrite(*conn, 0, false), 484 CreateMockWrite(*conn, 0, false),
555 }; 485 };
556 486
557 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 487 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
558 MockRead reads[] = { 488 MockRead reads[] = {
559 MockRead(true, 0, 1), // EOF 489 MockRead(true, 0, 1), // EOF
560 }; 490 };
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 823 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
894 MockRead reads[] = { 824 MockRead reads[] = {
895 CreateMockRead(*resp, 1, true), 825 CreateMockRead(*resp, 1, true),
896 CreateMockRead(*msg1, 2, true), 826 CreateMockRead(*msg1, 2, true),
897 CreateMockRead(*msg2, 3, true), 827 CreateMockRead(*msg2, 3, true),
898 MockRead(true, 0, 4), // EOF 828 MockRead(true, 0, 4), // EOF
899 }; 829 };
900 830
901 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 831 Initialize(reads, arraysize(reads), writes, arraysize(writes));
902 832
903 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 833 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
904 834
905 Run(2); // SpdySession consumes the next two reads and sends then to 835 Run(2); // SpdySession consumes the next two reads and sends then to
906 // sock_ to be buffered. 836 // sock_ to be buffered.
907 AssertSyncReadEquals(kMsg1, kLen1); 837 AssertSyncReadEquals(kMsg1, kLen1);
908 AssertSyncReadEquals(kMsg2, kLen2); 838 AssertSyncReadEquals(kMsg2, kLen2);
909 } 839 }
910 840
911 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) { 841 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) {
912 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 842 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
913 MockWrite writes[] = { 843 MockWrite writes[] = {
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 write_callback_.callback())); 1284 write_callback_.callback()));
1355 1285
1356 Run(2); 1286 Run(2);
1357 1287
1358 EXPECT_FALSE(sock_.get()); 1288 EXPECT_FALSE(sock_.get());
1359 EXPECT_TRUE(read_callback.have_result()); 1289 EXPECT_TRUE(read_callback.have_result());
1360 EXPECT_FALSE(write_callback_.have_result()); 1290 EXPECT_FALSE(write_callback_.have_result());
1361 } 1291 }
1362 1292
1363 } // namespace net 1293 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698