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

Side by Side Diff: sync/test/fake_server/fake_server_http_post_provider.cc

Issue 267723012: Use FakeServer-based invalidations for Sync tests (try #2) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "sync/test/fake_server/fake_server_http_post_provider.h" 5 #include "sync/test/fake_server/fake_server_http_post_provider.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h"
10 #include "base/location.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/sequenced_task_runner.h"
13 #include "base/synchronization/waitable_event.h"
9 #include "sync/test/fake_server/fake_server.h" 14 #include "sync/test/fake_server/fake_server.h"
10 15
11 using syncer::HttpPostProviderInterface; 16 using syncer::HttpPostProviderInterface;
12 17
13 namespace fake_server { 18 namespace fake_server {
14 19
15 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( 20 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory(
16 FakeServer* fake_server) : fake_server_(fake_server) { } 21 FakeServer* fake_server,
22 scoped_refptr<base::SequencedTaskRunner> task_runner)
23 : fake_server_(fake_server), task_runner_(task_runner) { }
17 24
18 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } 25 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { }
19 26
20 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } 27 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { }
21 28
22 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { 29 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() {
23 FakeServerHttpPostProvider* http = 30 FakeServerHttpPostProvider* http =
24 new FakeServerHttpPostProvider(fake_server_); 31 new FakeServerHttpPostProvider(fake_server_, task_runner_);
25 http->AddRef(); 32 http->AddRef();
26 return http; 33 return http;
27 } 34 }
28 35
29 void FakeServerHttpPostProviderFactory::Destroy( 36 void FakeServerHttpPostProviderFactory::Destroy(
30 HttpPostProviderInterface* http) { 37 HttpPostProviderInterface* http) {
31 static_cast<FakeServerHttpPostProvider*>(http)->Release(); 38 static_cast<FakeServerHttpPostProvider*>(http)->Release();
32 } 39 }
33 40
34 FakeServerHttpPostProvider::FakeServerHttpPostProvider( 41 FakeServerHttpPostProvider::FakeServerHttpPostProvider(
35 FakeServer* fake_server) : fake_server_(fake_server) { } 42 FakeServer* fake_server,
43 scoped_refptr<base::SequencedTaskRunner> task_runner)
44 : fake_server_(fake_server),
45 task_runner_(task_runner),
46 post_complete_(false, false) { }
36 47
37 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } 48 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { }
38 49
39 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { 50 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) {
40 // TODO(pvalenzuela): Add assertions on this value. 51 // TODO(pvalenzuela): Add assertions on this value.
41 extra_request_headers_.assign(headers); 52 extra_request_headers_.assign(headers);
42 } 53 }
43 54
44 void FakeServerHttpPostProvider::SetURL(const char* url, int port) { 55 void FakeServerHttpPostProvider::SetURL(const char* url, int port) {
45 // TODO(pvalenzuela): Add assertions on these values. 56 // TODO(pvalenzuela): Add assertions on these values.
46 request_url_.assign(url); 57 request_url_.assign(url);
47 request_port_ = port; 58 request_port_ = port;
48 } 59 }
49 60
50 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, 61 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type,
51 int content_length, 62 int content_length,
52 const char* content) { 63 const char* content) {
53 request_content_type_.assign(content_type); 64 request_content_type_.assign(content_type);
54 request_content_.assign(content, content_length); 65 request_content_.assign(content, content_length);
55 } 66 }
56 67
68 void FakeServerHttpPostProvider::OnPostComplete(int error_code,
69 int response_code,
70 const std::string& response) {
71 post_error_code_ = error_code;
72 post_response_code_ = response_code;
73 response_ = response;
74 post_complete_.Signal();
75 }
76
57 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, 77 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code,
58 int* response_code) { 78 int* response_code) {
59 // This assumes that a POST is being made to /command. 79 // It is assumed that a POST is being made to /command.
60 *error_code = fake_server_->HandleCommand(request_content_, 80 FakeServer::HandleCommandCallback callback = base::Bind(
61 response_code, 81 &FakeServerHttpPostProvider::OnPostComplete, base::Unretained(this));
62 &response_); 82 task_runner_->PostNonNestableTask(FROM_HERE,
63 return (*error_code == 0); 83 base::Bind(&FakeServer::HandleCommand,
84 base::Unretained(fake_server_),
85 base::ConstRef(request_content_),
86 base::ConstRef(callback)));
87 const int kTimeoutSecs = 5;
rlarocque 2014/05/02 20:51:21 Is a timeout really necessary? If there's a bug t
pval...(no longer on Chromium) 2014/05/05 18:33:36 I agree; I can't justify the added complexity. FY
88 bool signaled = post_complete_.TimedWait(
89 base::TimeDelta::FromSeconds(kTimeoutSecs));
90 if (!signaled || *error_code != 0) {
91 return false;
92 }
93
94 *error_code = post_error_code_;
95 *response_code = post_response_code_;
96 return true;
64 } 97 }
65 98
66 int FakeServerHttpPostProvider::GetResponseContentLength() const { 99 int FakeServerHttpPostProvider::GetResponseContentLength() const {
67 return response_.length(); 100 return response_.length();
68 } 101 }
69 102
70 const char* FakeServerHttpPostProvider::GetResponseContent() const { 103 const char* FakeServerHttpPostProvider::GetResponseContent() const {
71 return response_.c_str(); 104 return response_.c_str();
72 } 105 }
73 106
74 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( 107 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue(
75 const std::string& name) const { 108 const std::string& name) const {
76 return std::string(); 109 return std::string();
77 } 110 }
78 111
79 void FakeServerHttpPostProvider::Abort() { 112 void FakeServerHttpPostProvider::Abort() {
80 } 113 }
81 114
82 } // namespace fake_server 115 } // namespace fake_server
OLDNEW
« no previous file with comments | « sync/test/fake_server/fake_server_http_post_provider.h ('k') | sync/test/fake_server/fake_server_network_resources.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698