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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 2489883007: [net/auth] Discard current handler token generation fails. (Closed)
Patch Set: Missed a few comments in the last round. Created 4 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
« no previous file with comments | « net/http/http_auth_handler_mock.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 11538 matching lines...) Expand 10 before | Expand all | Expand 10 after
11549 MockWrite write; 11549 MockWrite write;
11550 MockRead read; 11550 MockRead read;
11551 int expected_rv; 11551 int expected_rv;
11552 const MockWrite* extra_write; 11552 const MockWrite* extra_write;
11553 const MockRead* extra_read; 11553 const MockRead* extra_read;
11554 }; 11554 };
11555 11555
11556 static const int kNoSSL = 500; 11556 static const int kNoSSL = 500;
11557 11557
11558 struct TestConfig { 11558 struct TestConfig {
11559 int line_number;
11559 const char* const proxy_url; 11560 const char* const proxy_url;
11560 AuthTiming proxy_auth_timing; 11561 AuthTiming proxy_auth_timing;
11561 int proxy_auth_rv; 11562 int first_generate_proxy_token_rv;
11562 const char* const server_url; 11563 const char* const server_url;
11563 AuthTiming server_auth_timing; 11564 AuthTiming server_auth_timing;
11564 int server_auth_rv; 11565 int first_generate_server_token_rv;
11565 int num_auth_rounds; 11566 int num_auth_rounds;
11566 int first_ssl_round; 11567 int first_ssl_round;
11567 TestRound rounds[4]; 11568 TestRound rounds[4];
11568 } test_configs[] = { 11569 } test_configs[] = {
11569 // Non-authenticating HTTP server with a direct connection. 11570 // Non-authenticating HTTP server with a direct connection.
11570 {NULL, 11571 {__LINE__,
11572 nullptr,
11571 AUTH_NONE, 11573 AUTH_NONE,
11572 OK, 11574 OK,
11573 kServer, 11575 kServer,
11574 AUTH_NONE, 11576 AUTH_NONE,
11575 OK, 11577 OK,
11576 1, 11578 1,
11577 kNoSSL, 11579 kNoSSL,
11578 {TestRound(kGet, kSuccess, OK)}}, 11580 {TestRound(kGet, kSuccess, OK)}},
11579 // Authenticating HTTP server with a direct connection. 11581 // Authenticating HTTP server with a direct connection.
11580 {NULL, 11582 {__LINE__,
11583 nullptr,
11581 AUTH_NONE, 11584 AUTH_NONE,
11582 OK, 11585 OK,
11583 kServer, 11586 kServer,
11584 AUTH_SYNC, 11587 AUTH_SYNC,
11585 OK, 11588 OK,
11586 2, 11589 2,
11587 kNoSSL, 11590 kNoSSL,
11588 {TestRound(kGet, kServerChallenge, OK), 11591 {TestRound(kGet, kServerChallenge, OK),
11589 TestRound(kGetAuth, kSuccess, OK)}}, 11592 TestRound(kGetAuth, kSuccess, OK)}},
11590 {NULL, 11593 {__LINE__,
11594 nullptr,
11591 AUTH_NONE, 11595 AUTH_NONE,
11592 OK, 11596 OK,
11593 kServer, 11597 kServer,
11594 AUTH_SYNC, 11598 AUTH_SYNC,
11595 ERR_INVALID_AUTH_CREDENTIALS, 11599 ERR_INVALID_AUTH_CREDENTIALS,
11596 3, 11600 3,
11597 kNoSSL, 11601 kNoSSL,
11598 {TestRound(kGet, kServerChallenge, OK), 11602 {TestRound(kGet, kServerChallenge, OK),
11599 TestRound(kGet, kServerChallenge, OK), 11603 TestRound(kGet, kServerChallenge, OK),
11600 TestRound(kGetAuth, kSuccess, OK)}}, 11604 TestRound(kGetAuth, kSuccess, OK)}},
11601 {NULL, 11605 {__LINE__,
11606 nullptr,
11602 AUTH_NONE, 11607 AUTH_NONE,
11603 OK, 11608 OK,
11604 kServer, 11609 kServer,
11605 AUTH_SYNC, 11610 AUTH_SYNC,
11606 ERR_UNSUPPORTED_AUTH_SCHEME, 11611 ERR_UNSUPPORTED_AUTH_SCHEME,
11607 2, 11612 2,
11608 kNoSSL, 11613 kNoSSL,
11609 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}}, 11614 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11610 {NULL, 11615 {__LINE__,
11616 nullptr,
11611 AUTH_NONE, 11617 AUTH_NONE,
11612 OK, 11618 OK,
11613 kServer, 11619 kServer,
11614 AUTH_SYNC, 11620 AUTH_SYNC,
11615 ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS, 11621 ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS,
11616 2, 11622 2,
11617 kNoSSL, 11623 kNoSSL,
11618 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}}, 11624 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11619 {kProxy, 11625 {__LINE__,
11626 kProxy,
11620 AUTH_SYNC, 11627 AUTH_SYNC,
11621 ERR_FAILED, 11628 ERR_FAILED,
11622 kServer, 11629 kServer,
11623 AUTH_NONE, 11630 AUTH_NONE,
11624 OK, 11631 OK,
11625 2, 11632 2,
11626 kNoSSL, 11633 kNoSSL,
11627 {TestRound(kGetProxy, kProxyChallenge, OK), 11634 {TestRound(kGetProxy, kProxyChallenge, OK),
11628 TestRound(kGetProxy, kFailure, ERR_FAILED)}}, 11635 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11629 {kProxy, 11636 {__LINE__,
11637 kProxy,
11630 AUTH_ASYNC, 11638 AUTH_ASYNC,
11631 ERR_FAILED, 11639 ERR_FAILED,
11632 kServer, 11640 kServer,
11633 AUTH_NONE, 11641 AUTH_NONE,
11634 OK, 11642 OK,
11635 2, 11643 2,
11636 kNoSSL, 11644 kNoSSL,
11637 {TestRound(kGetProxy, kProxyChallenge, OK), 11645 {TestRound(kGetProxy, kProxyChallenge, OK),
11638 TestRound(kGetProxy, kFailure, ERR_FAILED)}}, 11646 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11639 {NULL, 11647 {__LINE__,
11648 nullptr,
11640 AUTH_NONE, 11649 AUTH_NONE,
11641 OK, 11650 OK,
11642 kServer, 11651 kServer,
11643 AUTH_SYNC, 11652 AUTH_SYNC,
11644 ERR_FAILED, 11653 ERR_FAILED,
11645 2, 11654 2,
11646 kNoSSL, 11655 kNoSSL,
11647 {TestRound(kGet, kServerChallenge, OK), 11656 {TestRound(kGet, kServerChallenge, OK),
11648 TestRound(kGet, kFailure, ERR_FAILED)}}, 11657 TestRound(kGet, kFailure, ERR_FAILED)}},
11649 {NULL, 11658 {__LINE__,
11659 nullptr,
11650 AUTH_NONE, 11660 AUTH_NONE,
11651 OK, 11661 OK,
11652 kServer, 11662 kServer,
11653 AUTH_ASYNC, 11663 AUTH_ASYNC,
11654 ERR_FAILED, 11664 ERR_FAILED,
11655 2, 11665 2,
11656 kNoSSL, 11666 kNoSSL,
11657 {TestRound(kGet, kServerChallenge, OK), 11667 {TestRound(kGet, kServerChallenge, OK),
11658 TestRound(kGet, kFailure, ERR_FAILED)}}, 11668 TestRound(kGet, kFailure, ERR_FAILED)}},
11659 {NULL, 11669 {__LINE__,
11670 nullptr,
11660 AUTH_NONE, 11671 AUTH_NONE,
11661 OK, 11672 OK,
11662 kServer, 11673 kServer,
11663 AUTH_ASYNC, 11674 AUTH_ASYNC,
11664 OK, 11675 OK,
11665 2, 11676 2,
11666 kNoSSL, 11677 kNoSSL,
11667 {TestRound(kGet, kServerChallenge, OK), 11678 {TestRound(kGet, kServerChallenge, OK),
11668 TestRound(kGetAuth, kSuccess, OK)}}, 11679 TestRound(kGetAuth, kSuccess, OK)}},
11669 {NULL, 11680 {__LINE__,
11681 nullptr,
11670 AUTH_NONE, 11682 AUTH_NONE,
11671 OK, 11683 OK,
11672 kServer, 11684 kServer,
11673 AUTH_ASYNC, 11685 AUTH_ASYNC,
11674 ERR_INVALID_AUTH_CREDENTIALS, 11686 ERR_INVALID_AUTH_CREDENTIALS,
11675 3, 11687 3,
11676 kNoSSL, 11688 kNoSSL,
11677 {TestRound(kGet, kServerChallenge, OK), 11689 {TestRound(kGet, kServerChallenge, OK),
11678 // The second round uses a HttpAuthHandlerMock that always succeeds. 11690 // The second round uses a HttpAuthHandlerMock that always succeeds.
11679 TestRound(kGet, kServerChallenge, OK), 11691 TestRound(kGet, kServerChallenge, OK),
11680 TestRound(kGetAuth, kSuccess, OK)}}, 11692 TestRound(kGetAuth, kSuccess, OK)}},
11681 // Non-authenticating HTTP server through a non-authenticating proxy. 11693 // Non-authenticating HTTP server through a non-authenticating proxy.
11682 {kProxy, 11694 {__LINE__,
11695 kProxy,
11683 AUTH_NONE, 11696 AUTH_NONE,
11684 OK, 11697 OK,
11685 kServer, 11698 kServer,
11686 AUTH_NONE, 11699 AUTH_NONE,
11687 OK, 11700 OK,
11688 1, 11701 1,
11689 kNoSSL, 11702 kNoSSL,
11690 {TestRound(kGetProxy, kSuccess, OK)}}, 11703 {TestRound(kGetProxy, kSuccess, OK)}},
11691 // Authenticating HTTP server through a non-authenticating proxy. 11704 // Authenticating HTTP server through a non-authenticating proxy.
11692 {kProxy, 11705 {__LINE__,
11706 kProxy,
11693 AUTH_NONE, 11707 AUTH_NONE,
11694 OK, 11708 OK,
11695 kServer, 11709 kServer,
11696 AUTH_SYNC, 11710 AUTH_SYNC,
11697 OK, 11711 OK,
11698 2, 11712 2,
11699 kNoSSL, 11713 kNoSSL,
11700 {TestRound(kGetProxy, kServerChallenge, OK), 11714 {TestRound(kGetProxy, kServerChallenge, OK),
11701 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11715 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11702 {kProxy, 11716 {__LINE__,
11717 kProxy,
11703 AUTH_NONE, 11718 AUTH_NONE,
11704 OK, 11719 OK,
11705 kServer, 11720 kServer,
11706 AUTH_SYNC, 11721 AUTH_SYNC,
11707 ERR_INVALID_AUTH_CREDENTIALS, 11722 ERR_INVALID_AUTH_CREDENTIALS,
11708 3, 11723 3,
11709 kNoSSL, 11724 kNoSSL,
11710 {TestRound(kGetProxy, kServerChallenge, OK), 11725 {TestRound(kGetProxy, kServerChallenge, OK),
11711 TestRound(kGetProxy, kServerChallenge, OK), 11726 TestRound(kGetProxy, kServerChallenge, OK),
11712 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11727 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11713 {kProxy, 11728 {__LINE__,
11729 kProxy,
11714 AUTH_NONE, 11730 AUTH_NONE,
11715 OK, 11731 OK,
11716 kServer, 11732 kServer,
11717 AUTH_ASYNC, 11733 AUTH_ASYNC,
11718 OK, 11734 OK,
11719 2, 11735 2,
11720 kNoSSL, 11736 kNoSSL,
11721 {TestRound(kGetProxy, kServerChallenge, OK), 11737 {TestRound(kGetProxy, kServerChallenge, OK),
11722 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11738 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11723 {kProxy, 11739 {__LINE__,
11740 kProxy,
11724 AUTH_NONE, 11741 AUTH_NONE,
11725 OK, 11742 OK,
11726 kServer, 11743 kServer,
11727 AUTH_ASYNC, 11744 AUTH_ASYNC,
11728 ERR_INVALID_AUTH_CREDENTIALS, 11745 ERR_INVALID_AUTH_CREDENTIALS,
11729 2, 11746 2,
11730 kNoSSL, 11747 kNoSSL,
11731 {TestRound(kGetProxy, kServerChallenge, OK), 11748 {TestRound(kGetProxy, kServerChallenge, OK),
11732 TestRound(kGetProxy, kSuccess, OK)}}, 11749 TestRound(kGetProxy, kSuccess, OK)}},
11733 // Non-authenticating HTTP server through an authenticating proxy. 11750 // Non-authenticating HTTP server through an authenticating proxy.
11734 {kProxy, 11751 {__LINE__,
11752 kProxy,
11735 AUTH_SYNC, 11753 AUTH_SYNC,
11736 OK, 11754 OK,
11737 kServer, 11755 kServer,
11738 AUTH_NONE, 11756 AUTH_NONE,
11739 OK, 11757 OK,
11740 2, 11758 2,
11741 kNoSSL, 11759 kNoSSL,
11742 {TestRound(kGetProxy, kProxyChallenge, OK), 11760 {TestRound(kGetProxy, kProxyChallenge, OK),
11743 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11761 TestRound(kGetProxyAuth, kSuccess, OK)}},
11744 {kProxy, 11762 {__LINE__,
11763 kProxy,
11745 AUTH_SYNC, 11764 AUTH_SYNC,
11746 ERR_INVALID_AUTH_CREDENTIALS, 11765 ERR_INVALID_AUTH_CREDENTIALS,
11747 kServer, 11766 kServer,
11748 AUTH_NONE, 11767 AUTH_NONE,
11749 OK, 11768 OK,
11750 2, 11769 2,
11751 kNoSSL, 11770 kNoSSL,
11752 {TestRound(kGetProxy, kProxyChallenge, OK), 11771 {TestRound(kGetProxy, kProxyChallenge, OK),
11753 TestRound(kGetProxy, kSuccess, OK)}}, 11772 TestRound(kGetProxy, kSuccess, OK)}},
11754 {kProxy, 11773 {__LINE__,
11774 kProxy,
11755 AUTH_ASYNC, 11775 AUTH_ASYNC,
11756 OK, 11776 OK,
11757 kServer, 11777 kServer,
11758 AUTH_NONE, 11778 AUTH_NONE,
11759 OK, 11779 OK,
11760 2, 11780 2,
11761 kNoSSL, 11781 kNoSSL,
11762 {TestRound(kGetProxy, kProxyChallenge, OK), 11782 {TestRound(kGetProxy, kProxyChallenge, OK),
11763 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11783 TestRound(kGetProxyAuth, kSuccess, OK)}},
11764 {kProxy, 11784 {__LINE__,
11785 kProxy,
11765 AUTH_ASYNC, 11786 AUTH_ASYNC,
11766 ERR_INVALID_AUTH_CREDENTIALS, 11787 ERR_INVALID_AUTH_CREDENTIALS,
11767 kServer, 11788 kServer,
11768 AUTH_NONE, 11789 AUTH_NONE,
11769 OK, 11790 OK,
11770 2, 11791 2,
11771 kNoSSL, 11792 kNoSSL,
11772 {TestRound(kGetProxy, kProxyChallenge, OK), 11793 {TestRound(kGetProxy, kProxyChallenge, OK),
11773 TestRound(kGetProxy, kSuccess, OK)}}, 11794 TestRound(kGetProxy, kSuccess, OK)}},
11795 {__LINE__,
11796 kProxy,
11797 AUTH_ASYNC,
11798 ERR_INVALID_AUTH_CREDENTIALS,
11799 kServer,
11800 AUTH_NONE,
11801 OK,
11802 3,
11803 kNoSSL,
11804 {TestRound(kGetProxy, kProxyChallenge, OK),
11805 TestRound(kGetProxy, kProxyChallenge, OK),
11806 TestRound(kGetProxyAuth, kSuccess, OK)}},
11774 // Authenticating HTTP server through an authenticating proxy. 11807 // Authenticating HTTP server through an authenticating proxy.
11775 {kProxy, 11808 {__LINE__,
11809 kProxy,
11776 AUTH_SYNC, 11810 AUTH_SYNC,
11777 OK, 11811 OK,
11778 kServer, 11812 kServer,
11779 AUTH_SYNC, 11813 AUTH_SYNC,
11780 OK, 11814 OK,
11781 3, 11815 3,
11782 kNoSSL, 11816 kNoSSL,
11783 {TestRound(kGetProxy, kProxyChallenge, OK), 11817 {TestRound(kGetProxy, kProxyChallenge, OK),
11784 TestRound(kGetProxyAuth, kServerChallenge, OK), 11818 TestRound(kGetProxyAuth, kServerChallenge, OK),
11785 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11819 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11786 {kProxy, 11820 {__LINE__,
11821 kProxy,
11787 AUTH_SYNC, 11822 AUTH_SYNC,
11788 OK, 11823 OK,
11789 kServer, 11824 kServer,
11790 AUTH_SYNC, 11825 AUTH_SYNC,
11791 ERR_INVALID_AUTH_CREDENTIALS, 11826 ERR_INVALID_AUTH_CREDENTIALS,
11792 3, 11827 3,
11793 kNoSSL, 11828 kNoSSL,
11794 {TestRound(kGetProxy, kProxyChallenge, OK), 11829 {TestRound(kGetProxy, kProxyChallenge, OK),
11795 TestRound(kGetProxyAuth, kServerChallenge, OK), 11830 TestRound(kGetProxyAuth, kServerChallenge, OK),
11796 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11831 TestRound(kGetProxyAuth, kSuccess, OK)}},
11797 {kProxy, 11832 {__LINE__,
11833 kProxy,
11798 AUTH_ASYNC, 11834 AUTH_ASYNC,
11799 OK, 11835 OK,
11800 kServer, 11836 kServer,
11801 AUTH_SYNC, 11837 AUTH_SYNC,
11802 OK, 11838 OK,
11803 3, 11839 3,
11804 kNoSSL, 11840 kNoSSL,
11805 {TestRound(kGetProxy, kProxyChallenge, OK), 11841 {TestRound(kGetProxy, kProxyChallenge, OK),
11806 TestRound(kGetProxyAuth, kServerChallenge, OK), 11842 TestRound(kGetProxyAuth, kServerChallenge, OK),
11807 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11843 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11808 {kProxy, 11844 {__LINE__,
11845 kProxy,
11809 AUTH_ASYNC, 11846 AUTH_ASYNC,
11810 OK, 11847 OK,
11811 kServer, 11848 kServer,
11812 AUTH_SYNC, 11849 AUTH_SYNC,
11813 ERR_INVALID_AUTH_CREDENTIALS, 11850 ERR_INVALID_AUTH_CREDENTIALS,
11814 3, 11851 3,
11815 kNoSSL, 11852 kNoSSL,
11816 {TestRound(kGetProxy, kProxyChallenge, OK), 11853 {TestRound(kGetProxy, kProxyChallenge, OK),
11817 TestRound(kGetProxyAuth, kServerChallenge, OK), 11854 TestRound(kGetProxyAuth, kServerChallenge, OK),
11818 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11855 TestRound(kGetProxyAuth, kSuccess, OK)}},
11819 {kProxy, 11856 {__LINE__,
11857 kProxy,
11820 AUTH_SYNC, 11858 AUTH_SYNC,
11821 OK, 11859 OK,
11822 kServer, 11860 kServer,
11823 AUTH_ASYNC, 11861 AUTH_ASYNC,
11824 OK, 11862 OK,
11825 3, 11863 3,
11826 kNoSSL, 11864 kNoSSL,
11827 {TestRound(kGetProxy, kProxyChallenge, OK), 11865 {TestRound(kGetProxy, kProxyChallenge, OK),
11828 TestRound(kGetProxyAuth, kServerChallenge, OK), 11866 TestRound(kGetProxyAuth, kServerChallenge, OK),
11829 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11867 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11830 {kProxy, 11868 {__LINE__,
11869 kProxy,
11870 AUTH_SYNC,
11871 ERR_INVALID_AUTH_CREDENTIALS,
11872 kServer,
11873 AUTH_ASYNC,
11874 OK,
11875 4,
11876 kNoSSL,
11877 {TestRound(kGetProxy, kProxyChallenge, OK),
11878 TestRound(kGetProxy, kProxyChallenge, OK),
11879 TestRound(kGetProxyAuth, kServerChallenge, OK),
11880 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11881 {__LINE__,
11882 kProxy,
11831 AUTH_SYNC, 11883 AUTH_SYNC,
11832 OK, 11884 OK,
11833 kServer, 11885 kServer,
11834 AUTH_ASYNC, 11886 AUTH_ASYNC,
11835 ERR_INVALID_AUTH_CREDENTIALS, 11887 ERR_INVALID_AUTH_CREDENTIALS,
11836 3, 11888 3,
11837 kNoSSL, 11889 kNoSSL,
11838 {TestRound(kGetProxy, kProxyChallenge, OK), 11890 {TestRound(kGetProxy, kProxyChallenge, OK),
11839 TestRound(kGetProxyAuth, kServerChallenge, OK), 11891 TestRound(kGetProxyAuth, kServerChallenge, OK),
11840 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11892 TestRound(kGetProxyAuth, kSuccess, OK)}},
11841 {kProxy, 11893 {__LINE__,
11894 kProxy,
11842 AUTH_ASYNC, 11895 AUTH_ASYNC,
11843 OK, 11896 OK,
11844 kServer, 11897 kServer,
11845 AUTH_ASYNC, 11898 AUTH_ASYNC,
11846 OK, 11899 OK,
11847 3, 11900 3,
11848 kNoSSL, 11901 kNoSSL,
11849 {TestRound(kGetProxy, kProxyChallenge, OK), 11902 {TestRound(kGetProxy, kProxyChallenge, OK),
11850 TestRound(kGetProxyAuth, kServerChallenge, OK), 11903 TestRound(kGetProxyAuth, kServerChallenge, OK),
11851 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11904 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11852 {kProxy, 11905 {__LINE__,
11906 kProxy,
11853 AUTH_ASYNC, 11907 AUTH_ASYNC,
11854 OK, 11908 OK,
11855 kServer, 11909 kServer,
11856 AUTH_ASYNC, 11910 AUTH_ASYNC,
11857 ERR_INVALID_AUTH_CREDENTIALS, 11911 ERR_INVALID_AUTH_CREDENTIALS,
11858 3, 11912 3,
11859 kNoSSL, 11913 kNoSSL,
11860 {TestRound(kGetProxy, kProxyChallenge, OK), 11914 {TestRound(kGetProxy, kProxyChallenge, OK),
11861 TestRound(kGetProxyAuth, kServerChallenge, OK), 11915 TestRound(kGetProxyAuth, kServerChallenge, OK),
11862 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11916 TestRound(kGetProxyAuth, kSuccess, OK)}},
11917 {__LINE__,
11918 kProxy,
11919 AUTH_ASYNC,
11920 ERR_INVALID_AUTH_CREDENTIALS,
11921 kServer,
11922 AUTH_ASYNC,
11923 ERR_INVALID_AUTH_CREDENTIALS,
11924 4,
11925 kNoSSL,
11926 {TestRound(kGetProxy, kProxyChallenge, OK),
11927 TestRound(kGetProxy, kProxyChallenge, OK),
11928 TestRound(kGetProxyAuth, kServerChallenge, OK),
11929 TestRound(kGetProxyAuth, kSuccess, OK)}},
11863 // Non-authenticating HTTPS server with a direct connection. 11930 // Non-authenticating HTTPS server with a direct connection.
11864 {NULL, 11931 {__LINE__,
11932 nullptr,
11865 AUTH_NONE, 11933 AUTH_NONE,
11866 OK, 11934 OK,
11867 kSecureServer, 11935 kSecureServer,
11868 AUTH_NONE, 11936 AUTH_NONE,
11869 OK, 11937 OK,
11870 1, 11938 1,
11871 0, 11939 0,
11872 {TestRound(kGet, kSuccess, OK)}}, 11940 {TestRound(kGet, kSuccess, OK)}},
11873 // Authenticating HTTPS server with a direct connection. 11941 // Authenticating HTTPS server with a direct connection.
11874 {NULL, 11942 {__LINE__,
11943 nullptr,
11875 AUTH_NONE, 11944 AUTH_NONE,
11876 OK, 11945 OK,
11877 kSecureServer, 11946 kSecureServer,
11878 AUTH_SYNC, 11947 AUTH_SYNC,
11879 OK, 11948 OK,
11880 2, 11949 2,
11881 0, 11950 0,
11882 {TestRound(kGet, kServerChallenge, OK), 11951 {TestRound(kGet, kServerChallenge, OK),
11883 TestRound(kGetAuth, kSuccess, OK)}}, 11952 TestRound(kGetAuth, kSuccess, OK)}},
11884 {NULL, 11953 {__LINE__,
11954 nullptr,
11885 AUTH_NONE, 11955 AUTH_NONE,
11886 OK, 11956 OK,
11887 kSecureServer, 11957 kSecureServer,
11888 AUTH_SYNC, 11958 AUTH_SYNC,
11889 ERR_INVALID_AUTH_CREDENTIALS, 11959 ERR_INVALID_AUTH_CREDENTIALS,
11890 2, 11960 2,
11891 0, 11961 0,
11892 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}}, 11962 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11893 {NULL, 11963 {__LINE__,
11964 nullptr,
11894 AUTH_NONE, 11965 AUTH_NONE,
11895 OK, 11966 OK,
11896 kSecureServer, 11967 kSecureServer,
11897 AUTH_ASYNC, 11968 AUTH_ASYNC,
11898 OK, 11969 OK,
11899 2, 11970 2,
11900 0, 11971 0,
11901 {TestRound(kGet, kServerChallenge, OK), 11972 {TestRound(kGet, kServerChallenge, OK),
11902 TestRound(kGetAuth, kSuccess, OK)}}, 11973 TestRound(kGetAuth, kSuccess, OK)}},
11903 {NULL, 11974 {__LINE__,
11975 nullptr,
11904 AUTH_NONE, 11976 AUTH_NONE,
11905 OK, 11977 OK,
11906 kSecureServer, 11978 kSecureServer,
11907 AUTH_ASYNC, 11979 AUTH_ASYNC,
11908 ERR_INVALID_AUTH_CREDENTIALS, 11980 ERR_INVALID_AUTH_CREDENTIALS,
11909 2, 11981 2,
11910 0, 11982 0,
11911 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}}, 11983 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11912 // Non-authenticating HTTPS server with a non-authenticating proxy. 11984 // Non-authenticating HTTPS server with a non-authenticating proxy.
11913 {kProxy, 11985 {__LINE__,
11986 kProxy,
11914 AUTH_NONE, 11987 AUTH_NONE,
11915 OK, 11988 OK,
11916 kSecureServer, 11989 kSecureServer,
11917 AUTH_NONE, 11990 AUTH_NONE,
11918 OK, 11991 OK,
11919 1, 11992 1,
11920 0, 11993 0,
11921 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 11994 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11922 // Authenticating HTTPS server through a non-authenticating proxy. 11995 // Authenticating HTTPS server through a non-authenticating proxy.
11923 {kProxy, 11996 {__LINE__,
11997 kProxy,
11924 AUTH_NONE, 11998 AUTH_NONE,
11925 OK, 11999 OK,
11926 kSecureServer, 12000 kSecureServer,
11927 AUTH_SYNC, 12001 AUTH_SYNC,
11928 OK, 12002 OK,
11929 2, 12003 2,
11930 0, 12004 0,
11931 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 12005 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11932 TestRound(kGetAuth, kSuccess, OK)}}, 12006 TestRound(kGetAuth, kSuccess, OK)}},
11933 {kProxy, 12007 {__LINE__,
12008 kProxy,
11934 AUTH_NONE, 12009 AUTH_NONE,
11935 OK, 12010 OK,
11936 kSecureServer, 12011 kSecureServer,
11937 AUTH_SYNC, 12012 AUTH_SYNC,
11938 ERR_INVALID_AUTH_CREDENTIALS, 12013 ERR_INVALID_AUTH_CREDENTIALS,
11939 2, 12014 2,
11940 0, 12015 0,
11941 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 12016 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11942 TestRound(kGet, kSuccess, OK)}}, 12017 TestRound(kGet, kSuccess, OK)}},
11943 {kProxy, 12018 {__LINE__,
12019 kProxy,
11944 AUTH_NONE, 12020 AUTH_NONE,
11945 OK, 12021 OK,
11946 kSecureServer, 12022 kSecureServer,
11947 AUTH_ASYNC, 12023 AUTH_ASYNC,
11948 OK, 12024 OK,
11949 2, 12025 2,
11950 0, 12026 0,
11951 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 12027 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11952 TestRound(kGetAuth, kSuccess, OK)}}, 12028 TestRound(kGetAuth, kSuccess, OK)}},
11953 {kProxy, 12029 {__LINE__,
12030 kProxy,
11954 AUTH_NONE, 12031 AUTH_NONE,
11955 OK, 12032 OK,
11956 kSecureServer, 12033 kSecureServer,
11957 AUTH_ASYNC, 12034 AUTH_ASYNC,
11958 ERR_INVALID_AUTH_CREDENTIALS, 12035 ERR_INVALID_AUTH_CREDENTIALS,
11959 2, 12036 2,
11960 0, 12037 0,
11961 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 12038 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11962 TestRound(kGet, kSuccess, OK)}}, 12039 TestRound(kGet, kSuccess, OK)}},
11963 // Non-Authenticating HTTPS server through an authenticating proxy. 12040 // Non-Authenticating HTTPS server through an authenticating proxy.
11964 {kProxy, 12041 {__LINE__,
12042 kProxy,
11965 AUTH_SYNC, 12043 AUTH_SYNC,
11966 OK, 12044 OK,
11967 kSecureServer, 12045 kSecureServer,
11968 AUTH_NONE, 12046 AUTH_NONE,
11969 OK, 12047 OK,
11970 2, 12048 2,
11971 1, 12049 1,
11972 {TestRound(kConnect, kProxyChallenge, OK), 12050 {TestRound(kConnect, kProxyChallenge, OK),
11973 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 12051 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11974 {kProxy, 12052 {__LINE__,
12053 kProxy,
11975 AUTH_SYNC, 12054 AUTH_SYNC,
11976 ERR_INVALID_AUTH_CREDENTIALS, 12055 ERR_INVALID_AUTH_CREDENTIALS,
11977 kSecureServer, 12056 kSecureServer,
11978 AUTH_NONE, 12057 AUTH_NONE,
11979 OK, 12058 OK,
11980 2, 12059 2,
11981 kNoSSL, 12060 kNoSSL,
11982 {TestRound(kConnect, kProxyChallenge, OK), 12061 {TestRound(kConnect, kProxyChallenge, OK),
11983 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 12062 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11984 {kProxy, 12063 {__LINE__,
12064 kProxy,
11985 AUTH_SYNC, 12065 AUTH_SYNC,
11986 ERR_UNSUPPORTED_AUTH_SCHEME, 12066 ERR_UNSUPPORTED_AUTH_SCHEME,
11987 kSecureServer, 12067 kSecureServer,
11988 AUTH_NONE, 12068 AUTH_NONE,
11989 OK, 12069 OK,
11990 2, 12070 2,
11991 kNoSSL, 12071 kNoSSL,
11992 {TestRound(kConnect, kProxyChallenge, OK), 12072 {TestRound(kConnect, kProxyChallenge, OK),
11993 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 12073 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11994 {kProxy, 12074 {__LINE__,
12075 kProxy,
11995 AUTH_SYNC, 12076 AUTH_SYNC,
11996 ERR_UNEXPECTED, 12077 ERR_UNEXPECTED,
11997 kSecureServer, 12078 kSecureServer,
11998 AUTH_NONE, 12079 AUTH_NONE,
11999 OK, 12080 OK,
12000 2, 12081 2,
12001 kNoSSL, 12082 kNoSSL,
12002 {TestRound(kConnect, kProxyChallenge, OK), 12083 {TestRound(kConnect, kProxyChallenge, OK),
12003 TestRound(kConnect, kProxyConnected, ERR_UNEXPECTED)}}, 12084 TestRound(kConnect, kProxyConnected, ERR_UNEXPECTED)}},
12004 {kProxy, 12085 {__LINE__,
12086 kProxy,
12005 AUTH_ASYNC, 12087 AUTH_ASYNC,
12006 OK, 12088 OK,
12007 kSecureServer, 12089 kSecureServer,
12008 AUTH_NONE, 12090 AUTH_NONE,
12009 OK, 12091 OK,
12010 2, 12092 2,
12011 1, 12093 1,
12012 {TestRound(kConnect, kProxyChallenge, OK), 12094 {TestRound(kConnect, kProxyChallenge, OK),
12013 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 12095 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
12014 {kProxy, 12096 {__LINE__,
12097 kProxy,
12015 AUTH_ASYNC, 12098 AUTH_ASYNC,
12016 ERR_INVALID_AUTH_CREDENTIALS, 12099 ERR_INVALID_AUTH_CREDENTIALS,
12017 kSecureServer, 12100 kSecureServer,
12018 AUTH_NONE, 12101 AUTH_NONE,
12019 OK, 12102 OK,
12020 2, 12103 2,
12021 kNoSSL, 12104 kNoSSL,
12022 {TestRound(kConnect, kProxyChallenge, OK), 12105 {TestRound(kConnect, kProxyChallenge, OK),
12023 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 12106 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
12024 // Authenticating HTTPS server through an authenticating proxy. 12107 // Authenticating HTTPS server through an authenticating proxy.
12025 {kProxy, 12108 {__LINE__,
12109 kProxy,
12026 AUTH_SYNC, 12110 AUTH_SYNC,
12027 OK, 12111 OK,
12028 kSecureServer, 12112 kSecureServer,
12029 AUTH_SYNC, 12113 AUTH_SYNC,
12030 OK, 12114 OK,
12031 3, 12115 3,
12032 1, 12116 1,
12033 {TestRound(kConnect, kProxyChallenge, OK), 12117 {TestRound(kConnect, kProxyChallenge, OK),
12034 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12118 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12035 &kServerChallenge), 12119 &kServerChallenge),
12036 TestRound(kGetAuth, kSuccess, OK)}}, 12120 TestRound(kGetAuth, kSuccess, OK)}},
12037 {kProxy, 12121 {__LINE__,
12122 kProxy,
12038 AUTH_SYNC, 12123 AUTH_SYNC,
12039 OK, 12124 OK,
12040 kSecureServer, 12125 kSecureServer,
12041 AUTH_SYNC, 12126 AUTH_SYNC,
12042 ERR_INVALID_AUTH_CREDENTIALS, 12127 ERR_INVALID_AUTH_CREDENTIALS,
12043 3, 12128 3,
12044 1, 12129 1,
12045 {TestRound(kConnect, kProxyChallenge, OK), 12130 {TestRound(kConnect, kProxyChallenge, OK),
12046 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12131 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12047 &kServerChallenge), 12132 &kServerChallenge),
12048 TestRound(kGet, kSuccess, OK)}}, 12133 TestRound(kGet, kSuccess, OK)}},
12049 {kProxy, 12134 {__LINE__,
12135 kProxy,
12050 AUTH_ASYNC, 12136 AUTH_ASYNC,
12051 OK, 12137 OK,
12052 kSecureServer, 12138 kSecureServer,
12053 AUTH_SYNC, 12139 AUTH_SYNC,
12054 OK, 12140 OK,
12055 3, 12141 3,
12056 1, 12142 1,
12057 {TestRound(kConnect, kProxyChallenge, OK), 12143 {TestRound(kConnect, kProxyChallenge, OK),
12058 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12144 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12059 &kServerChallenge), 12145 &kServerChallenge),
12060 TestRound(kGetAuth, kSuccess, OK)}}, 12146 TestRound(kGetAuth, kSuccess, OK)}},
12061 {kProxy, 12147 {__LINE__,
12148 kProxy,
12062 AUTH_ASYNC, 12149 AUTH_ASYNC,
12063 OK, 12150 OK,
12064 kSecureServer, 12151 kSecureServer,
12065 AUTH_SYNC, 12152 AUTH_SYNC,
12066 ERR_INVALID_AUTH_CREDENTIALS, 12153 ERR_INVALID_AUTH_CREDENTIALS,
12067 3, 12154 3,
12068 1, 12155 1,
12069 {TestRound(kConnect, kProxyChallenge, OK), 12156 {TestRound(kConnect, kProxyChallenge, OK),
12070 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12157 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12071 &kServerChallenge), 12158 &kServerChallenge),
12072 TestRound(kGet, kSuccess, OK)}}, 12159 TestRound(kGet, kSuccess, OK)}},
12073 {kProxy, 12160 {__LINE__,
12161 kProxy,
12074 AUTH_SYNC, 12162 AUTH_SYNC,
12075 OK, 12163 OK,
12076 kSecureServer, 12164 kSecureServer,
12077 AUTH_ASYNC, 12165 AUTH_ASYNC,
12078 OK, 12166 OK,
12079 3, 12167 3,
12080 1, 12168 1,
12081 {TestRound(kConnect, kProxyChallenge, OK), 12169 {TestRound(kConnect, kProxyChallenge, OK),
12082 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12170 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12083 &kServerChallenge), 12171 &kServerChallenge),
12084 TestRound(kGetAuth, kSuccess, OK)}}, 12172 TestRound(kGetAuth, kSuccess, OK)}},
12085 {kProxy, 12173 {__LINE__,
12174 kProxy,
12086 AUTH_SYNC, 12175 AUTH_SYNC,
12087 OK, 12176 OK,
12088 kSecureServer, 12177 kSecureServer,
12089 AUTH_ASYNC, 12178 AUTH_ASYNC,
12090 ERR_INVALID_AUTH_CREDENTIALS, 12179 ERR_INVALID_AUTH_CREDENTIALS,
12091 3, 12180 3,
12092 1, 12181 1,
12093 {TestRound(kConnect, kProxyChallenge, OK), 12182 {TestRound(kConnect, kProxyChallenge, OK),
12094 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12183 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12095 &kServerChallenge), 12184 &kServerChallenge),
12096 TestRound(kGet, kSuccess, OK)}}, 12185 TestRound(kGet, kSuccess, OK)}},
12097 {kProxy, 12186 {__LINE__,
12187 kProxy,
12098 AUTH_ASYNC, 12188 AUTH_ASYNC,
12099 OK, 12189 OK,
12100 kSecureServer, 12190 kSecureServer,
12101 AUTH_ASYNC, 12191 AUTH_ASYNC,
12102 OK, 12192 OK,
12103 3, 12193 3,
12104 1, 12194 1,
12105 {TestRound(kConnect, kProxyChallenge, OK), 12195 {TestRound(kConnect, kProxyChallenge, OK),
12106 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12196 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12107 &kServerChallenge), 12197 &kServerChallenge),
12108 TestRound(kGetAuth, kSuccess, OK)}}, 12198 TestRound(kGetAuth, kSuccess, OK)}},
12109 {kProxy, 12199 {__LINE__,
12200 kProxy,
12110 AUTH_ASYNC, 12201 AUTH_ASYNC,
12111 OK, 12202 OK,
12112 kSecureServer, 12203 kSecureServer,
12113 AUTH_ASYNC, 12204 AUTH_ASYNC,
12114 ERR_INVALID_AUTH_CREDENTIALS, 12205 ERR_INVALID_AUTH_CREDENTIALS,
12115 3, 12206 3,
12116 1, 12207 1,
12117 {TestRound(kConnect, kProxyChallenge, OK), 12208 {TestRound(kConnect, kProxyChallenge, OK),
12118 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12209 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12119 &kServerChallenge), 12210 &kServerChallenge),
12120 TestRound(kGet, kSuccess, OK)}}, 12211 TestRound(kGet, kSuccess, OK)}},
12212 {__LINE__,
12213 kProxy,
12214 AUTH_ASYNC,
12215 ERR_INVALID_AUTH_CREDENTIALS,
12216 kSecureServer,
12217 AUTH_ASYNC,
12218 ERR_INVALID_AUTH_CREDENTIALS,
12219 4,
12220 2,
12221 {TestRound(kConnect, kProxyChallenge, OK),
12222 TestRound(kConnect, kProxyChallenge, OK),
12223 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
12224 &kServerChallenge),
12225 TestRound(kGet, kSuccess, OK)}},
12121 }; 12226 };
12122 12227
12123 for (size_t i = 0; i < arraysize(test_configs); ++i) { 12228 for (const auto& test_config : test_configs) {
12124 SCOPED_TRACE(::testing::Message() << "Test config " << i); 12229 SCOPED_TRACE(::testing::Message() << "Test config at "
12230 << test_config.line_number);
12125 HttpAuthHandlerMock::Factory* auth_factory( 12231 HttpAuthHandlerMock::Factory* auth_factory(
12126 new HttpAuthHandlerMock::Factory()); 12232 new HttpAuthHandlerMock::Factory());
12127 session_deps_.http_auth_handler_factory.reset(auth_factory); 12233 session_deps_.http_auth_handler_factory.reset(auth_factory);
12128 SSLInfo empty_ssl_info; 12234 SSLInfo empty_ssl_info;
12129 const TestConfig& test_config = test_configs[i];
12130 12235
12131 // Set up authentication handlers as necessary. 12236 // Set up authentication handlers as necessary.
12132 if (test_config.proxy_auth_timing != AUTH_NONE) { 12237 if (test_config.proxy_auth_timing != AUTH_NONE) {
12133 for (int n = 0; n < 2; n++) { 12238 for (int n = 0; n < 3; n++) {
12134 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); 12239 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock());
12135 std::string auth_challenge = "Mock realm=proxy"; 12240 std::string auth_challenge = "Mock realm=proxy";
12136 GURL origin(test_config.proxy_url); 12241 GURL origin(test_config.proxy_url);
12137 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), 12242 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(),
12138 auth_challenge.end()); 12243 auth_challenge.end());
12139 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_PROXY, 12244 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_PROXY,
12140 empty_ssl_info, origin, 12245 empty_ssl_info, origin,
12141 NetLogWithSource()); 12246 NetLogWithSource());
12142 auth_handler->SetGenerateExpectation( 12247 auth_handler->SetGenerateExpectation(
12143 test_config.proxy_auth_timing == AUTH_ASYNC, 12248 test_config.proxy_auth_timing == AUTH_ASYNC,
12144 test_config.proxy_auth_rv); 12249 n == 0 ? test_config.first_generate_proxy_token_rv : OK);
12145 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); 12250 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY);
12146 } 12251 }
12147 } 12252 }
12148 if (test_config.server_auth_timing != AUTH_NONE) { 12253 if (test_config.server_auth_timing != AUTH_NONE) {
12149 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); 12254 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock());
12150 std::string auth_challenge = "Mock realm=server"; 12255 std::string auth_challenge = "Mock realm=server";
12151 GURL origin(test_config.server_url); 12256 GURL origin(test_config.server_url);
12152 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), 12257 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(),
12153 auth_challenge.end()); 12258 auth_challenge.end());
12154 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, 12259 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
12155 empty_ssl_info, origin, 12260 empty_ssl_info, origin,
12156 NetLogWithSource()); 12261 NetLogWithSource());
12157 auth_handler->SetGenerateExpectation( 12262 auth_handler->SetGenerateExpectation(
12158 test_config.server_auth_timing == AUTH_ASYNC, 12263 test_config.server_auth_timing == AUTH_ASYNC,
12159 test_config.server_auth_rv); 12264 test_config.first_generate_server_token_rv);
12160 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); 12265 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER);
12161 12266
12162 // The second handler always succeeds. It should only be used where there 12267 // The second handler always succeeds. It should only be used where there
12163 // are multiple auth sessions for server auth in the same network 12268 // are multiple auth sessions for server auth in the same network
12164 // transaction using the same auth scheme. 12269 // transaction using the same auth scheme.
12165 std::unique_ptr<HttpAuthHandlerMock> second_handler = 12270 std::unique_ptr<HttpAuthHandlerMock> second_handler =
12166 base::MakeUnique<HttpAuthHandlerMock>(); 12271 base::MakeUnique<HttpAuthHandlerMock>();
12167 second_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, 12272 second_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
12168 empty_ssl_info, origin, 12273 empty_ssl_info, origin,
12169 NetLogWithSource()); 12274 NetLogWithSource());
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
12359 // First round of authentication. 12464 // First round of authentication.
12360 auth_handler->SetGenerateExpectation(false, OK); 12465 auth_handler->SetGenerateExpectation(false, OK);
12361 rv = trans.Start(&request, callback.callback(), NetLogWithSource()); 12466 rv = trans.Start(&request, callback.callback(), NetLogWithSource());
12362 if (rv == ERR_IO_PENDING) 12467 if (rv == ERR_IO_PENDING)
12363 rv = callback.WaitForResult(); 12468 rv = callback.WaitForResult();
12364 EXPECT_THAT(rv, IsOk()); 12469 EXPECT_THAT(rv, IsOk());
12365 response = trans.GetResponseInfo(); 12470 response = trans.GetResponseInfo();
12366 ASSERT_TRUE(response); 12471 ASSERT_TRUE(response);
12367 EXPECT_TRUE(response->auth_challenge); 12472 EXPECT_TRUE(response->auth_challenge);
12368 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); 12473 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup));
12474 EXPECT_EQ(HttpAuthHandlerMock::State::WAIT_FOR_GENERATE_AUTH_TOKEN,
12475 auth_handler->state());
12369 12476
12370 // In between rounds, another request comes in for the same domain. 12477 // In between rounds, another request comes in for the same domain.
12371 // It should not be able to grab the TCP socket that trans has already 12478 // It should not be able to grab the TCP socket that trans has already
12372 // claimed. 12479 // claimed.
12373 HttpNetworkTransaction trans_compete(DEFAULT_PRIORITY, session.get()); 12480 HttpNetworkTransaction trans_compete(DEFAULT_PRIORITY, session.get());
12374 TestCompletionCallback callback_compete; 12481 TestCompletionCallback callback_compete;
12375 rv = trans_compete.Start(&request, callback_compete.callback(), 12482 rv = trans_compete.Start(&request, callback_compete.callback(),
12376 NetLogWithSource()); 12483 NetLogWithSource());
12377 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 12484 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
12378 // callback_compete.WaitForResult at this point would stall forever, 12485 // callback_compete.WaitForResult at this point would stall forever,
12379 // since the HttpNetworkTransaction does not release the request back to 12486 // since the HttpNetworkTransaction does not release the request back to
12380 // the pool until after authentication completes. 12487 // the pool until after authentication completes.
12381 12488
12382 // Second round of authentication. 12489 // Second round of authentication.
12383 auth_handler->SetGenerateExpectation(false, OK); 12490 auth_handler->SetGenerateExpectation(false, OK);
12384 rv = trans.RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback()); 12491 rv = trans.RestartWithAuth(AuthCredentials(kFoo, kBar), callback.callback());
12385 if (rv == ERR_IO_PENDING) 12492 if (rv == ERR_IO_PENDING)
12386 rv = callback.WaitForResult(); 12493 rv = callback.WaitForResult();
12387 EXPECT_THAT(rv, IsOk()); 12494 EXPECT_THAT(rv, IsOk());
12388 response = trans.GetResponseInfo(); 12495 response = trans.GetResponseInfo();
12389 ASSERT_TRUE(response); 12496 ASSERT_TRUE(response);
12390 EXPECT_FALSE(response->auth_challenge); 12497 EXPECT_FALSE(response->auth_challenge);
12391 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); 12498 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup));
12499 EXPECT_EQ(HttpAuthHandlerMock::State::WAIT_FOR_GENERATE_AUTH_TOKEN,
12500 auth_handler->state());
12392 12501
12393 // Third round of authentication. 12502 // Third round of authentication.
12394 auth_handler->SetGenerateExpectation(false, OK); 12503 auth_handler->SetGenerateExpectation(false, OK);
12395 rv = trans.RestartWithAuth(AuthCredentials(), callback.callback()); 12504 rv = trans.RestartWithAuth(AuthCredentials(), callback.callback());
12396 if (rv == ERR_IO_PENDING) 12505 if (rv == ERR_IO_PENDING)
12397 rv = callback.WaitForResult(); 12506 rv = callback.WaitForResult();
12398 EXPECT_THAT(rv, IsOk()); 12507 EXPECT_THAT(rv, IsOk());
12399 response = trans.GetResponseInfo(); 12508 response = trans.GetResponseInfo();
12400 ASSERT_TRUE(response); 12509 ASSERT_TRUE(response);
12401 EXPECT_FALSE(response->auth_challenge); 12510 EXPECT_FALSE(response->auth_challenge);
12402 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); 12511 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup));
12512 EXPECT_EQ(HttpAuthHandlerMock::State::WAIT_FOR_GENERATE_AUTH_TOKEN,
12513 auth_handler->state());
12403 12514
12404 // Fourth round of authentication, which completes successfully. 12515 // Fourth round of authentication, which completes successfully.
12405 auth_handler->SetGenerateExpectation(false, OK); 12516 auth_handler->SetGenerateExpectation(false, OK);
12406 rv = trans.RestartWithAuth(AuthCredentials(), callback.callback()); 12517 rv = trans.RestartWithAuth(AuthCredentials(), callback.callback());
12407 if (rv == ERR_IO_PENDING) 12518 if (rv == ERR_IO_PENDING)
12408 rv = callback.WaitForResult(); 12519 rv = callback.WaitForResult();
12409 EXPECT_THAT(rv, IsOk()); 12520 EXPECT_THAT(rv, IsOk());
12410 response = trans.GetResponseInfo(); 12521 response = trans.GetResponseInfo();
12411 ASSERT_TRUE(response); 12522 ASSERT_TRUE(response);
12412 EXPECT_FALSE(response->auth_challenge); 12523 EXPECT_FALSE(response->auth_challenge);
12413 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup)); 12524 EXPECT_EQ(0, transport_pool->IdleSocketCountInGroup(kSocketGroup));
12414 12525
12526 // In WAIT_FOR_CHALLENGE, although in reality the auth handler is done. A real
12527 // auth handler should transition to a DONE state in concert with the remote
12528 // server. But that's not something we can test here with a mock handler.
12529 EXPECT_EQ(HttpAuthHandlerMock::State::WAIT_FOR_CHALLENGE,
12530 auth_handler->state());
12531
12415 // Read the body since the fourth round was successful. This will also 12532 // Read the body since the fourth round was successful. This will also
12416 // release the socket back to the pool. 12533 // release the socket back to the pool.
12417 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50)); 12534 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(50));
12418 rv = trans.Read(io_buf.get(), io_buf->size(), callback.callback()); 12535 rv = trans.Read(io_buf.get(), io_buf->size(), callback.callback());
12419 if (rv == ERR_IO_PENDING) 12536 if (rv == ERR_IO_PENDING)
12420 rv = callback.WaitForResult(); 12537 rv = callback.WaitForResult();
12421 EXPECT_EQ(3, rv); 12538 EXPECT_EQ(3, rv);
12422 rv = trans.Read(io_buf.get(), io_buf->size(), callback.callback()); 12539 rv = trans.Read(io_buf.get(), io_buf->size(), callback.callback());
12423 EXPECT_EQ(0, rv); 12540 EXPECT_EQ(0, rv);
12424 // There are still 0 idle sockets, since the trans_compete transaction 12541 // There are still 0 idle sockets, since the trans_compete transaction
(...skipping 3971 matching lines...) Expand 10 before | Expand all | Expand 10 after
16396 base::RunLoop().RunUntilIdle(); 16513 base::RunLoop().RunUntilIdle();
16397 16514
16398 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 16515 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
16399 HttpRequestHeaders headers; 16516 HttpRequestHeaders headers;
16400 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 16517 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
16401 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 16518 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
16402 } 16519 }
16403 #endif // !defined(OS_IOS) 16520 #endif // !defined(OS_IOS)
16404 16521
16405 } // namespace net 16522 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_auth_handler_mock.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698