15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/oauth_request_signer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This value is used to seed the PRNG at the beginning of a sequence of
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// operations to produce a repeatable sequence.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RANDOM_SEED (0x69E3C47D)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, Encode) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       "abcdefghijklmnopqrstuvwxyz"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       "0123456789"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       "-._~"),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "abcdefghijklmnopqrstuvwxyz"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "0123456789"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "-._~");
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode(
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "https://accounts.google.com/OAuthLogin"),
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "https%3A%2F%2Faccounts.google.com%2FOAuthLogin");
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("%"), "%25");
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("%25"), "%2525");
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "do eiusmod tempor incididunt ut labore et dolore magna "
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis "
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "aute irure dolor in reprehenderit in voluptate velit esse "
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "cillum dolore eu fugiat nulla pariatur. Excepteur sint "
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "occaecat cupidatat non proident, sunt in culpa qui officia "
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                "deserunt mollit anim id est laborum."),
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "Lorem%20ipsum%20dolor%20sit%20amet%2C%20consectetur%20"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "adipisicing%20elit%2C%20sed%20do%20eiusmod%20tempor%20"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "incididunt%20ut%20labore%20et%20dolore%20magna%20aliqua.%20Ut%20"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "enim%20ad%20minim%20veniam%2C%20quis%20nostrud%20exercitation%20"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "ullamco%20laboris%20nisi%20ut%20aliquip%20ex%20ea%20commodo%20"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "consequat.%20Duis%20aute%20irure%20dolor%20in%20reprehenderit%20"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "in%20voluptate%20velit%20esse%20cillum%20dolore%20eu%20fugiat%20"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "nulla%20pariatur.%20Excepteur%20sint%20occaecat%20cupidatat%20"
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "non%20proident%2C%20sunt%20in%20culpa%20qui%20officia%20"
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "deserunt%20mollit%20anim%20id%20est%20laborum.");
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("!5}&QF~0R-Ecy[?2Cig>6g=;hH!\\Ju4K%UK;"),
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "%215%7D%26QF~0R-Ecy%5B%3F2Cig%3E6g%3D%3BhH%21%5CJu4K%25UK%3B");
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("1UgHf(r)SkMRS`fRZ/8PsTcXT0:\\<9I=6{|:"),
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "1UgHf%28r%29SkMRS%60fRZ%2F8PsTcXT0%3A%5C%3C9I%3D6%7B%7C%3A");
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("|<XIy1?o`r\"RuGSX#!:MeP&RLZQM@:\\';2X"),
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "%7C%3CXIy1%3Fo%60r%22RuGSX%23%21%3AMeP%26RLZQM%40%3A%5C%27%3B2X");
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(OAuthRequestSigner::Encode("#a@A>ZtcQ/yb.~^Q_]daRT?ffK>@A:afWuZL"),
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "%23a%40A%3EZtcQ%2Fyb.~%5EQ_%5DdaRT%3FffK%3E%40A%3AafWuZL");
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, DecodeEncoded) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  srand(RANDOM_SEED);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kIterations = 500;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kLengthLimit = 500;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int iteration = 0; iteration < kIterations; ++iteration) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string text;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int length = rand() % kLengthLimit;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int position = 0; position < length; ++position) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      text += static_cast<char>(rand() % 256);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string encoded = OAuthRequestSigner::Encode(text);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string decoded;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(OAuthRequestSigner::Decode(encoded, &decoded));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(decoded, text);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignGet1) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OAuthRequestSigner::Parameters parameters;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["scope"] = "https://accounts.google.com/OAuthLogin";
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["xaouth_display_name"] = "Chromium";
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_timestamp"] = "1308152953";
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::SignURL(
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  request_url,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  parameters,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::GET_METHOD,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "johndoe",  // oauth_consumer_key
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "53cR3t",  // consumer secret
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "4/VGY0MsQadcmO8VnCv9gnhoEooq1v",  // oauth_token
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "c5e0531ff55dfbb4054e", // token secret
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  &signed_text));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken"
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "?oauth_consumer_key=johndoe"
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=PFqDTaiyey1UObcvOyI4Ng2HXW0%3D"
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308152953"
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v"
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0"
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&xaouth_display_name=Chromium",
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            signed_text);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignGet2) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://accounts.google.com/OAuthGetAccessToken");
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OAuthRequestSigner::Parameters parameters;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_timestamp"] = "1308147831";
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_nonce"] = "4d4hZW9DygWQujP2tz06UN";
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::SignURL(
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      request_url,
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      parameters,
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::GET_METHOD,
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // oauth_consumer_key
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // consumer secret
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),                     // token secret
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &signed_text));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(signed_text,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "https://accounts.google.com/OAuthGetAccessToken"
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "?oauth_consumer_key=anonymous"
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=4d4hZW9DygWQujP2tz06UN"
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D"
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308147831"
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0");
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignGet1) {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "?scope=https://accounts.google.com/OAuthLogin"
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&xaouth_display_name=Chromium"
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_timestamp=1308152953");
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      request_url,
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::GET_METHOD,
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // oauth_consumer_key
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // consumer secret
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),                     // token secret
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &signed_text));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("https://www.google.com/accounts/o8/GetOAuthToken"
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "?oauth_consumer_key=anonymous"
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=PH7KP6cP%2BzZ1SJ6WGqBgXwQP9Mc%3D"
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308152953"
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0"
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&xaouth_display_name=Chromium",
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            signed_text);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignGet2) {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://accounts.google.com/OAuthGetAccessToken"
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "?oauth_timestamp=1308147831"
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_nonce=4d4hZW9DygWQujP2tz06UN");
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      request_url,
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::GET_METHOD,
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // oauth_consumer_key
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // consumer secret
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),                     // token secret
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &signed_text));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(signed_text,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "https://accounts.google.com/OAuthGetAccessToken"
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "?oauth_consumer_key=anonymous"
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=4d4hZW9DygWQujP2tz06UN"
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=YiJv%2BEOWsvCDCi13%2FhQBFrr0J7c%3D"
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308147831"
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0");
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignPost1) {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OAuthRequestSigner::Parameters parameters;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["scope"] = "https://accounts.google.com/OAuthLogin";
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["xaouth_display_name"] = "Chromium";
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_timestamp"] = "1308152953";
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::SignURL(
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  request_url,
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  parameters,
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::POST_METHOD,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "anonymous",  // oauth_consumer_key
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "anonymous",  // consumer secret
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "4/X8x0r7bHif_VNCLjUMutxGkzo13d",  // oauth_token
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "b7120598d47594bd3522", // token secret
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  &signed_text));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("oauth_consumer_key=anonymous"
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D"
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308152953"
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d"
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0"
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&xaouth_display_name=Chromium",
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            signed_text);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignPost2) {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://accounts.google.com/OAuthGetAccessToken");
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OAuthRequestSigner::Parameters parameters;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_timestamp"] = "1234567890";
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_nonce"] = "17171717171717171";
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::SignURL(
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      request_url,
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      parameters,
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::POST_METHOD,
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // oauth_consumer_key
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // consumer secret
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),                     // token secret
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &signed_text));
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(signed_text,
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_consumer_key=anonymous"
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=17171717171717171"
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D"
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1234567890"
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0");
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignPost1) {
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken"
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "?scope=https://accounts.google.com/OAuthLogin"
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&xaouth_display_name=Chromium"
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_timestamp=1308152953");
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  request_url,
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::POST_METHOD,
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "anonymous",  // oauth_consumer_key
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "anonymous",  // consumer secret
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "4/X8x0r7bHif_VNCLjUMutxGkzo13d",  // oauth_token
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "b7120598d47594bd3522", // token secret
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  &signed_text));
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("oauth_consumer_key=anonymous"
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=2oiE_aHdk5qRTz0L9C8Lq0g"
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=vVlfv6dnV2%2Fx7TozS0Gf83zS2%2BQ%3D"
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1308152953"
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FX8x0r7bHif_VNCLjUMutxGkzo13d"
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0"
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&scope=https%3A%2F%2Faccounts.google.com%2FOAuthLogin"
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&xaouth_display_name=Chromium",
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            signed_text);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, ParseAndSignPost2) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://accounts.google.com/OAuthGetAccessToken"
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "?oauth_timestamp=1234567890"
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "&oauth_nonce=17171717171717171");
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::ParseAndSign(
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      request_url,
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OAuthRequestSigner::POST_METHOD,
279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // oauth_consumer_key
280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "anonymous",                       // consumer secret
281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      "4/CcC-hgdj1TNnWaX8NTQ76YDXCBEK",  // oauth_token
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),                     // token secret
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &signed_text));
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(signed_text,
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_consumer_key=anonymous"
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_nonce=17171717171717171"
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature=tPX2XqKQICWzopZ80CFGX%2F53DLo%3D"
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_signature_method=HMAC-SHA1"
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_timestamp=1234567890"
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_token=4%2FCcC-hgdj1TNnWaX8NTQ76YDXCBEK"
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "&oauth_version=1.0");
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(OAuthRequestSignerTest, SignAuthHeader) {
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("https://www.google.com/accounts/o8/GetOAuthToken");
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OAuthRequestSigner::Parameters parameters;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["scope"] = "https://accounts.google.com/OAuthLogin";
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_nonce"] = "2oiE_aHdk5qRTz0L9C8Lq0g";
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["xaouth_display_name"] = "Chromium";
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parameters["oauth_timestamp"] = "1308152953";
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string signed_text;
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(OAuthRequestSigner::SignAuthHeader(
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  request_url,
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  parameters,
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::HMAC_SHA1_SIGNATURE,
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  OAuthRequestSigner::GET_METHOD,
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "johndoe",  // oauth_consumer_key
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "53cR3t",  // consumer secret
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "4/VGY0MsQadcmO8VnCv9gnhoEooq1v",  // oauth_token
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  "c5e0531ff55dfbb4054e", // token secret
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  &signed_text));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("OAuth "
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_consumer_key=\"johndoe\", "
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_nonce=\"2oiE_aHdk5qRTz0L9C8Lq0g\", "
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_signature=\"PFqDTaiyey1UObcvOyI4Ng2HXW0%3D\", "
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_signature_method=\"HMAC-SHA1\", "
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_timestamp=\"1308152953\", "
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_token=\"4%2FVGY0MsQadcmO8VnCv9gnhoEooq1v\", "
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "oauth_version=\"1.0\", "
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "scope=\"https%3A%2F%2Faccounts.google.com%2FOAuthLogin\", "
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "xaouth_display_name=\"Chromium\"",
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            signed_text);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
324