• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/base/cert_verifier.h"
6 #include "net/base/mock_host_resolver.h"
7 #include "net/base/net_log.h"
8 #include "net/base/ssl_config_service_defaults.h"
9 #include "net/http/http_network_layer.h"
10 #include "net/http/http_network_session.h"
11 #include "net/http/http_transaction_unittest.h"
12 #include "net/proxy/proxy_service.h"
13 #include "net/socket/socket_test_util.h"
14 #include "net/spdy/spdy_session_pool.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/platform_test.h"
17 
18 namespace net {
19 
20 namespace {
21 
22 class HttpNetworkLayerTest : public PlatformTest {
23  protected:
HttpNetworkLayerTest()24   HttpNetworkLayerTest()
25       : proxy_service_(ProxyService::CreateDirect()),
26         ssl_config_service_(new SSLConfigServiceDefaults) {
27     HttpNetworkSession::Params session_params;
28     session_params.client_socket_factory = &mock_socket_factory_;
29     session_params.host_resolver = &host_resolver_;
30     session_params.cert_verifier = &cert_verifier_;
31     session_params.proxy_service = proxy_service_;
32     session_params.ssl_config_service = ssl_config_service_;
33     network_session_ = new HttpNetworkSession(session_params);
34     factory_.reset(new HttpNetworkLayer(network_session_));
35   }
36 
37   MockClientSocketFactory mock_socket_factory_;
38   MockHostResolver host_resolver_;
39   CertVerifier cert_verifier_;
40   const scoped_refptr<ProxyService> proxy_service_;
41   const scoped_refptr<SSLConfigService> ssl_config_service_;
42   scoped_refptr<HttpNetworkSession> network_session_;
43   scoped_ptr<HttpNetworkLayer> factory_;
44 };
45 
TEST_F(HttpNetworkLayerTest,CreateAndDestroy)46 TEST_F(HttpNetworkLayerTest, CreateAndDestroy) {
47   scoped_ptr<HttpTransaction> trans;
48   int rv = factory_->CreateTransaction(&trans);
49   EXPECT_EQ(OK, rv);
50   EXPECT_TRUE(trans.get() != NULL);
51 }
52 
TEST_F(HttpNetworkLayerTest,Suspend)53 TEST_F(HttpNetworkLayerTest, Suspend) {
54   scoped_ptr<HttpTransaction> trans;
55   int rv = factory_->CreateTransaction(&trans);
56   EXPECT_EQ(OK, rv);
57 
58   trans.reset();
59 
60   factory_->Suspend(true);
61 
62   rv = factory_->CreateTransaction(&trans);
63   EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, rv);
64 
65   ASSERT_TRUE(trans == NULL);
66 
67   factory_->Suspend(false);
68 
69   rv = factory_->CreateTransaction(&trans);
70   EXPECT_EQ(OK, rv);
71 }
72 
TEST_F(HttpNetworkLayerTest,GET)73 TEST_F(HttpNetworkLayerTest, GET) {
74   MockRead data_reads[] = {
75     MockRead("HTTP/1.0 200 OK\r\n\r\n"),
76     MockRead("hello world"),
77     MockRead(false, OK),
78   };
79   MockWrite data_writes[] = {
80     MockWrite("GET / HTTP/1.1\r\n"
81                    "Host: www.google.com\r\n"
82                    "Connection: keep-alive\r\n"
83                    "User-Agent: Foo/1.0\r\n\r\n"),
84   };
85   StaticSocketDataProvider data(data_reads, arraysize(data_reads),
86                                      data_writes, arraysize(data_writes));
87   mock_socket_factory_.AddSocketDataProvider(&data);
88 
89   TestCompletionCallback callback;
90 
91   HttpRequestInfo request_info;
92   request_info.url = GURL("http://www.google.com/");
93   request_info.method = "GET";
94   request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent,
95                                        "Foo/1.0");
96   request_info.load_flags = LOAD_NORMAL;
97 
98   scoped_ptr<HttpTransaction> trans;
99   int rv = factory_->CreateTransaction(&trans);
100   EXPECT_EQ(OK, rv);
101 
102   rv = trans->Start(&request_info, &callback, BoundNetLog());
103   if (rv == ERR_IO_PENDING)
104     rv = callback.WaitForResult();
105   ASSERT_EQ(OK, rv);
106 
107   std::string contents;
108   rv = ReadTransaction(trans.get(), &contents);
109   EXPECT_EQ(OK, rv);
110   EXPECT_EQ("hello world", contents);
111 }
112 
113 }  // namespace
114 
115 }  // namespace net
116