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

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

Issue 42052: Add unit tests for NTLM authentication. This requires... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Upload before checkin Created 11 years, 9 months 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/http/http_auth_handler_ntlm.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <math.h> // ceil 5 #include <math.h> // ceil
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "net/base/client_socket_factory.h" 8 #include "net/base/client_socket_factory.h"
9 #include "net/base/test_completion_callback.h" 9 #include "net/base/test_completion_callback.h"
10 #include "net/base/upload_data.h" 10 #include "net/base/upload_data.h"
11 #include "net/http/http_auth_handler_ntlm.h"
11 #include "net/http/http_network_session.h" 12 #include "net/http/http_network_session.h"
12 #include "net/http/http_network_transaction.h" 13 #include "net/http/http_network_transaction.h"
13 #include "net/http/http_transaction_unittest.h" 14 #include "net/http/http_transaction_unittest.h"
14 #include "net/proxy/proxy_config_service_fixed.h" 15 #include "net/proxy/proxy_config_service_fixed.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/platform_test.h" 17 #include "testing/platform_test.h"
17 18
18 //----------------------------------------------------------------------------- 19 //-----------------------------------------------------------------------------
19 20
20 21
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 const int num_rows = static_cast<int>( 289 const int num_rows = static_cast<int>(
289 ceil(static_cast<float>(size) / sizeof_row)); 290 ceil(static_cast<float>(size) / sizeof_row));
290 const int sizeof_data = num_rows * sizeof_row; 291 const int sizeof_data = num_rows * sizeof_row;
291 DCHECK(sizeof_data >= size); 292 DCHECK(sizeof_data >= size);
292 str->reserve(sizeof_data); 293 str->reserve(sizeof_data);
293 294
294 for (int i = 0; i < num_rows; ++i) 295 for (int i = 0; i < num_rows; ++i)
295 str->append(row, sizeof_row); 296 str->append(row, sizeof_row);
296 } 297 }
297 298
299 // Alternative functions that eliminate randomness and dependency on the local
300 // host name so that the generated NTLM messages are reproducible.
301 void MyGenerateRandom1(uint8* output, size_t n) {
302 static const uint8 bytes[] = {
303 0x55, 0x29, 0x66, 0x26, 0x6b, 0x9c, 0x73, 0x54
304 };
305 static size_t current_byte = 0;
306 for (size_t i = 0; i < n; ++i) {
307 output[i] = bytes[current_byte++];
308 current_byte %= arraysize(bytes);
309 }
310 }
311
312 void MyGenerateRandom2(uint8* output, size_t n) {
313 static const uint8 bytes[] = {
314 0x96, 0x79, 0x85, 0xe7, 0x49, 0x93, 0x70, 0xa1,
315 0x4e, 0xe7, 0x87, 0x45, 0x31, 0x5b, 0xd3, 0x1f
316 };
317 static size_t current_byte = 0;
318 for (size_t i = 0; i < n; ++i) {
319 output[i] = bytes[current_byte++];
320 current_byte %= arraysize(bytes);
321 }
322 }
323
324 void MyGetHostName(char* name, size_t namelen) {
325 static const char hostname[] = "WTC-WIN7";
326 if (namelen >= arraysize(hostname)) {
327 memcpy(name, hostname, arraysize(hostname));
328 } else {
329 name[0] = '\0';
330 }
331 }
332
298 //----------------------------------------------------------------------------- 333 //-----------------------------------------------------------------------------
299 334
300 TEST_F(HttpNetworkTransactionTest, Basic) { 335 TEST_F(HttpNetworkTransactionTest, Basic) {
301 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService()); 336 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService());
302 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction( 337 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction(
303 CreateSession(proxy_service.get()), &mock_socket_factory)); 338 CreateSession(proxy_service.get()), &mock_socket_factory));
304 } 339 }
305 340
306 TEST_F(HttpNetworkTransactionTest, SimpleGET) { 341 TEST_F(HttpNetworkTransactionTest, SimpleGET) {
307 MockRead data_reads[] = { 342 MockRead data_reads[] = {
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 EXPECT_EQ(net::ERR_IO_PENDING, rv); 1563 EXPECT_EQ(net::ERR_IO_PENDING, rv);
1529 1564
1530 rv = callback3.WaitForResult(); 1565 rv = callback3.WaitForResult();
1531 EXPECT_EQ(net::OK, rv); 1566 EXPECT_EQ(net::OK, rv);
1532 1567
1533 response = trans->GetResponseInfo(); 1568 response = trans->GetResponseInfo();
1534 EXPECT_TRUE(response->auth_challenge.get() == NULL); 1569 EXPECT_TRUE(response->auth_challenge.get() == NULL);
1535 EXPECT_EQ(100, response->headers->GetContentLength()); 1570 EXPECT_EQ(100, response->headers->GetContentLength());
1536 } 1571 }
1537 1572
1538 // Test NTLM authentication. 1573 // The NTLM authentication unit tests were generated by capturing the HTTP
1539 // TODO(wtc): This test doesn't work because we need to control the 8 random 1574 // requests and responses using Fiddler 2 and inspecting the generated random
1540 // bytes and the "workstation name" for a deterministic expected result. 1575 // bytes in the debugger.
1541 TEST_F(HttpNetworkTransactionTest, DISABLED_NTLMAuth) { 1576
1577 // Enter the correct password and authenticate successfully.
1578 TEST_F(HttpNetworkTransactionTest, NTLMAuth1) {
1579 net::HttpAuthHandlerNTLM::SetGenerateRandomProc(MyGenerateRandom1);
1580 net::HttpAuthHandlerNTLM::SetHostNameProc(MyGetHostName);
1581
1542 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService()); 1582 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService());
1543 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction( 1583 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction(
1544 CreateSession(proxy_service.get()), &mock_socket_factory)); 1584 CreateSession(proxy_service.get()), &mock_socket_factory));
1545 1585
1546 net::HttpRequestInfo request; 1586 net::HttpRequestInfo request;
1547 request.method = "GET"; 1587 request.method = "GET";
1548 request.url = GURL("http://172.22.68.17/kids/login.aspx"); 1588 request.url = GURL("http://172.22.68.17/kids/login.aspx");
1549 request.load_flags = 0; 1589 request.load_flags = 0;
1550 1590
1551 MockWrite data_writes1[] = { 1591 MockWrite data_writes1[] = {
(...skipping 24 matching lines...) Expand all
1576 "Connection: keep-alive\r\n" 1616 "Connection: keep-alive\r\n"
1577 "Authorization: NTLM " 1617 "Authorization: NTLM "
1578 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), 1618 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"),
1579 1619
1580 // After calling trans->RestartWithAuth(), we should send a Type 3 message 1620 // After calling trans->RestartWithAuth(), we should send a Type 3 message
1581 // (the credentials for the origin server). The second request continues 1621 // (the credentials for the origin server). The second request continues
1582 // on the same connection. 1622 // on the same connection.
1583 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" 1623 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1584 "Host: 172.22.68.17\r\n" 1624 "Host: 172.22.68.17\r\n"
1585 "Connection: keep-alive\r\n" 1625 "Connection: keep-alive\r\n"
1586 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAHAAAAAYABgAiA" 1626 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA"
1587 "AAAAAAAABAAAAAGAAYAEAAAAAYABgAWAAAAAAAAAAAAAAABYIIAHQA" 1627 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA"
1588 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAHcAdABjAGgAYQBuAGcALQBjAG" 1628 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBVKW"
1589 "8AcgBwAMertjYHfqUhAAAAAAAAAAAAAAAAAAAAAEP3kddZKtMDMssm" 1629 "Yma5xzVAAAAAAAAAAAAAAAAAAAAACH+gWcm+YsP9Tqb9zCR3WAeZZX"
1590 "KYA6SCllVGUeyoQppQ==\r\n\r\n"), 1630 "ahlhx5I=\r\n\r\n"),
1591 }; 1631 };
1592 1632
1593 MockRead data_reads2[] = { 1633 MockRead data_reads2[] = {
1594 // The origin server responds with a Type 2 message. 1634 // The origin server responds with a Type 2 message.
1595 MockRead("HTTP/1.1 401 Access Denied\r\n"), 1635 MockRead("HTTP/1.1 401 Access Denied\r\n"),
1596 MockRead("WWW-Authenticate: NTLM " 1636 MockRead("WWW-Authenticate: NTLM "
1597 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCTroKF1e/DRcAAAAAAAAAALo" 1637 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCjGpMpPGlYKkAAAAAAAAAALo"
1598 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" 1638 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE"
1599 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" 1639 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA"
1600 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" 1640 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy"
1601 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" 1641 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB"
1602 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" 1642 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw"
1603 "BtAAAAAAA=\r\n"), 1643 "BtAAAAAAA=\r\n"),
1604 MockRead("Content-Length: 42\r\n"), 1644 MockRead("Content-Length: 42\r\n"),
1605 MockRead("Content-Type: text/html\r\n"), 1645 MockRead("Content-Type: text/html\r\n"),
1606 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"), 1646 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"),
1607 MockRead("You are not authorized to view this page\r\n"), 1647 MockRead("You are not authorized to view this page\r\n"),
(...skipping 28 matching lines...) Expand all
1636 EXPECT_FALSE(response == NULL); 1676 EXPECT_FALSE(response == NULL);
1637 1677
1638 // The password prompt info should have been set in response->auth_challenge. 1678 // The password prompt info should have been set in response->auth_challenge.
1639 EXPECT_FALSE(response->auth_challenge.get() == NULL); 1679 EXPECT_FALSE(response->auth_challenge.get() == NULL);
1640 1680
1641 // TODO(eroman): this should really include the effective port (80) 1681 // TODO(eroman): this should really include the effective port (80)
1642 EXPECT_EQ(L"172.22.68.17", response->auth_challenge->host); 1682 EXPECT_EQ(L"172.22.68.17", response->auth_challenge->host);
1643 EXPECT_EQ(L"", response->auth_challenge->realm); 1683 EXPECT_EQ(L"", response->auth_challenge->realm);
1644 EXPECT_EQ(L"ntlm", response->auth_challenge->scheme); 1684 EXPECT_EQ(L"ntlm", response->auth_challenge->scheme);
1645 1685
1646 // Pass a null identity to the first RestartWithAuth.
1647 // TODO(wtc): In the future we may pass the actual identity to the first
1648 // RestartWithAuth.
1649
1650 TestCompletionCallback callback2; 1686 TestCompletionCallback callback2;
1651 1687
1652 rv = trans->RestartWithAuth(L"testing-ntlm", L"testing-ntlm", &callback2); 1688 rv = trans->RestartWithAuth(L"testing-ntlm", L"testing-ntlm", &callback2);
1653 EXPECT_EQ(net::ERR_IO_PENDING, rv); 1689 EXPECT_EQ(net::ERR_IO_PENDING, rv);
1654 1690
1655 rv = callback2.WaitForResult(); 1691 rv = callback2.WaitForResult();
1656 EXPECT_EQ(net::OK, rv); 1692 EXPECT_EQ(net::OK, rv);
1657 1693
1658 response = trans->GetResponseInfo(); 1694 response = trans->GetResponseInfo();
1659 EXPECT_TRUE(response->auth_challenge.get() == NULL); 1695 EXPECT_TRUE(response->auth_challenge.get() == NULL);
1660 EXPECT_EQ(13, response->headers->GetContentLength()); 1696 EXPECT_EQ(13, response->headers->GetContentLength());
1661 } 1697 }
1662 1698
1699 // Enter a wrong password, and then the correct one.
1700 TEST_F(HttpNetworkTransactionTest, NTLMAuth2) {
1701 net::HttpAuthHandlerNTLM::SetGenerateRandomProc(MyGenerateRandom2);
1702 net::HttpAuthHandlerNTLM::SetHostNameProc(MyGetHostName);
1703
1704 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService());
1705 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction(
1706 CreateSession(proxy_service.get()), &mock_socket_factory));
1707
1708 net::HttpRequestInfo request;
1709 request.method = "GET";
1710 request.url = GURL("http://172.22.68.17/kids/login.aspx");
1711 request.load_flags = 0;
1712
1713 MockWrite data_writes1[] = {
1714 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1715 "Host: 172.22.68.17\r\n"
1716 "Connection: keep-alive\r\n\r\n"),
1717 };
1718
1719 MockRead data_reads1[] = {
1720 MockRead("HTTP/1.1 401 Access Denied\r\n"),
1721 // Negotiate and NTLM are often requested together. We only support NTLM.
1722 MockRead("WWW-Authenticate: Negotiate\r\n"),
1723 MockRead("WWW-Authenticate: NTLM\r\n"),
1724 MockRead("Connection: close\r\n"),
1725 MockRead("Content-Length: 42\r\n"),
1726 MockRead("Content-Type: text/html\r\n"),
1727 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"),
1728 // Missing content -- won't matter, as connection will be reset.
1729 MockRead(false, net::ERR_UNEXPECTED),
1730 };
1731
1732 MockWrite data_writes2[] = {
1733 // After automatically restarting with a null identity, this is the
1734 // request we should be issuing -- the final header line contains a Type
1735 // 1 message.
1736 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1737 "Host: 172.22.68.17\r\n"
1738 "Connection: keep-alive\r\n"
1739 "Authorization: NTLM "
1740 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"),
1741
1742 // After calling trans->RestartWithAuth(), we should send a Type 3 message
1743 // (the credentials for the origin server). The second request continues
1744 // on the same connection.
1745 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1746 "Host: 172.22.68.17\r\n"
1747 "Connection: keep-alive\r\n"
1748 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA"
1749 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA"
1750 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwCWeY"
1751 "XnSZNwoQAAAAAAAAAAAAAAAAAAAADLa34/phTTKzNTWdub+uyFleOj"
1752 "4Ww7b7E=\r\n\r\n"),
1753 };
1754
1755 MockRead data_reads2[] = {
1756 // The origin server responds with a Type 2 message.
1757 MockRead("HTTP/1.1 401 Access Denied\r\n"),
1758 MockRead("WWW-Authenticate: NTLM "
1759 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCbVWUZezVGpAAAAAAAAAAALo"
1760 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE"
1761 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA"
1762 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy"
1763 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB"
1764 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw"
1765 "BtAAAAAAA=\r\n"),
1766 MockRead("Content-Length: 42\r\n"),
1767 MockRead("Content-Type: text/html\r\n"),
1768 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"),
1769 MockRead("You are not authorized to view this page\r\n"),
1770
1771 // Wrong password.
1772 MockRead("HTTP/1.1 401 Access Denied\r\n"),
1773 MockRead("WWW-Authenticate: Negotiate\r\n"),
1774 MockRead("WWW-Authenticate: NTLM\r\n"),
1775 MockRead("Connection: close\r\n"),
1776 MockRead("Content-Length: 42\r\n"),
1777 MockRead("Content-Type: text/html\r\n"),
1778 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"),
1779 // Missing content -- won't matter, as connection will be reset.
1780 MockRead(false, net::ERR_UNEXPECTED),
1781 };
1782
1783 MockWrite data_writes3[] = {
1784 // After automatically restarting with a null identity, this is the
1785 // request we should be issuing -- the final header line contains a Type
1786 // 1 message.
1787 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1788 "Host: 172.22.68.17\r\n"
1789 "Connection: keep-alive\r\n"
1790 "Authorization: NTLM "
1791 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"),
1792
1793 // After calling trans->RestartWithAuth(), we should send a Type 3 message
1794 // (the credentials for the origin server). The second request continues
1795 // on the same connection.
1796 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n"
1797 "Host: 172.22.68.17\r\n"
1798 "Connection: keep-alive\r\n"
1799 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA"
1800 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA"
1801 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBO54"
1802 "dFMVvTHwAAAAAAAAAAAAAAAAAAAACS7sT6Uzw7L0L//WUqlIaVWpbI"
1803 "+4MUm7c=\r\n\r\n"),
1804 };
1805
1806 MockRead data_reads3[] = {
1807 // The origin server responds with a Type 2 message.
1808 MockRead("HTTP/1.1 401 Access Denied\r\n"),
1809 MockRead("WWW-Authenticate: NTLM "
1810 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCL24VN8dgOR8AAAAAAAAAALo"
1811 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE"
1812 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA"
1813 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy"
1814 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB"
1815 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw"
1816 "BtAAAAAAA=\r\n"),
1817 MockRead("Content-Length: 42\r\n"),
1818 MockRead("Content-Type: text/html\r\n"),
1819 MockRead("Proxy-Support: Session-Based-Authentication\r\n\r\n"),
1820 MockRead("You are not authorized to view this page\r\n"),
1821
1822 // Lastly we get the desired content.
1823 MockRead("HTTP/1.1 200 OK\r\n"),
1824 MockRead("Content-Type: text/html; charset=utf-8\r\n"),
1825 MockRead("Content-Length: 13\r\n\r\n"),
1826 MockRead("Please Login\r\n"),
1827 MockRead(false, net::OK),
1828 };
1829
1830 MockSocket data1;
1831 data1.reads = data_reads1;
1832 data1.writes = data_writes1;
1833 MockSocket data2;
1834 data2.reads = data_reads2;
1835 data2.writes = data_writes2;
1836 MockSocket data3;
1837 data3.reads = data_reads3;
1838 data3.writes = data_writes3;
1839 mock_sockets[0] = &data1;
1840 mock_sockets[1] = &data2;
1841 mock_sockets[2] = &data3;
1842 mock_sockets[3] = NULL;
1843
1844 TestCompletionCallback callback1;
1845
1846 int rv = trans->Start(&request, &callback1);
1847 EXPECT_EQ(net::ERR_IO_PENDING, rv);
1848
1849 rv = callback1.WaitForResult();
1850 EXPECT_EQ(net::OK, rv);
1851
1852 const net::HttpResponseInfo* response = trans->GetResponseInfo();
1853 EXPECT_FALSE(response == NULL);
1854
1855 // The password prompt info should have been set in response->auth_challenge.
1856 EXPECT_FALSE(response->auth_challenge.get() == NULL);
1857
1858 // TODO(eroman): this should really include the effective port (80)
1859 EXPECT_EQ(L"172.22.68.17", response->auth_challenge->host);
1860 EXPECT_EQ(L"", response->auth_challenge->realm);
1861 EXPECT_EQ(L"ntlm", response->auth_challenge->scheme);
1862
1863 TestCompletionCallback callback2;
1864
1865 // Enter the wrong password.
1866 rv = trans->RestartWithAuth(L"testing-ntlm", L"wrongpassword", &callback2);
1867 EXPECT_EQ(net::ERR_IO_PENDING, rv);
1868
1869 rv = callback2.WaitForResult();
1870 EXPECT_EQ(net::OK, rv);
1871
1872 response = trans->GetResponseInfo();
1873 EXPECT_FALSE(response == NULL);
1874
1875 // The password prompt info should have been set in response->auth_challenge.
1876 EXPECT_FALSE(response->auth_challenge.get() == NULL);
1877
1878 // TODO(eroman): this should really include the effective port (80)
1879 EXPECT_EQ(L"172.22.68.17", response->auth_challenge->host);
1880 EXPECT_EQ(L"", response->auth_challenge->realm);
1881 EXPECT_EQ(L"ntlm", response->auth_challenge->scheme);
1882
1883 TestCompletionCallback callback3;
1884
1885 // Now enter the right password.
1886 rv = trans->RestartWithAuth(L"testing-ntlm", L"testing-ntlm", &callback3);
1887 EXPECT_EQ(net::ERR_IO_PENDING, rv);
1888
1889 rv = callback3.WaitForResult();
1890 EXPECT_EQ(net::OK, rv);
1891
1892 response = trans->GetResponseInfo();
1893 EXPECT_TRUE(response->auth_challenge.get() == NULL);
1894 EXPECT_EQ(13, response->headers->GetContentLength());
1895 }
1896
1663 // Test reading a server response which has only headers, and no body. 1897 // Test reading a server response which has only headers, and no body.
1664 // After some maximum number of bytes is consumed, the transaction should 1898 // After some maximum number of bytes is consumed, the transaction should
1665 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. 1899 // fail with ERR_RESPONSE_HEADERS_TOO_BIG.
1666 TEST_F(HttpNetworkTransactionTest, LargeHeadersNoBody) { 1900 TEST_F(HttpNetworkTransactionTest, LargeHeadersNoBody) {
1667 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService()); 1901 scoped_ptr<net::ProxyService> proxy_service(CreateNullProxyService());
1668 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction( 1902 scoped_ptr<net::HttpTransaction> trans(new net::HttpNetworkTransaction(
1669 CreateSession(proxy_service.get()), &mock_socket_factory)); 1903 CreateSession(proxy_service.get()), &mock_socket_factory));
1670 1904
1671 net::HttpRequestInfo request; 1905 net::HttpRequestInfo request;
1672 request.method = "GET"; 1906 request.method = "GET";
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 2553
2320 rv = callback2.WaitForResult(); 2554 rv = callback2.WaitForResult();
2321 EXPECT_EQ(net::OK, rv); 2555 EXPECT_EQ(net::OK, rv);
2322 2556
2323 response = trans->GetResponseInfo(); 2557 response = trans->GetResponseInfo();
2324 EXPECT_FALSE(response == NULL); 2558 EXPECT_FALSE(response == NULL);
2325 EXPECT_TRUE(response->auth_challenge.get() == NULL); 2559 EXPECT_TRUE(response->auth_challenge.get() == NULL);
2326 EXPECT_EQ(100, response->headers->GetContentLength()); 2560 EXPECT_EQ(100, response->headers->GetContentLength());
2327 } 2561 }
2328 } 2562 }
OLDNEW
« no previous file with comments | « net/http/http_auth_handler_ntlm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698