• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "net/http/http_transaction_unittest.h"
6 
7 #include "base/hash_tables.h"
8 #include "base/message_loop.h"
9 #include "base/string_util.h"
10 #include "net/base/net_errors.h"
11 #include "net/base/load_flags.h"
12 #include "net/disk_cache/disk_cache.h"
13 #include "net/http/http_cache.h"
14 #include "net/http/http_request_info.h"
15 #include "net/http/http_response_info.h"
16 #include "net/http/http_transaction.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 
19 //-----------------------------------------------------------------------------
20 // mock transaction data
21 
22 const MockTransaction kSimpleGET_Transaction = {
23   "http://www.google.com/",
24   "GET",
25   base::Time(),
26   "",
27   net::LOAD_NORMAL,
28   "HTTP/1.1 200 OK",
29   "Cache-Control: max-age=10000\n",
30   base::Time(),
31   "<html><body>Google Blah Blah</body></html>",
32   TEST_MODE_NORMAL,
33   NULL,
34   0
35 };
36 
37 const MockTransaction kSimplePOST_Transaction = {
38   "http://bugdatabase.com/edit",
39   "POST",
40   base::Time(),
41   "",
42   net::LOAD_NORMAL,
43   "HTTP/1.1 200 OK",
44   "",
45   base::Time(),
46   "<html><body>Google Blah Blah</body></html>",
47   TEST_MODE_NORMAL,
48   NULL,
49   0
50 };
51 
52 const MockTransaction kTypicalGET_Transaction = {
53   "http://www.example.com/~foo/bar.html",
54   "GET",
55   base::Time(),
56   "",
57   net::LOAD_NORMAL,
58   "HTTP/1.1 200 OK",
59   "Date: Wed, 28 Nov 2007 09:40:09 GMT\n"
60   "Last-Modified: Wed, 28 Nov 2007 00:40:09 GMT\n",
61   base::Time(),
62   "<html><body>Google Blah Blah</body></html>",
63   TEST_MODE_NORMAL,
64   NULL,
65   0
66 };
67 
68 const MockTransaction kETagGET_Transaction = {
69   "http://www.google.com/foopy",
70   "GET",
71   base::Time(),
72   "",
73   net::LOAD_NORMAL,
74   "HTTP/1.1 200 OK",
75   "Cache-Control: max-age=10000\n"
76   "Etag: foopy\n",
77   base::Time(),
78   "<html><body>Google Blah Blah</body></html>",
79   TEST_MODE_NORMAL,
80   NULL,
81   0
82 };
83 
84 const MockTransaction kRangeGET_Transaction = {
85   "http://www.google.com/",
86   "GET",
87   base::Time(),
88   "Range: 0-100\r\n",
89   net::LOAD_NORMAL,
90   "HTTP/1.1 200 OK",
91   "Cache-Control: max-age=10000\n",
92   base::Time(),
93   "<html><body>Google Blah Blah</body></html>",
94   TEST_MODE_NORMAL,
95   NULL,
96   0
97 };
98 
99 static const MockTransaction* const kBuiltinMockTransactions[] = {
100   &kSimpleGET_Transaction,
101   &kSimplePOST_Transaction,
102   &kTypicalGET_Transaction,
103   &kETagGET_Transaction,
104   &kRangeGET_Transaction
105 };
106 
107 typedef base::hash_map<std::string, const MockTransaction*>
108     MockTransactionMap;
109 static MockTransactionMap mock_transactions;
110 
AddMockTransaction(const MockTransaction * trans)111 void AddMockTransaction(const MockTransaction* trans) {
112   mock_transactions[GURL(trans->url).spec()] = trans;
113 }
114 
RemoveMockTransaction(const MockTransaction * trans)115 void RemoveMockTransaction(const MockTransaction* trans) {
116   mock_transactions.erase(GURL(trans->url).spec());
117 }
118 
FindMockTransaction(const GURL & url)119 const MockTransaction* FindMockTransaction(const GURL& url) {
120   // look for overrides:
121   MockTransactionMap::const_iterator it = mock_transactions.find(url.spec());
122   if (it != mock_transactions.end())
123     return it->second;
124 
125   // look for builtins:
126   for (size_t i = 0; i < arraysize(kBuiltinMockTransactions); ++i) {
127     if (url == GURL(kBuiltinMockTransactions[i]->url))
128       return kBuiltinMockTransactions[i];
129   }
130   return NULL;
131 }
132 
133 
134 //-----------------------------------------------------------------------------
135 
136 // static
137 int TestTransactionConsumer::quit_counter_ = 0;
138 
139 
140 //-----------------------------------------------------------------------------
141 // helpers
142 
ReadTransaction(net::HttpTransaction * trans,std::string * result)143 int ReadTransaction(net::HttpTransaction* trans, std::string* result) {
144   int rv;
145 
146   TestCompletionCallback callback;
147 
148   std::string content;
149   do {
150     scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(256);
151     rv = trans->Read(buf, 256, &callback);
152     if (rv == net::ERR_IO_PENDING)
153       rv = callback.WaitForResult();
154     if (rv > 0) {
155       content.append(buf->data(), rv);
156     } else if (rv < 0) {
157       return rv;
158     }
159   } while (rv > 0);
160 
161   result->swap(content);
162   return net::OK;
163 }
164