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

Side by Side Diff: net/test/spawned_test_server/spawner_communicator.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/test/spawned_test_server/spawner_communicator.h" 5 #include "net/test/spawned_test_server/spawner_communicator.h"
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/supports_user_data.h" 10 #include "base/supports_user_data.h"
11 #include "base/test/test_timeouts.h" 11 #include "base/test/test_timeouts.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "build/build_config.h" 14 #include "build/build_config.h"
15 #include "net/base/net_util.h" 15 #include "net/base/net_util.h"
16 #include "net/base/request_priority.h" 16 #include "net/base/request_priority.h"
17 #include "net/base/upload_bytes_element_reader.h" 17 #include "net/base/upload_bytes_element_reader.h"
18 #include "net/base/upload_data_stream.h" 18 #include "net/base/upload_data_stream.h"
19 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
20 #include "net/url_request/url_request_test_util.h" 20 #include "net/url_request/url_request_test_util.h"
21 #include "url/gurl.h" 21 #include "url/gurl.h"
22 22
23 namespace net { 23 namespace net {
24 24
25 namespace { 25 namespace {
26 26
27 GURL GenerateSpawnerCommandURL(const std::string& command, uint16 port) { 27 GURL GenerateSpawnerCommandURL(const std::string& command, uint16 port) {
28 // Always performs HTTP request for sending command to the spawner server. 28 // Always performs HTTP request for sending command to the spawner server.
29 return GURL(base::StringPrintf("%s:%u/%s", "http://127.0.0.1", port, 29 return GURL(base::StringPrintf(
30 command.c_str())); 30 "%s:%u/%s", "http://127.0.0.1", port, command.c_str()));
31 } 31 }
32 32
33 int kBufferSize = 2048; 33 int kBufferSize = 2048;
34 34
35 // A class to hold all data needed to send a command to spawner server. 35 // A class to hold all data needed to send a command to spawner server.
36 class SpawnerRequestData : public base::SupportsUserData::Data { 36 class SpawnerRequestData : public base::SupportsUserData::Data {
37 public: 37 public:
38 SpawnerRequestData(int id, int* result_code, std::string* data_received) 38 SpawnerRequestData(int id, int* result_code, std::string* data_received)
39 : request_id_(id), 39 : request_id_(id),
40 buf_(new IOBuffer(kBufferSize)), 40 buf_(new IOBuffer(kBufferSize)),
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 }; 97 };
98 98
99 } // namespace 99 } // namespace
100 100
101 SpawnerCommunicator::SpawnerCommunicator(uint16 port) 101 SpawnerCommunicator::SpawnerCommunicator(uint16 port)
102 : io_thread_("spawner_communicator"), 102 : io_thread_("spawner_communicator"),
103 event_(false, false), 103 event_(false, false),
104 port_(port), 104 port_(port),
105 next_id_(0), 105 next_id_(0),
106 weak_factory_(this), 106 weak_factory_(this),
107 is_running_(false) {} 107 is_running_(false) {
108 }
108 109
109 SpawnerCommunicator::~SpawnerCommunicator() { 110 SpawnerCommunicator::~SpawnerCommunicator() {
110 DCHECK(!is_running_); 111 DCHECK(!is_running_);
111 } 112 }
112 113
113 void SpawnerCommunicator::WaitForResponse() { 114 void SpawnerCommunicator::WaitForResponse() {
114 DCHECK_NE(base::MessageLoop::current(), io_thread_.message_loop()); 115 DCHECK_NE(base::MessageLoop::current(), io_thread_.message_loop());
115 event_.Wait(); 116 event_.Wait();
116 event_.Reset(); 117 event_.Reset();
117 } 118 }
(...skipping 29 matching lines...) Expand all
147 std::string* data_received) { 148 std::string* data_received) {
148 if (!result_code || !data_received) 149 if (!result_code || !data_received)
149 return; 150 return;
150 // Start the communicator thread to talk to test server spawner. 151 // Start the communicator thread to talk to test server spawner.
151 StartIOThread(); 152 StartIOThread();
152 DCHECK(io_thread_.message_loop()); 153 DCHECK(io_thread_.message_loop());
153 154
154 // Since the method will be blocked until SpawnerCommunicator gets result 155 // Since the method will be blocked until SpawnerCommunicator gets result
155 // from the spawner server or timed-out. It's safe to use base::Unretained 156 // from the spawner server or timed-out. It's safe to use base::Unretained
156 // when using base::Bind. 157 // when using base::Bind.
157 io_thread_.message_loop()->PostTask(FROM_HERE, base::Bind( 158 io_thread_.message_loop()->PostTask(
158 &SpawnerCommunicator::SendCommandAndWaitForResultOnIOThread, 159 FROM_HERE,
159 base::Unretained(this), command, post_data, result_code, data_received)); 160 base::Bind(&SpawnerCommunicator::SendCommandAndWaitForResultOnIOThread,
161 base::Unretained(this),
162 command,
163 post_data,
164 result_code,
165 data_received));
160 WaitForResponse(); 166 WaitForResponse();
161 } 167 }
162 168
163 void SpawnerCommunicator::SendCommandAndWaitForResultOnIOThread( 169 void SpawnerCommunicator::SendCommandAndWaitForResultOnIOThread(
164 const std::string& command, 170 const std::string& command,
165 const std::string& post_data, 171 const std::string& post_data,
166 int* result_code, 172 int* result_code,
167 std::string* data_received) { 173 std::string* data_received) {
168 base::MessageLoop* loop = io_thread_.message_loop(); 174 base::MessageLoop* loop = io_thread_.message_loop();
169 DCHECK(loop); 175 DCHECK(loop);
170 DCHECK_EQ(base::MessageLoop::current(), loop); 176 DCHECK_EQ(base::MessageLoop::current(), loop);
171 177
172 // Prepare the URLRequest for sending the command. 178 // Prepare the URLRequest for sending the command.
173 DCHECK(!cur_request_.get()); 179 DCHECK(!cur_request_.get());
174 context_.reset(new TestURLRequestContext); 180 context_.reset(new TestURLRequestContext);
175 cur_request_ = context_->CreateRequest( 181 cur_request_ = context_->CreateRequest(
176 GenerateSpawnerCommandURL(command, port_), DEFAULT_PRIORITY, this, NULL); 182 GenerateSpawnerCommandURL(command, port_), DEFAULT_PRIORITY, this, NULL);
177 DCHECK(cur_request_); 183 DCHECK(cur_request_);
178 int current_request_id = ++next_id_; 184 int current_request_id = ++next_id_;
179 SpawnerRequestData* data = new SpawnerRequestData(current_request_id, 185 SpawnerRequestData* data =
180 result_code, 186 new SpawnerRequestData(current_request_id, result_code, data_received);
181 data_received);
182 DCHECK(data); 187 DCHECK(data);
183 cur_request_->SetUserData(this, data); 188 cur_request_->SetUserData(this, data);
184 189
185 if (post_data.empty()) { 190 if (post_data.empty()) {
186 cur_request_->set_method("GET"); 191 cur_request_->set_method("GET");
187 } else { 192 } else {
188 cur_request_->set_method("POST"); 193 cur_request_->set_method("POST");
189 scoped_ptr<UploadElementReader> reader( 194 scoped_ptr<UploadElementReader> reader(
190 UploadOwnedBytesElementReader::CreateWithString(post_data)); 195 UploadOwnedBytesElementReader::CreateWithString(post_data));
191 cur_request_->set_upload(make_scoped_ptr( 196 cur_request_->set_upload(
192 UploadDataStream::CreateWithReader(reader.Pass(), 0))); 197 make_scoped_ptr(UploadDataStream::CreateWithReader(reader.Pass(), 0)));
193 net::HttpRequestHeaders headers; 198 net::HttpRequestHeaders headers;
194 headers.SetHeader(net::HttpRequestHeaders::kContentType, 199 headers.SetHeader(net::HttpRequestHeaders::kContentType,
195 "application/json"); 200 "application/json");
196 cur_request_->SetExtraRequestHeaders(headers); 201 cur_request_->SetExtraRequestHeaders(headers);
197 } 202 }
198 203
199 // Post a task to timeout this request if it takes too long. 204 // Post a task to timeout this request if it takes too long.
200 base::MessageLoop::current()->PostDelayedTask( 205 base::MessageLoop::current()->PostDelayedTask(
201 FROM_HERE, 206 FROM_HERE,
202 base::Bind(&SpawnerCommunicator::OnTimeout, 207 base::Bind(&SpawnerCommunicator::OnTimeout,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 } 328 }
324 } 329 }
325 330
326 bool SpawnerCommunicator::StartServer(const std::string& arguments, 331 bool SpawnerCommunicator::StartServer(const std::string& arguments,
327 uint16* port) { 332 uint16* port) {
328 *port = 0; 333 *port = 0;
329 // Send the start command to spawner server to start the Python test server 334 // Send the start command to spawner server to start the Python test server
330 // on remote machine. 335 // on remote machine.
331 std::string server_return_data; 336 std::string server_return_data;
332 int result_code; 337 int result_code;
333 SendCommandAndWaitForResult("start", arguments, &result_code, 338 SendCommandAndWaitForResult(
334 &server_return_data); 339 "start", arguments, &result_code, &server_return_data);
335 if (OK != result_code || server_return_data.empty()) 340 if (OK != result_code || server_return_data.empty())
336 return false; 341 return false;
337 342
338 // Check whether the data returned from spawner server is JSON-formatted. 343 // Check whether the data returned from spawner server is JSON-formatted.
339 scoped_ptr<base::Value> value(base::JSONReader::Read(server_return_data)); 344 scoped_ptr<base::Value> value(base::JSONReader::Read(server_return_data));
340 if (!value.get() || !value->IsType(base::Value::TYPE_DICTIONARY)) { 345 if (!value.get() || !value->IsType(base::Value::TYPE_DICTIONARY)) {
341 LOG(ERROR) << "Invalid server data: " << server_return_data.c_str(); 346 LOG(ERROR) << "Invalid server data: " << server_return_data.c_str();
342 return false; 347 return false;
343 } 348 }
344 349
(...skipping 26 matching lines...) Expand all
371 std::string server_return_data; 376 std::string server_return_data;
372 int result_code; 377 int result_code;
373 SendCommandAndWaitForResult("kill", "", &result_code, &server_return_data); 378 SendCommandAndWaitForResult("kill", "", &result_code, &server_return_data);
374 Shutdown(); 379 Shutdown();
375 if (OK != result_code || server_return_data != "killed") 380 if (OK != result_code || server_return_data != "killed")
376 return false; 381 return false;
377 return true; 382 return true;
378 } 383 }
379 384
380 } // namespace net 385 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698