- add sources.
[platform/framework/web/crosswalk.git] / src / google_apis / gaia / oauth_request_signer_unittest.cc
1 // Copyright (c) 2011 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 "google_apis/gaia/oauth_request_signer.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "url/gurl.h"
9
10 // This value is used to seed the PRNG at the beginning of a sequence of
11 // operations to produce a repeatable sequence.
12 #define RANDOM_SEED (0x69E3C47D)
13
14 TEST(OAuthRequestSignerTest, Encode) {
15   ASSERT_EQ(OAuthRequestSigner::Encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
16                                        "abcdefghijklmnopqrstuvwxyz"
17                                        "0123456789"
18                                        "-._~"),
19             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
20             "abcdefghijklmnopqrstuvwxyz"
21             "0123456789"
22             "-._~");
23   ASSERT_EQ(OAuthRequestSigner::Encode(
24                 "https://accounts.google.com/OAuthLogin"),
25             "https%3A%2F%2Faccounts.google.com%2FOAuthLogin");
26   ASSERT_EQ(OAuthRequestSigner::Encode("%"), "%25");
27   ASSERT_EQ(OAuthRequestSigner::Encode("%25"), "%2525");
28   ASSERT_EQ(OAuthRequestSigner::Encode(
29                 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
30                 "do eiusmod tempor incididunt ut labore et dolore magna "
31                 "aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
32                 "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis "
33                 "aute irure dolor in reprehenderit in voluptate velit esse "
34                 "cillum dolore eu fugiat nulla pariatur. Excepteur sint "
35                 "occaecat cupidatat non proident, sunt in culpa qui officia "
36                 "deserunt mollit anim id est laborum."),
37             "Lorem%20ipsum%20dolor%20sit%20amet%2C%20consectetur%20"
38             "adipisicing%20elit%2C%20sed%20do%20eiusmod%20tempor%20"
39             "incididunt%20ut%20labore%20et%20dolore%20magna%20aliqua.%20Ut%20"
40             "enim%20ad%20minim%20veniam%2C%20quis%20nostrud%20exercitation%20"
41             "ullamco%20laboris%20nisi%20ut%20aliquip%20ex%20ea%20commodo%20"
42             "consequat.%20Duis%20aute%20irure%20dolor%20in%20reprehenderit%20"
43             "in%20voluptate%20velit%20esse%20cillum%20dolore%20eu%20fugiat%20"
44             "nulla%20pariatur.%20Excepteur%20sint%20occaecat%20cupidatat%20"
45             "non%20proident%2C%20sunt%20in%20culpa%20qui%20officia%20"
46             "deserunt%20mollit%20anim%20id%20est%20laborum.");
47   ASSERT_EQ(OAuthRequestSigner::Encode("!5}&QF~0R-Ecy[?2Cig>6g=;hH!\\Ju4K%UK;"),
48             "%215%7D%26QF~0R-Ecy%5B%3F2Cig%3E6g%3D%3BhH%21%5CJu4K%25UK%3B");
49   ASSERT_EQ(OAuthRequestSigner::Encode("1UgHf(r)SkMRS`fRZ/8PsTcXT0:\\<9I=6{|:"),
50             "1UgHf%28r%29SkMRS%60fRZ%2F8PsTcXT0%3A%5C%3C9I%3D6%7B%7C%3A");
51   ASSERT_EQ(OAuthRequestSigner::Encode("|<XIy1?o`r\"RuGSX#!:MeP&RLZQM@:\\';2X"),
52             "%7C%3CXIy1%3Fo%60r%22RuGSX%23%21%3AMeP%26RLZQM%40%3A%5C%27%3B2X");
53   ASSERT_EQ(OAuthRequestSigner::Encode("#a@A>ZtcQ/yb.~^Q_]daRT?ffK>@A:afWuZL"),
54             "%23a%40A%3EZtcQ%2Fyb.~%5EQ_%5DdaRT%3FffK%3E%40A%3AafWuZL");
55 }
56
57 TEST(OAuthRequestSignerTest, DecodeEncoded) {
58   srand(RANDOM_SEED);
59   static const int kIterations = 500;
60   static const int kLengthLimit = 500;
61   for (int iteration = 0; iteration < kIterations; ++iteration) {
62     std::string text;
63     int length = rand() % kLengthLimit;
64     for (int position = 0; position < length; ++position) {
65       text += static_cast<char>(rand() % 256);
66     }
67     std::string encoded = OAuthRequestSigner::Encode(text);
68     std::string decoded;
69     ASSERT_TRUE(OAuthRequestSigner::Decode(encoded, &decoded));
70     ASSERT_EQ(decoded, text);
71   }
72 }
73
74 TEST(OAuthRequestSignerTest, SignGet1) {
75   GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
76   OAuthRequestSigner::Parameters parameters;
77   parameters["scope"] = "https://accounts.google.com/OAuthLogin";
78   parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
79   parameters["xaouth_display_name"] = "Chromium";
80   parameters["oauth_timestamp"] = "1308152953";
81   std::string signed_text;
82   ASSERT_TRUE(OAuthRequestSigner::SignURL(
83                   request_url,
84                   parameters,
85                   OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
86                   OAuthRequestSigner::GET_METHOD,
87                   "johndoe",  // oauth_consumer_key
88                   "53cR3t",  // consumer secret
89                   "4/VGY0MsQadcmO8VnCv9gnhoEooq1v",  // oauth_token
90                   "c5e0531ff55dfbb4054e", // token secret
91                   &signed_text));
92   ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken"
93             "?oauth_consumer_key=johndoe"
94             "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
95             "&oauth_signature=PFqDTaiyey1UObcvOyI4Ng2HXW0%3D"
96             "&oauth_signature_method=HMAC-SHA1"
97             "&oauth_timestamp=1308152953"
98             "&oauth_token=4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v"
99             "&oauth_version=1.0"
100             "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
101             "&xaouth_display_name=Chromium",
102             signed_text);
103 }
104
105 TEST(OAuthRequestSignerTest, SignGet2) {
106   GURL request_url("https://accounts.google.com/OAuthGetAccessToken");
107   OAuthRequestSigner::Parameters parameters;
108   parameters["oauth_timestamp"] = "1308147831";
109   parameters["oauth_nonce"] = "4d4hZW9DygWQujP2tz06UN";
110   std::string signed_text;
111   ASSERT_TRUE(OAuthRequestSigner::SignURL(
112       request_url,
113       parameters,
114       OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
115       OAuthRequestSigner::GET_METHOD,
116       "anonymous",                       // oauth_consumer_key
117       "anonymous",                       // consumer secret
118       "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
119       std::string(),                     // token secret
120       &signed_text));
121   ASSERT_EQ(signed_text,
122             "https://accounts.google.com/OAuthGetAccessToken"
123             "?oauth_consumer_key=anonymous"
124             "&oauth_nonce=4d4hZW9DygWQujP2tz06UN"
125             "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D"
126             "&oauth_signature_method=HMAC-SHA1"
127             "&oauth_timestamp=1308147831"
128             "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
129             "&oauth_version=1.0");
130 }
131
132 TEST(OAuthRequestSignerTest, ParseAndSignGet1) {
133   GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"
134                    "?scope=https://accounts.google.com/OAuthLogin"
135                    "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
136                    "&xaouth_display_name=Chromium"
137                    "&oauth_timestamp=1308152953");
138   std::string signed_text;
139   ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
140       request_url,
141       OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
142       OAuthRequestSigner::GET_METHOD,
143       "anonymous",                       // oauth_consumer_key
144       "anonymous",                       // consumer secret
145       "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
146       std::string(),                     // token secret
147       &signed_text));
148   ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken"
149             "?oauth_consumer_key=anonymous"
150             "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
151             "&oauth_signature=PH7KP6cP%2BzZ1SJ6WGqBgXwQP9Mc%3D"
152             "&oauth_signature_method=HMAC-SHA1"
153             "&oauth_timestamp=1308152953"
154             "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
155             "&oauth_version=1.0"
156             "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
157             "&xaouth_display_name=Chromium",
158             signed_text);
159 }
160
161 TEST(OAuthRequestSignerTest, ParseAndSignGet2) {
162   GURL request_url("https://accounts.google.com/OAuthGetAccessToken"
163                    "?oauth_timestamp=1308147831"
164                    "&oauth_nonce=4d4hZW9DygWQujP2tz06UN");
165   std::string signed_text;
166   ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
167       request_url,
168       OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
169       OAuthRequestSigner::GET_METHOD,
170       "anonymous",                       // oauth_consumer_key
171       "anonymous",                       // consumer secret
172       "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
173       std::string(),                     // token secret
174       &signed_text));
175   ASSERT_EQ(signed_text,
176             "https://accounts.google.com/OAuthGetAccessToken"
177             "?oauth_consumer_key=anonymous"
178             "&oauth_nonce=4d4hZW9DygWQujP2tz06UN"
179             "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D"
180             "&oauth_signature_method=HMAC-SHA1"
181             "&oauth_timestamp=1308147831"
182             "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
183             "&oauth_version=1.0");
184 }
185
186 TEST(OAuthRequestSignerTest, SignPost1) {
187   GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
188   OAuthRequestSigner::Parameters parameters;
189   parameters["scope"] = "https://accounts.google.com/OAuthLogin";
190   parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
191   parameters["xaouth_display_name"] = "Chromium";
192   parameters["oauth_timestamp"] = "1308152953";
193   std::string signed_text;
194   ASSERT_TRUE(OAuthRequestSigner::SignURL(
195                   request_url,
196                   parameters,
197                   OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
198                   OAuthRequestSigner::POST_METHOD,
199                   "anonymous",  // oauth_consumer_key
200                   "anonymous",  // consumer secret
201                   "4/X8x0r7bHif_VNCLjUMutxGkzo13d",  // oauth_token
202                   "b7120598d47594bd3522", // token secret
203                   &signed_text));
204   ASSERT_EQ("oauth_consumer_key=anonymous"
205             "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
206             "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D"
207             "&oauth_signature_method=HMAC-SHA1"
208             "&oauth_timestamp=1308152953"
209             "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d"
210             "&oauth_version=1.0"
211             "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
212             "&xaouth_display_name=Chromium",
213             signed_text);
214 }
215
216 TEST(OAuthRequestSignerTest, SignPost2) {
217   GURL request_url("https://accounts.google.com/OAuthGetAccessToken");
218   OAuthRequestSigner::Parameters parameters;
219   parameters["oauth_timestamp"] = "1234567890";
220   parameters["oauth_nonce"] = "17171717171717171";
221   std::string signed_text;
222   ASSERT_TRUE(OAuthRequestSigner::SignURL(
223       request_url,
224       parameters,
225       OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
226       OAuthRequestSigner::POST_METHOD,
227       "anonymous",                       // oauth_consumer_key
228       "anonymous",                       // consumer secret
229       "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
230       std::string(),                     // token secret
231       &signed_text));
232   ASSERT_EQ(signed_text,
233             "oauth_consumer_key=anonymous"
234             "&oauth_nonce=17171717171717171"
235             "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D"
236             "&oauth_signature_method=HMAC-SHA1"
237             "&oauth_timestamp=1234567890"
238             "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
239             "&oauth_version=1.0");
240 }
241
242 TEST(OAuthRequestSignerTest, ParseAndSignPost1) {
243   GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"
244                    "?scope=https://accounts.google.com/OAuthLogin"
245                    "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
246                    "&xaouth_display_name=Chromium"
247                    "&oauth_timestamp=1308152953");
248   std::string signed_text;
249   ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
250                   request_url,
251                   OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
252                   OAuthRequestSigner::POST_METHOD,
253                   "anonymous",  // oauth_consumer_key
254                   "anonymous",  // consumer secret
255                   "4/X8x0r7bHif_VNCLjUMutxGkzo13d",  // oauth_token
256                   "b7120598d47594bd3522", // token secret
257                   &signed_text));
258   ASSERT_EQ("oauth_consumer_key=anonymous"
259             "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
260             "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D"
261             "&oauth_signature_method=HMAC-SHA1"
262             "&oauth_timestamp=1308152953"
263             "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d"
264             "&oauth_version=1.0"
265             "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
266             "&xaouth_display_name=Chromium",
267             signed_text);
268 }
269
270 TEST(OAuthRequestSignerTest, ParseAndSignPost2) {
271   GURL request_url("https://accounts.google.com/OAuthGetAccessToken"
272                    "?oauth_timestamp=1234567890"
273                    "&oauth_nonce=17171717171717171");
274   std::string signed_text;
275   ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
276       request_url,
277       OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
278       OAuthRequestSigner::POST_METHOD,
279       "anonymous",                       // oauth_consumer_key
280       "anonymous",                       // consumer secret
281       "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
282       std::string(),                     // token secret
283       &signed_text));
284   ASSERT_EQ(signed_text,
285             "oauth_consumer_key=anonymous"
286             "&oauth_nonce=17171717171717171"
287             "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D"
288             "&oauth_signature_method=HMAC-SHA1"
289             "&oauth_timestamp=1234567890"
290             "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
291             "&oauth_version=1.0");
292 }
293
294 TEST(OAuthRequestSignerTest, SignAuthHeader) {
295   GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
296   OAuthRequestSigner::Parameters parameters;
297   parameters["scope"] = "https://accounts.google.com/OAuthLogin";
298   parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
299   parameters["xaouth_display_name"] = "Chromium";
300   parameters["oauth_timestamp"] = "1308152953";
301   std::string signed_text;
302   ASSERT_TRUE(OAuthRequestSigner::SignAuthHeader(
303                   request_url,
304                   parameters,
305                   OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
306                   OAuthRequestSigner::GET_METHOD,
307                   "johndoe",  // oauth_consumer_key
308                   "53cR3t",  // consumer secret
309                   "4/VGY0MsQadcmO8VnCv9gnhoEooq1v",  // oauth_token
310                   "c5e0531ff55dfbb4054e", // token secret
311                   &signed_text));
312   ASSERT_EQ("OAuth "
313             "oauth_consumer_key=\"johndoe\", "
314             "oauth_nonce=\"2oiE_aHdk5qRTz0L9C8Lq0g\", "
315             "oauth_signature=\"PFqDTaiyey1UObcvOyI4Ng2HXW0%3D\", "
316             "oauth_signature_method=\"HMAC-SHA1\", "
317             "oauth_timestamp=\"1308152953\", "
318             "oauth_token=\"4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v\", "
319             "oauth_version=\"1.0\", "
320             "scope=\"https%3A%2F%2Faccounts.google.com%2FOAuthLogin\", "
321             "xaouth_display_name=\"Chromium\"",
322             signed_text);
323 }