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

Side by Side Diff: chrome_frame/test/test_server_test.cc

Issue 126143005: Remove Chrome Frame code and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync to r244038 Created 6 years, 11 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 | « chrome_frame/test/test_server.cc ('k') | chrome_frame/test/test_with_web_server.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 <windows.h>
6 #include <wininet.h>
7
8 #include "base/basictypes.h"
9 #include "base/bind.h"
10 #include "base/path_service.h"
11 #include "base/strings/stringprintf.h"
12 #include "base/win/scoped_handle.h"
13 #include "chrome_frame/test/test_server.h"
14 #include "net/base/request_priority.h"
15 #include "net/cookies/cookie_monster.h"
16 #include "net/disk_cache/disk_cache.h"
17 #include "net/dns/host_resolver_proc.h"
18 #include "net/http/http_auth_handler_factory.h"
19 #include "net/http/http_cache.h"
20 #include "net/http/http_network_session.h"
21 #include "net/proxy/proxy_service.h"
22 #include "net/url_request/url_request.h"
23 #include "net/url_request/url_request_test_util.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25
26 class TestServerTest: public testing::Test {
27 protected:
28 virtual void SetUp() {
29 PathService::Get(base::DIR_SOURCE_ROOT, &source_path_);
30 source_path_ = source_path_.Append(FILE_PATH_LITERAL("chrome_frame"));
31 }
32 virtual void TearDown() {
33 }
34
35 public:
36 const base::FilePath& source_path() const {
37 return source_path_;
38 }
39
40 protected:
41 base::FilePath source_path_;
42 };
43
44 namespace {
45
46 class ScopedInternet {
47 public:
48 explicit ScopedInternet(HINTERNET handle)
49 : h_(handle) {
50 }
51 ~ScopedInternet() {
52 if (h_) {
53 InternetCloseHandle(h_);
54 }
55 }
56
57 operator HINTERNET() {
58 return h_;
59 }
60
61 protected:
62 HINTERNET h_;
63 };
64
65 class TestURLRequest : public net::URLRequest {
66 public:
67 TestURLRequest(const GURL& url,
68 net::RequestPriority priority,
69 Delegate* delegate,
70 const net::TestURLRequestContext* context)
71 : net::URLRequest(url, priority, delegate, context) {}
72 };
73
74 class UrlTaskChain {
75 public:
76 UrlTaskChain(const std::string& url, UrlTaskChain* next)
77 : url_(url), next_(next) {
78 }
79
80 void Run() {
81 EXPECT_EQ(0, delegate_.response_started_count());
82
83 base::MessageLoopForIO loop;
84
85 net::TestURLRequestContext context;
86 TestURLRequest r(GURL(url_), net::DEFAULT_PRIORITY, &delegate_, &context);
87 r.Start();
88 EXPECT_TRUE(r.is_pending());
89
90 base::MessageLoop::current()->Run();
91
92 EXPECT_EQ(1, delegate_.response_started_count());
93 EXPECT_FALSE(delegate_.received_data_before_response());
94 EXPECT_NE(0, delegate_.bytes_received());
95 }
96
97 UrlTaskChain* next() const {
98 return next_;
99 }
100
101 const std::string& response() const {
102 return delegate_.data_received();
103 }
104
105 protected:
106 std::string url_;
107 net::TestDelegate delegate_;
108 UrlTaskChain* next_;
109 };
110
111 DWORD WINAPI FetchUrl(void* param) {
112 UrlTaskChain* task = reinterpret_cast<UrlTaskChain*>(param);
113 while (task != NULL) {
114 task->Run();
115 task = task->next();
116 }
117
118 return 0;
119 }
120
121 struct QuitMessageHit {
122 explicit QuitMessageHit(base::MessageLoopForUI* loop)
123 : loop_(loop), hit_(false) {}
124
125 base::MessageLoopForUI* loop_;
126 bool hit_;
127 };
128
129 void QuitMessageLoop(QuitMessageHit* msg) {
130 msg->hit_ = true;
131 msg->loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
132 }
133
134 } // end namespace
135
136 TEST_F(TestServerTest, TestServer) {
137 // The web server needs a loop to exist on this thread during construction
138 // the loop must be created before we construct the server.
139 base::MessageLoopForUI loop;
140
141 test_server::SimpleWebServer server(1337);
142 test_server::SimpleWebServer redirected_server(server.host(), 1338);
143 test_server::SimpleResponse person("/person", "Guthrie Govan!");
144 server.AddResponse(&person);
145 test_server::FileResponse file("/file", source_path().Append(
146 FILE_PATH_LITERAL("CFInstance.js")));
147 server.AddResponse(&file);
148 test_server::RedirectResponse redir(
149 "/redir",
150 base::StringPrintf("http://%s:1338/dest",
151 redirected_server.host().c_str()));
152 server.AddResponse(&redir);
153
154 test_server::SimpleResponse dest("/dest", "Destination");
155 redirected_server.AddResponse(&dest);
156
157 // We should never hit this, but it's our way to break out of the test if
158 // things start hanging.
159 QuitMessageHit quit_msg(&loop);
160 loop.PostDelayedTask(FROM_HERE, base::Bind(QuitMessageLoop, &quit_msg),
161 base::TimeDelta::FromSeconds(10));
162
163 UrlTaskChain quit_task(
164 base::StringPrintf("http://%s:1337/quit", server.host().c_str()), NULL);
165 UrlTaskChain fnf_task(
166 base::StringPrintf("http://%s:1337/404", server.host().c_str()),
167 &quit_task);
168 UrlTaskChain person_task(
169 base::StringPrintf("http://%s:1337/person", server.host().c_str()),
170 &fnf_task);
171 UrlTaskChain file_task(
172 base::StringPrintf("http://%s:1337/file", server.host().c_str()),
173 &person_task);
174 UrlTaskChain redir_task(
175 base::StringPrintf("http://%s:1337/redir", server.host().c_str()),
176 &file_task);
177
178 DWORD tid = 0;
179 base::win::ScopedHandle worker(::CreateThread(
180 NULL, 0, FetchUrl, &redir_task, 0, &tid));
181 loop.base::MessageLoop::Run();
182
183 EXPECT_FALSE(quit_msg.hit_);
184 if (!quit_msg.hit_) {
185 EXPECT_EQ(::WaitForSingleObject(worker, 10 * 1000), WAIT_OBJECT_0);
186
187 EXPECT_EQ(person.accessed(), 1);
188 EXPECT_EQ(file.accessed(), 1);
189 EXPECT_EQ(redir.accessed(), 1);
190
191 EXPECT_TRUE(person_task.response().find("Guthrie") != std::string::npos);
192 EXPECT_TRUE(file_task.response().find("function") != std::string::npos);
193 EXPECT_TRUE(redir_task.response().find("Destination") != std::string::npos);
194 } else {
195 ::TerminateThread(worker, ~0);
196 }
197 }
OLDNEW
« no previous file with comments | « chrome_frame/test/test_server.cc ('k') | chrome_frame/test/test_with_web_server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698