token_service_unittest.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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// This file defines a unit test harness for the profile's token service. 6 7#ifndef CHROME_BROWSER_NET_GAIA_TOKEN_SERVICE_UNITTEST_H_ 8#define CHROME_BROWSER_NET_GAIA_TOKEN_SERVICE_UNITTEST_H_ 9#pragma once 10 11#include "base/synchronization/waitable_event.h" 12#include "chrome/browser/net/gaia/token_service.h" 13#include "chrome/browser/webdata/web_data_service.h" 14#include "chrome/common/net/gaia/gaia_auth_consumer.h" 15#include "chrome/common/notification_details.h" 16#include "chrome/common/notification_source.h" 17#include "chrome/test/signaling_task.h" 18#include "chrome/test/test_notification_tracker.h" 19#include "chrome/test/testing_profile.h" 20#include "testing/gtest/include/gtest/gtest.h" 21 22// TestNotificationTracker doesn't do a deep copy on the notification details. 23// We have to in order to read it out, or we have a bad ptr, since the details 24// are a reference on the stack. 25class TokenAvailableTracker : public TestNotificationTracker { 26 public: 27 const TokenService::TokenAvailableDetails& details() { 28 return details_; 29 } 30 31 private: 32 virtual void Observe(NotificationType type, 33 const NotificationSource& source, 34 const NotificationDetails& details) { 35 TestNotificationTracker::Observe(type, source, details); 36 if (type == NotificationType::TOKEN_AVAILABLE) { 37 Details<const TokenService::TokenAvailableDetails> full = details; 38 details_ = *full.ptr(); 39 } 40 } 41 42 TokenService::TokenAvailableDetails details_; 43}; 44 45class TokenFailedTracker : public TestNotificationTracker { 46 public: 47 const TokenService::TokenRequestFailedDetails& details() { 48 return details_; 49 } 50 51 private: 52 virtual void Observe(NotificationType type, 53 const NotificationSource& source, 54 const NotificationDetails& details) { 55 TestNotificationTracker::Observe(type, source, details); 56 if (type == NotificationType::TOKEN_REQUEST_FAILED) { 57 Details<const TokenService::TokenRequestFailedDetails> full = details; 58 details_ = *full.ptr(); 59 } 60 } 61 62 TokenService::TokenRequestFailedDetails details_; 63}; 64 65class TokenServiceTestHarness : public testing::Test { 66 public: 67 TokenServiceTestHarness(); 68 virtual ~TokenServiceTestHarness(); 69 70 virtual void SetUp(); 71 72 virtual void TearDown(); 73 74 void WaitForDBLoadCompletion(); 75 76 MessageLoopForUI message_loop_; 77 BrowserThread ui_thread_; // Mostly so DCHECKS pass. 78 BrowserThread db_thread_; // WDS on here 79 80 TokenService service_; 81 TokenAvailableTracker success_tracker_; 82 TokenFailedTracker failure_tracker_; 83 GaiaAuthConsumer::ClientLoginResult credentials_; 84 scoped_ptr<TestingProfile> profile_; 85}; 86 87#endif // CHROME_BROWSER_NET_GAIA_TOKEN_SERVICE_UNITTEST_H_ 88