google_service_auth_error_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/test/values_test_util.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/values.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/base/net_errors.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using base::ExpectDictStringValue; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class GoogleServiceAuthErrorTest : public testing::Test {}; 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TestSimpleState(GoogleServiceAuthError::State state) { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error(state); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<DictionaryValue> value(error.ToValue()); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1u, value->size()); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string state_str; 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(value->GetString("state", &state_str)); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(state_str.empty()); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_NE("CONNECTION_FAILED", state_str); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_NE("CAPTCHA_REQUIRED", state_str); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, SimpleToValue) { 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (int i = GoogleServiceAuthError::NONE; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i <= GoogleServiceAuthError::USER_NOT_SIGNED_UP; ++i) { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestSimpleState(static_cast<GoogleServiceAuthError::State>(i)); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, None) { 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error(GoogleServiceAuthError::None()); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DictionaryValue> value(error.ToValue()); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1u, value->size()); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("NONE", *value, "state"); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, ConnectionFailed) { 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error( 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromConnectionError(net::OK)); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<DictionaryValue> value(error.ToValue()); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2u, value->size()); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("CONNECTION_FAILED", *value, "state"); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("net::OK", *value, "networkError"); 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, CaptchaChallenge) { 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error( 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromClientLoginCaptchaChallenge( 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "captcha_token", GURL("http://www.google.com"), 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL("http://www.bing.com"))); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<DictionaryValue> value(error.ToValue()); 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2u, value->size()); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("CAPTCHA_REQUIRED", *value, "state"); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DictionaryValue* captcha_value = NULL; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(value->GetDictionary("captcha", &captcha_value)); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(captcha_value); 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("captcha_token", *captcha_value, "token"); 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("", *captcha_value, "audioUrl"); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("http://www.google.com/", *captcha_value, "imageUrl"); 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("http://www.bing.com/", *captcha_value, "unlockUrl"); 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictIntegerValue(0, *captcha_value, "imageWidth"); 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictIntegerValue(0, *captcha_value, "imageHeight"); 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, CaptchaChallenge2) { 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error( 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromCaptchaChallenge( 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "captcha_token", GURL("http://www.audio.com"), 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL("http://www.image.com"), 320, 200)); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<DictionaryValue> value(error.ToValue()); 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2u, value->size()); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("CAPTCHA_REQUIRED", *value, "state"); 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DictionaryValue* captcha_value = NULL; 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(value->GetDictionary("captcha", &captcha_value)); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(captcha_value); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("captcha_token", *captcha_value, "token"); 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("http://www.audio.com/", *captcha_value, "audioUrl"); 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("http://www.image.com/", *captcha_value, "imageUrl"); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictIntegerValue(320, *captcha_value, "imageWidth"); 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictIntegerValue(200, *captcha_value, "imageHeight"); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, TwoFactorChallenge) { 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error( 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromSecondFactorChallenge( 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "two_factor_token", "prompt_text", "alternate_text", 10)); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<DictionaryValue> value(error.ToValue()); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2u, value->size()); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("TWO_FACTOR", *value, "state"); 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DictionaryValue* two_factor_value = NULL; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(value->GetDictionary("two_factor", &two_factor_value)); 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(two_factor_value); 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("two_factor_token", *two_factor_value, "token"); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("prompt_text", *two_factor_value, "promptText"); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictStringValue("alternate_text", *two_factor_value, "alternateText"); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExpectDictIntegerValue(10, *two_factor_value, "fieldLength"); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(GoogleServiceAuthErrorTest, ClientOAuthError) { 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test that a malformed/incomplete ClientOAuth response generates 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // a connection problem error. 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error1( 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromClientOAuthError("{}")); 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error1.state()); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test that a well formed ClientOAuth response generates an invalid 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // credentials error with the given error message. 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError error2( 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GoogleServiceAuthError::FromClientOAuthError( 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "{\"cause\":\"foo\",\"explanation\":\"error_message\"}")); 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, error2.state()); 121 EXPECT_EQ("error_message", error2.error_message()); 122} 123 124} // namespace 125