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

Side by Side Diff: components/copresence/rpc/rpc_handler_unittest.cc

Issue 671573003: Adding support for authenticated copresence calls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Registering separately for authenticated calls Created 6 years, 2 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 "components/copresence/rpc/rpc_handler.h" 5 #include "components/copresence/rpc/rpc_handler.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 private: 62 private:
63 std::vector<Directive> added_directives_; 63 std::vector<Directive> added_directives_;
64 64
65 DISALLOW_COPY_AND_ASSIGN(FakeDirectiveHandler); 65 DISALLOW_COPY_AND_ASSIGN(FakeDirectiveHandler);
66 }; 66 };
67 67
68 } // namespace 68 } // namespace
69 69
70 class RpcHandlerTest : public testing::Test, public CopresenceDelegate { 70 class RpcHandlerTest : public testing::Test, public CopresenceDelegate {
71 public: 71 public:
72 RpcHandlerTest() : rpc_handler_(this), status_(SUCCESS), api_key_("API key") { 72 RpcHandlerTest() : rpc_handler_(this), status_(SUCCESS) {
73 rpc_handler_.server_post_callback_ = 73 rpc_handler_.server_post_callback_ =
74 base::Bind(&RpcHandlerTest::CaptureHttpPost, base::Unretained(this)); 74 base::Bind(&RpcHandlerTest::CaptureHttpPost, base::Unretained(this));
75 rpc_handler_.device_id_ = "Device ID";
76 } 75 }
77 76
78 void CaptureHttpPost( 77 // CopresenceDelegate implementation
79 net::URLRequestContextGetter* url_context_getter, 78
80 const std::string& rpc_name, 79 void HandleMessages(const std::string& app_id,
81 scoped_ptr<MessageLite> request_proto, 80 const std::string& subscription_id,
82 const RpcHandler::PostCleanupCallback& response_callback) { 81 const std::vector<Message>& messages) override {
83 rpc_name_ = rpc_name; 82 // app_id is unused for now, pending a server fix.
84 request_proto_ = request_proto.Pass(); 83 messages_by_subscription_[subscription_id] = messages;
85 } 84 }
86 85
87 void CaptureStatus(CopresenceStatus status) { 86 net::URLRequestContextGetter* GetRequestContext() const override {
88 status_ = status; 87 return NULL;
89 } 88 }
90 89
91 inline const ReportRequest* GetReportSent() { 90 const std::string GetPlatformVersionString() const override {
92 return static_cast<ReportRequest*>(request_proto_.get()); 91 return kChromeVersion;
93 } 92 }
94 93
95 const TokenTechnology& GetTokenTechnologyFromReport() { 94 const std::string GetAPIKey(const std::string& app_id) const override {
96 return GetReportSent()->update_signals_request().state().capabilities() 95 return app_id + " API Key";
97 .token_technology(0);
98 } 96 }
99 97
100 const RepeatedPtrField<PublishedMessage>& GetMessagesPublished() { 98 const std::string GetAuthToken() const override {
101 return GetReportSent()->manage_messages_request().message_to_publish(); 99 return auth_token_;
102 } 100 }
103 101
104 const RepeatedPtrField<Subscription>& GetSubscriptionsSent() { 102 WhispernetClient* GetWhispernetClient() override { return NULL; }
105 return GetReportSent()->manage_subscriptions_request().subscription();
106 }
107 103
108 void SetDeviceId(const std::string& device_id) { 104 protected:
109 rpc_handler_.device_id_ = device_id;
110 }
111
112 const std::string& GetDeviceId() {
113 return rpc_handler_.device_id_;
114 }
115
116 void AddInvalidToken(const std::string& token) {
117 rpc_handler_.invalid_audio_token_cache_.Add(token, true);
118 }
119
120 bool TokenIsInvalid(const std::string& token) {
121 return rpc_handler_.invalid_audio_token_cache_.HasKey(token);
122 }
123
124 FakeDirectiveHandler* InstallFakeDirectiveHandler() {
125 FakeDirectiveHandler* handler = new FakeDirectiveHandler;
126 rpc_handler_.directive_handler_.reset(handler);
127 return handler;
128 }
129
130 void InvokeReportResponseHandler(int status_code, 105 void InvokeReportResponseHandler(int status_code,
131 const std::string& response) { 106 const std::string& response) {
132 rpc_handler_.ReportResponseHandler( 107 rpc_handler_.ReportResponseHandler(
133 base::Bind(&RpcHandlerTest::CaptureStatus, base::Unretained(this)), 108 base::Bind(&RpcHandlerTest::CaptureStatus, base::Unretained(this)),
134 NULL, 109 NULL,
135 status_code, 110 status_code,
136 response); 111 response);
137 } 112 }
138 113
139 // CopresenceDelegate implementation 114 FakeDirectiveHandler* InstallFakeDirectiveHandler() {
140 115 FakeDirectiveHandler* handler = new FakeDirectiveHandler;
141 void HandleMessages(const std::string& app_id, 116 rpc_handler_.directive_handler_.reset(handler);
142 const std::string& subscription_id, 117 return handler;
143 const std::vector<Message>& messages) override {
144 // app_id is unused for now, pending a server fix.
145 messages_by_subscription_[subscription_id] = messages;
146 } 118 }
147 119
148 net::URLRequestContextGetter* GetRequestContext() const override { 120 void SetDeviceIdAndAuthToken(const std::string& device_id,
149 return NULL; 121 const std::string& auth_token) {
122 rpc_handler_.device_id_by_auth_token_[auth_token] = device_id;
123 auth_token_ = auth_token;
150 } 124 }
151 125
152 const std::string GetPlatformVersionString() const override { 126 void AddInvalidToken(const std::string& token) {
153 return kChromeVersion; 127 rpc_handler_.invalid_audio_token_cache_.Add(token, true);
154 } 128 }
155 129
156 const std::string GetAPIKey() const override { return api_key_; } 130 bool TokenIsInvalid(const std::string& token) {
131 return rpc_handler_.invalid_audio_token_cache_.HasKey(token);
132 }
157 133
158 WhispernetClient* GetWhispernetClient() override { return NULL; }
159
160 protected:
161 // For rpc_handler_.invalid_audio_token_cache_ 134 // For rpc_handler_.invalid_audio_token_cache_
162 base::MessageLoop message_loop_; 135 base::MessageLoop message_loop_;
163 136
164 RpcHandler rpc_handler_; 137 RpcHandler rpc_handler_;
165 CopresenceStatus status_; 138 CopresenceStatus status_;
166 std::string api_key_;
167 139
168 std::string rpc_name_; 140 std::string rpc_name_;
169 scoped_ptr<MessageLite> request_proto_; 141 std::string api_key_;
142 std::string auth_token_;
143 std::vector<scoped_ptr<MessageLite>> request_protos_;
170 std::map<std::string, std::vector<Message>> messages_by_subscription_; 144 std::map<std::string, std::vector<Message>> messages_by_subscription_;
145
146 private:
147 void CaptureHttpPost(
148 net::URLRequestContextGetter* url_context_getter,
149 const std::string& rpc_name,
150 const std::string& api_key,
151 const std::string& auth_token,
152 scoped_ptr<MessageLite> request_proto,
153 const RpcHandler::PostCleanupCallback& response_callback) {
154 rpc_name_ = rpc_name;
155 api_key_ = api_key;
156 auth_token_ = auth_token;
157 request_protos_.push_back(request_proto.Pass());
158 }
159
160 void CaptureStatus(CopresenceStatus status) {
161 status_ = status;
162 }
171 }; 163 };
172 164
173 TEST_F(RpcHandlerTest, Initialize) { 165 TEST_F(RpcHandlerTest, RegisterDevice) {
174 SetDeviceId(""); 166 EXPECT_FALSE(rpc_handler_.IsRegisteredForToken(""));
175 rpc_handler_.Initialize(RpcHandler::SuccessCallback()); 167 rpc_handler_.RegisterForToken("", RpcHandler::SuccessCallback());
168 EXPECT_EQ(1u, request_protos_.size());
176 RegisterDeviceRequest* registration = 169 RegisterDeviceRequest* registration =
177 static_cast<RegisterDeviceRequest*>(request_proto_.get()); 170 static_cast<RegisterDeviceRequest*>(request_protos_[0].get());
178 Identity identity = registration->device_identifiers().registrant(); 171 Identity identity = registration->device_identifiers().registrant();
179 EXPECT_EQ(CHROME, identity.type()); 172 EXPECT_EQ(CHROME, identity.type());
180 EXPECT_FALSE(identity.chrome_id().empty()); 173 EXPECT_FALSE(identity.chrome_id().empty());
174
175 EXPECT_FALSE(rpc_handler_.IsRegisteredForToken("abc"));
176 rpc_handler_.RegisterForToken("abc", RpcHandler::SuccessCallback());
177 EXPECT_EQ(2u, request_protos_.size());
178 registration = static_cast<RegisterDeviceRequest*>(request_protos_[1].get());
179 EXPECT_FALSE(registration->has_device_identifiers());
181 } 180 }
182 181
182 // TODO(ckehoe): Add a test for RegisterResponseHandler.
183
183 TEST_F(RpcHandlerTest, CreateRequestHeader) { 184 TEST_F(RpcHandlerTest, CreateRequestHeader) {
184 SetDeviceId("CreateRequestHeader Device ID"); 185 SetDeviceIdAndAuthToken("CreateRequestHeader Device ID",
186 "CreateRequestHeader Auth Token");
185 rpc_handler_.SendReportRequest(make_scoped_ptr(new ReportRequest), 187 rpc_handler_.SendReportRequest(make_scoped_ptr(new ReportRequest),
186 "CreateRequestHeader App ID", 188 "CreateRequestHeader App",
189 "CreateRequestHeader Auth Token",
187 StatusCallback()); 190 StatusCallback());
188 EXPECT_EQ(RpcHandler::kReportRequestRpcName, rpc_name_); 191 EXPECT_EQ(RpcHandler::kReportRequestRpcName, rpc_name_);
189 ReportRequest* report = static_cast<ReportRequest*>(request_proto_.get()); 192 EXPECT_EQ("CreateRequestHeader App API Key", api_key_);
193 EXPECT_EQ("CreateRequestHeader Auth Token", auth_token_);
194 ReportRequest* report = static_cast<ReportRequest*>(request_protos_[0].get());
190 EXPECT_EQ(kChromeVersion, 195 EXPECT_EQ(kChromeVersion,
191 report->header().framework_version().version_name()); 196 report->header().framework_version().version_name());
192 EXPECT_EQ("CreateRequestHeader App ID", 197 EXPECT_EQ("CreateRequestHeader App",
193 report->header().client_version().client()); 198 report->header().client_version().client());
194 EXPECT_EQ("CreateRequestHeader Device ID", 199 EXPECT_EQ("CreateRequestHeader Device ID",
195 report->header().registered_device_id()); 200 report->header().registered_device_id());
196 EXPECT_EQ(CHROME_PLATFORM_TYPE, 201 EXPECT_EQ(CHROME_PLATFORM_TYPE,
197 report->header().device_fingerprint().type()); 202 report->header().device_fingerprint().type());
198 } 203 }
199 204
200 TEST_F(RpcHandlerTest, ReportTokens) { 205 TEST_F(RpcHandlerTest, ReportTokens) {
201 std::vector<AudioToken> test_tokens; 206 std::vector<AudioToken> test_tokens;
202 test_tokens.push_back(AudioToken("token 1", false)); 207 test_tokens.push_back(AudioToken("token 1", false));
203 test_tokens.push_back(AudioToken("token 2", true)); 208 test_tokens.push_back(AudioToken("token 2", true));
204 test_tokens.push_back(AudioToken("token 3", false)); 209 test_tokens.push_back(AudioToken("token 3", false));
205 AddInvalidToken("token 2"); 210 AddInvalidToken("token 2");
206 211
212 SetDeviceIdAndAuthToken("ReportTokens Device 1", "");
213 SetDeviceIdAndAuthToken("ReportTokens Device 2", "ReportTokens Auth");
214
207 rpc_handler_.ReportTokens(test_tokens); 215 rpc_handler_.ReportTokens(test_tokens);
208 EXPECT_EQ(RpcHandler::kReportRequestRpcName, rpc_name_); 216 EXPECT_EQ(RpcHandler::kReportRequestRpcName, rpc_name_);
209 ReportRequest* report = static_cast<ReportRequest*>(request_proto_.get()); 217 EXPECT_EQ(" API Key", api_key_);
218 EXPECT_EQ(2u, request_protos_.size());
219 ReportRequest* report = static_cast<ReportRequest*>(request_protos_[0].get());
210 RepeatedPtrField<TokenObservation> tokens_sent = 220 RepeatedPtrField<TokenObservation> tokens_sent =
211 report->update_signals_request().token_observation(); 221 report->update_signals_request().token_observation();
212 ASSERT_EQ(2, tokens_sent.size()); 222 ASSERT_EQ(2, tokens_sent.size());
213 EXPECT_EQ("token 1", tokens_sent.Get(0).token_id()); 223 EXPECT_EQ("token 1", tokens_sent.Get(0).token_id());
214 EXPECT_EQ("token 3", tokens_sent.Get(1).token_id()); 224 EXPECT_EQ("token 3", tokens_sent.Get(1).token_id());
215 } 225 }
216 226
217 TEST_F(RpcHandlerTest, ReportResponseHandler) { 227 TEST_F(RpcHandlerTest, ReportResponseHandler) {
218 // Fail on HTTP status != 200. 228 // Fail on HTTP status != 200.
219 ReportResponse empty_response; 229 ReportResponse empty_response;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 messages_by_subscription_["Subscription 2"][1].payload()); 279 messages_by_subscription_["Subscription 2"][1].payload());
270 280
271 ASSERT_EQ(2U, directive_handler->added_directives().size()); 281 ASSERT_EQ(2U, directive_handler->added_directives().size());
272 EXPECT_EQ("Subscription 1", 282 EXPECT_EQ("Subscription 1",
273 directive_handler->added_directives()[0].subscription_id()); 283 directive_handler->added_directives()[0].subscription_id());
274 EXPECT_EQ("Subscription 2", 284 EXPECT_EQ("Subscription 2",
275 directive_handler->added_directives()[1].subscription_id()); 285 directive_handler->added_directives()[1].subscription_id());
276 } 286 }
277 287
278 } // namespace copresence 288 } // namespace copresence
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698