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

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

Issue 8609006: Revert 110879 - 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, 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 | 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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 0, 380 0,
382 false, 381 false,
383 kStreamId, 382 kStreamId,
384 LOWEST, 383 LOWEST,
385 spdy::SYN_REPLY, 384 spdy::SYN_REPLY,
386 spdy::CONTROL_FLAG_NONE, 385 spdy::CONTROL_FLAG_NONE,
387 kStandardReplyHeaders, 386 kStandardReplyHeaders,
388 arraysize(kStandardReplyHeaders)); 387 arraysize(kStandardReplyHeaders));
389 } 388 }
390 389
391 // Constructs a SPDY SYN_REPLY frame to match the SPDY CONNECT which
392 // requires Proxy Authentication using NTLM.
393 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructNtlmAuthReplyFrame() {
394 const char* const kStandardReplyHeaders[] = {
395 "status", "407 Proxy Authentication Required",
396 "version", "HTTP/1.1",
397 "proxy-authenticate", "NTLM",
398 };
399
400 return ConstructSpdyControlFrame(NULL,
401 0,
402 false,
403 kStreamId,
404 LOWEST,
405 spdy::SYN_REPLY,
406 spdy::CONTROL_FLAG_NONE,
407 kStandardReplyHeaders,
408 arraysize(kStandardReplyHeaders));
409 }
410
411 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error. 390 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error.
412 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() { 391 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() {
413 const char* const kStandardReplyHeaders[] = { 392 const char* const kStandardReplyHeaders[] = {
414 "status", "500 Internal Server Error", 393 "status", "500 Internal Server Error",
415 "version", "HTTP/1.1", 394 "version", "HTTP/1.1",
416 }; 395 };
417 396
418 return ConstructSpdyControlFrame(NULL, 397 return ConstructSpdyControlFrame(NULL,
419 0, 398 0,
420 false, 399 false,
(...skipping 26 matching lines...) Expand all
447 426
448 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 427 Initialize(reads, arraysize(reads), writes, arraysize(writes));
449 428
450 ASSERT_FALSE(sock_->IsConnected()); 429 ASSERT_FALSE(sock_->IsConnected());
451 430
452 AssertConnectSucceeds(); 431 AssertConnectSucceeds();
453 432
454 AssertConnectionEstablished(); 433 AssertConnectionEstablished();
455 } 434 }
456 435
457 TEST_F(SpdyProxyClientSocketTest, ConnectWithUnsupportedAuth) {
458 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
459 MockWrite writes[] = {
460 CreateMockWrite(*conn, 0, false),
461 };
462
463 scoped_ptr<spdy::SpdyFrame> resp(ConstructNtlmAuthReplyFrame());
464 MockRead reads[] = {
465 CreateMockRead(*resp, 1, true),
466 MockRead(true, 0, 3), // EOF
467 };
468
469 Initialize(reads, arraysize(reads), writes, arraysize(writes));
470
471 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
472 }
473
474 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) { 436 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) {
475 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 437 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
476 MockWrite writes[] = { 438 MockWrite writes[] = {
477 CreateMockWrite(*conn, 0, false), 439 CreateMockWrite(*conn, 0, false),
478 }; 440 };
479 441
480 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 442 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
481 MockRead reads[] = { 443 MockRead reads[] = {
482 CreateMockRead(*resp, 1, true), 444 CreateMockRead(*resp, 1, true),
483 MockRead(true, 0, 3), // EOF 445 MockRead(true, 0, 3), // EOF
484 }; 446 };
485 447
486 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 448 Initialize(reads, arraysize(reads), writes, arraysize(writes));
487 449
488 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 450 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
489 451
490 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 452 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
491 ASSERT_TRUE(response != NULL); 453 ASSERT_TRUE(response != NULL);
492 ASSERT_EQ(407, response->headers->response_code()); 454 ASSERT_EQ(407, response->headers->response_code());
493 ASSERT_EQ("Proxy Authentication Required", 455 ASSERT_EQ("Proxy Authentication Required",
494 response->headers->GetStatusText()); 456 response->headers->GetStatusText());
495 } 457 }
496 458
497 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) { 459 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) {
498 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame()); 460 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame());
499 MockWrite writes[] = { 461 MockWrite writes[] = {
500 CreateMockWrite(*conn, 0, false), 462 CreateMockWrite(*conn, 0, false),
501 }; 463 };
502 464
503 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 465 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
504 MockRead reads[] = { 466 MockRead reads[] = {
505 CreateMockRead(*resp, 1, true), 467 CreateMockRead(*resp, 1, true),
506 MockRead(true, 0, 3), // EOF 468 MockRead(true, 0, 3), // EOF
507 }; 469 };
508 470
509 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 471 Initialize(reads, arraysize(reads), writes, arraysize(writes));
510 AddAuthToCache(); 472 AddAuthToCache();
511 473
512 AssertConnectSucceeds(); 474 AssertConnectSucceeds();
513 475
514 AssertConnectionEstablished(); 476 AssertConnectionEstablished();
515 } 477 }
516 478
517 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRestart) {
518 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
519 scoped_ptr<spdy::SpdyFrame> auth(ConstructConnectAuthRequestFrame());
520 MockWrite writes[] = {
521 CreateMockWrite(*conn, 0, false),
522 };
523
524 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
525 scoped_ptr<spdy::SpdyFrame> auth_resp(ConstructConnectReplyFrame());
526 MockRead reads[] = {
527 CreateMockRead(*resp, 1, true),
528 MockRead(true, 0, 3), // EOF
529 };
530
531 Initialize(reads, arraysize(reads), writes, arraysize(writes));
532
533 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED);
534
535 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
536 ASSERT_TRUE(response != NULL);
537 ASSERT_EQ(407, response->headers->response_code());
538 ASSERT_EQ("Proxy Authentication Required",
539 response->headers->GetStatusText());
540
541 AddAuthToCache();
542
543 ASSERT_EQ(OK, sock_->RestartWithAuth(&read_callback_));
544 // A SpdyProxyClientSocket sits on a single SPDY stream which can
545 // only be used for a single request/response.
546 ASSERT_FALSE(sock_->IsConnectedAndIdle());
547 }
548
549 TEST_F(SpdyProxyClientSocketTest, ConnectFails) { 479 TEST_F(SpdyProxyClientSocketTest, ConnectFails) {
550 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 480 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
551 MockWrite writes[] = { 481 MockWrite writes[] = {
552 CreateMockWrite(*conn, 0, false), 482 CreateMockWrite(*conn, 0, false),
553 }; 483 };
554 484
555 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 485 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
556 MockRead reads[] = { 486 MockRead reads[] = {
557 MockRead(true, 0, 1), // EOF 487 MockRead(true, 0, 1), // EOF
558 }; 488 };
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 814 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
885 MockRead reads[] = { 815 MockRead reads[] = {
886 CreateMockRead(*resp, 1, true), 816 CreateMockRead(*resp, 1, true),
887 CreateMockRead(*msg1, 2, true), 817 CreateMockRead(*msg1, 2, true),
888 CreateMockRead(*msg2, 3, true), 818 CreateMockRead(*msg2, 3, true),
889 MockRead(true, 0, 4), // EOF 819 MockRead(true, 0, 4), // EOF
890 }; 820 };
891 821
892 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 822 Initialize(reads, arraysize(reads), writes, arraysize(writes));
893 823
894 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 824 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
895 825
896 Run(2); // SpdySession consumes the next two reads and sends then to 826 Run(2); // SpdySession consumes the next two reads and sends then to
897 // sock_ to be buffered. 827 // sock_ to be buffered.
898 AssertSyncReadEquals(kMsg1, kLen1); 828 AssertSyncReadEquals(kMsg1, kLen1);
899 AssertSyncReadEquals(kMsg2, kLen2); 829 AssertSyncReadEquals(kMsg2, kLen2);
900 } 830 }
901 831
902 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) { 832 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) {
903 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 833 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
904 MockWrite writes[] = { 834 MockWrite writes[] = {
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1162 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1233 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, kLen1, &read_callback_)); 1163 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, kLen1, &read_callback_));
1234 1164
1235 sock_->Disconnect(); 1165 sock_->Disconnect();
1236 1166
1237 EXPECT_FALSE(sock_->IsConnected()); 1167 EXPECT_FALSE(sock_->IsConnected());
1238 EXPECT_FALSE(read_callback_.have_result()); 1168 EXPECT_FALSE(read_callback_.have_result());
1239 } 1169 }
1240 1170
1241 } // namespace net 1171 } // 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