OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h" | 7 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h" |
8 #include "content/public/test/test_browser_thread.h" | 8 #include "content/public/test/test_browser_thread.h" |
9 #include "google_apis/gaia/fake_oauth2_token_service.h" | 9 #include "google_apis/gaia/fake_oauth2_token_service.h" |
10 #include "google_apis/gaia/google_service_auth_error.h" | 10 #include "google_apis/gaia/google_service_auth_error.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 "}"; | 27 "}"; |
28 | 28 |
29 const char kFailedConfirmResponse[] = "{" | 29 const char kFailedConfirmResponse[] = "{" |
30 " \"success\": false" | 30 " \"success\": false" |
31 "}"; | 31 "}"; |
32 | 32 |
33 const char kFailedConfirmResponseBadJson[] = "[" | 33 const char kFailedConfirmResponseBadJson[] = "[" |
34 " \"success\"" | 34 " \"success\"" |
35 "]"; | 35 "]"; |
36 | 36 |
37 const char kGCDConfirmResponse[] = | |
38 "{" | |
39 " \"kind\": \"clouddevices#registrationTicket\"" | |
40 "}"; | |
41 | |
42 const char kAccountId[] = "account_id"; | 37 const char kAccountId[] = "account_id"; |
43 | 38 |
44 class MockableConfirmCallback { | 39 class MockableConfirmCallback { |
45 public: | 40 public: |
46 MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status)); | 41 MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status)); |
47 | 42 |
48 PrivetConfirmApiCallFlow::ResponseCallback callback() { | 43 PrivetConfirmApiCallFlow::ResponseCallback callback() { |
49 return base::Bind(&MockableConfirmCallback::ConfirmCallback, | 44 return base::Bind(&MockableConfirmCallback::ConfirmCallback, |
50 base::Unretained(this)); | 45 base::Unretained(this)); |
51 } | 46 } |
(...skipping 22 matching lines...) Expand all Loading... |
74 net::TestURLFetcherFactory fetcher_factory_; | 69 net::TestURLFetcherFactory fetcher_factory_; |
75 FakeOAuth2TokenService token_service_; | 70 FakeOAuth2TokenService token_service_; |
76 MockableConfirmCallback callback_; | 71 MockableConfirmCallback callback_; |
77 std::string account_id_; | 72 std::string account_id_; |
78 }; | 73 }; |
79 | 74 |
80 TEST_F(PrivetConfirmApiFlowTest, SuccessOAuth2) { | 75 TEST_F(PrivetConfirmApiFlowTest, SuccessOAuth2) { |
81 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 76 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
82 &token_service_, | 77 &token_service_, |
83 account_id_, | 78 account_id_, |
84 true, | |
85 "SomeToken", | 79 "SomeToken", |
86 callback_.callback()); | 80 callback_.callback()); |
87 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 81 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
88 | 82 |
89 confirm_flow.Start(); | 83 confirm_flow.Start(); |
90 | 84 |
91 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 85 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
92 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 86 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
93 | 87 |
94 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 88 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
(...skipping 15 matching lines...) Expand all Loading... |
110 | 104 |
111 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); | 105 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); |
112 | 106 |
113 fetcher->delegate()->OnURLFetchComplete(fetcher); | 107 fetcher->delegate()->OnURLFetchComplete(fetcher); |
114 } | 108 } |
115 | 109 |
116 TEST_F(PrivetConfirmApiFlowTest, BadToken) { | 110 TEST_F(PrivetConfirmApiFlowTest, BadToken) { |
117 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 111 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
118 &token_service_, | 112 &token_service_, |
119 account_id_, | 113 account_id_, |
120 true, | |
121 "SomeCloudprintToken", | 114 "SomeCloudprintToken", |
122 callback_.callback()); | 115 callback_.callback()); |
123 | 116 |
124 confirm_flow.Start(); | 117 confirm_flow.Start(); |
125 | 118 |
126 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 119 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
127 | 120 |
128 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN)); | 121 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN)); |
129 cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError( | 122 cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError( |
130 GoogleServiceAuthError::USER_NOT_SIGNED_UP)); | 123 GoogleServiceAuthError::USER_NOT_SIGNED_UP)); |
131 } | 124 } |
132 | 125 |
133 TEST_F(PrivetConfirmApiFlowTest, ServerFailure) { | 126 TEST_F(PrivetConfirmApiFlowTest, ServerFailure) { |
134 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 127 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
135 &token_service_, | 128 &token_service_, |
136 account_id_, | 129 account_id_, |
137 true, | |
138 "SomeToken", | 130 "SomeToken", |
139 callback_.callback()); | 131 callback_.callback()); |
140 | 132 |
141 confirm_flow.Start(); | 133 confirm_flow.Start(); |
142 | 134 |
143 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 135 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
144 | 136 |
145 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 137 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
146 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 138 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
147 | 139 |
148 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 140 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
149 fetcher->GetOriginalURL()); | 141 fetcher->GetOriginalURL()); |
150 | 142 |
151 fetcher->SetResponseString(kFailedConfirmResponse); | 143 fetcher->SetResponseString(kFailedConfirmResponse); |
152 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, | 144 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, |
153 net::OK)); | 145 net::OK)); |
154 fetcher->set_response_code(200); | 146 fetcher->set_response_code(200); |
155 | 147 |
156 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER)); | 148 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER)); |
157 | 149 |
158 fetcher->delegate()->OnURLFetchComplete(fetcher); | 150 fetcher->delegate()->OnURLFetchComplete(fetcher); |
159 } | 151 } |
160 | 152 |
161 TEST_F(PrivetConfirmApiFlowTest, BadJson) { | 153 TEST_F(PrivetConfirmApiFlowTest, BadJson) { |
162 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | 154 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), |
163 &token_service_, | 155 &token_service_, |
164 account_id_, | 156 account_id_, |
165 true, | |
166 "SomeToken", | 157 "SomeToken", |
167 callback_.callback()); | 158 callback_.callback()); |
168 | 159 |
169 confirm_flow.Start(); | 160 confirm_flow.Start(); |
170 | 161 |
171 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); | 162 GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests(); |
172 | 163 |
173 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | 164 cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); |
174 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | 165 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); |
175 | 166 |
176 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), | 167 EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"), |
177 fetcher->GetOriginalURL()); | 168 fetcher->GetOriginalURL()); |
178 | 169 |
179 fetcher->SetResponseString(kFailedConfirmResponseBadJson); | 170 fetcher->SetResponseString(kFailedConfirmResponseBadJson); |
180 fetcher->set_status(net::URLRequestStatus( | 171 fetcher->set_status(net::URLRequestStatus( |
181 net::URLRequestStatus::SUCCESS, | 172 net::URLRequestStatus::SUCCESS, |
182 net::OK)); | 173 net::OK)); |
183 fetcher->set_response_code(200); | 174 fetcher->set_response_code(200); |
184 | 175 |
185 EXPECT_CALL(callback_, | 176 EXPECT_CALL(callback_, |
186 ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE)); | 177 ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE)); |
187 | 178 |
188 fetcher->delegate()->OnURLFetchComplete(fetcher); | 179 fetcher->delegate()->OnURLFetchComplete(fetcher); |
189 } | 180 } |
190 | 181 |
191 TEST_F(PrivetConfirmApiFlowTest, SuccessGCD) { | |
192 PrivetConfirmApiCallFlow confirm_flow(request_context_.get(), | |
193 &token_service_, | |
194 account_id_, | |
195 false, | |
196 "SomeGcdToken", | |
197 callback_.callback()); | |
198 GCDBaseApiFlow* gcd_flow = confirm_flow.GetBaseApiFlowForTests(); | |
199 | |
200 confirm_flow.Start(); | |
201 | |
202 gcd_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time()); | |
203 net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); | |
204 | |
205 EXPECT_EQ(GURL("https://www.googleapis.com/clouddevices/v1/" | |
206 "registrationTickets/SomeGcdToken"), | |
207 fetcher->GetOriginalURL()); | |
208 | |
209 EXPECT_EQ("{ \"userEmail\": \"me\" }", fetcher->upload_data()); | |
210 | |
211 net::HttpRequestHeaders headers; | |
212 fetcher->GetExtraRequestHeaders(&headers); | |
213 std::string oauth_header; | |
214 std::string proxy; | |
215 EXPECT_TRUE(headers.GetHeader("Authorization", &oauth_header)); | |
216 EXPECT_EQ("Bearer SomeToken", oauth_header); | |
217 EXPECT_FALSE(headers.GetHeader("X-Cloudprint-Proxy", &proxy)); | |
218 | |
219 fetcher->SetResponseString(kGCDConfirmResponse); | |
220 fetcher->set_status( | |
221 net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK)); | |
222 fetcher->set_response_code(200); | |
223 | |
224 EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS)); | |
225 | |
226 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
227 } | |
228 | |
229 } // namespace | 182 } // namespace |
230 | 183 |
231 } // namespace local_discovery | 184 } // namespace local_discovery |
OLD | NEW |