Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1205)

Side by Side Diff: blimp/client/core/session/identity_source_unittest.cc

Issue 2204223005: Blimp OAuth2 token retreival on application start up. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add some deps only for gn deps check script. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "blimp/client/core/session/identity_source.h"
6
7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h"
9 #include "blimp/client/test/test_blimp_client_context_delegate.h"
10 #include "google_apis/gaia/fake_identity_provider.h"
11 #include "google_apis/gaia/fake_oauth2_token_service.h"
12 #include "google_apis/gaia/google_service_auth_error.h"
13 #include "testing/gmock/include/gmock/gmock.h"
nyquist 2016/08/12 05:47:04 Is this used here?
xingliu 2016/08/12 17:58:27 Done.
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace blimp {
17 namespace client {
18 namespace {
19
20 class IdentitySourceTest : public testing::Test {
21 public:
22 class MockIdentitySource : public IdentitySource {
nyquist 2016/08/12 05:47:04 Does this need to be an inner class, or could you
xingliu 2016/08/12 17:58:27 Done.
23 public:
24 explicit MockIdentitySource(
25 std::unique_ptr<IdentityProvider> identity_provider)
26 : IdentitySource(std::move(identity_provider)),
27 success_(0),
28 fail_(0),
29 refresh_(0) {}
30 ~MockIdentitySource() override{};
31
32 void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
33 const std::string& access_token,
34 const base::Time& expiration_time) override {
35 IdentitySource::OnGetTokenSuccess(request, access_token, expiration_time);
36 success_++;
37 token_ = access_token;
38 }
39
40 void OnGetTokenFailure(const OAuth2TokenService::Request* request,
41 const GoogleServiceAuthError& error) override {
42 IdentitySource::OnGetTokenFailure(request, error);
43 fail_++;
44 token_.clear();
45 }
46
47 void OnRefreshTokenAvailable(const std::string& account_id) override {
48 IdentitySource::OnRefreshTokenAvailable(account_id);
49 refresh_++;
50 }
51
52 int Succeeded() { return success_; }
53 int Failed() { return fail_; }
54 int Refreshed() { return refresh_; }
55 const std::string& Token() { return token_; }
56
57 private:
nyquist 2016/08/12 05:47:04 DISALLOW_COPY_AND_ASSIGN?
xingliu 2016/08/12 17:58:27 Done.
58 std::string token_;
59 int success_;
60 int fail_;
61 int refresh_;
62 };
63
64 IdentitySourceTest() {}
nyquist 2016/08/12 05:47:04 = default here and below?
xingliu 2016/08/12 17:58:28 Done.
65 ~IdentitySourceTest() override {}
66
67 private:
68 DISALLOW_COPY_AND_ASSIGN(IdentitySourceTest);
69 };
70
71 TEST_F(IdentitySourceTest, TestConnect) {
72 std::unique_ptr<FakeOAuth2TokenService> token_service =
73 base::MakeUnique<FakeOAuth2TokenService>();
74 FakeIdentityProvider* id_provider =
75 new FakeIdentityProvider(token_service.get());
76 std::unique_ptr<IdentityProvider> id_ptr =
77 base::WrapUnique<IdentityProvider>((IdentityProvider*)id_provider);
78
79 MockIdentitySource auth(std::move(id_ptr));
80 TestBlimpClientContextDelegate mock_blimp_delegate;
81 auth.SetDelegate(&mock_blimp_delegate);
82
83 // Connect when user is not signed in. Nothing happens.
84 id_provider->LogOut();
85 auth.Connect();
86 DCHECK_EQ(auth.Succeeded(), 0);
87 DCHECK_EQ(auth.Failed(), 0);
88 DCHECK_EQ(auth.Refreshed(), 0);
89 DCHECK_EQ(auth.Token(), std::string());
90
91 FakeOAuth2TokenServiceDelegate* mock_delegate =
nyquist 2016/08/12 05:47:04 Could you make this name a little bit more specifi
xingliu 2016/08/12 17:58:27 Done.
92 token_service->GetFakeOAuth2TokenServiceDelegate();
93
94 // Connect when user signed in, but no refresh token, refresh token observer
95 // should be added.
96 std::string account = "mock_account";
97 id_provider->LogIn(account);
98 mock_delegate->RevokeCredentials(account);
99 auth.Connect();
100 DCHECK_EQ(auth.Succeeded(), 0);
101 DCHECK_EQ(auth.Failed(), 0);
102 DCHECK_EQ(auth.Refreshed(), 0);
103
104 // Issue refresh token, listener should be triggered, and request should be
105 // sent.
106 mock_delegate->UpdateCredentials(account, "mock_refresh_token");
107 DCHECK_EQ(auth.Succeeded(), 0);
108 DCHECK_EQ(auth.Failed(), 0);
109 DCHECK_EQ(auth.Refreshed(), 1);
110
111 // Fire access token success, first request should be fulfilled.
112 base::Time time;
113 std::string mock_access_token = "mock_access_token";
114 token_service->IssueAllTokensForAccount(account, mock_access_token, time);
115 DCHECK_EQ(auth.Succeeded(), 1);
116 DCHECK_EQ(auth.Failed(), 0);
117 DCHECK_EQ(auth.Token(), mock_access_token);
118
119 // Connect again and fire access token failed.
120 GoogleServiceAuthError error(GoogleServiceAuthError::State::REQUEST_CANCELED);
121 auth.Connect();
122 token_service->IssueErrorForAllPendingRequestsForAccount(account, error);
123 DCHECK_EQ(auth.Succeeded(), 1);
124 DCHECK_EQ(auth.Failed(), 1);
125 DCHECK_EQ(auth.Token(), std::string());
126
127 // Refresh token listener should have been removed.
128 mock_delegate->UpdateCredentials(account, "mock_refresh_token");
129 DCHECK_EQ(auth.Refreshed(), 1);
130
131 // Direct connect with refresh token, and no listener should be added.
132 auth.Connect();
133 token_service->IssueAllTokensForAccount(account, mock_access_token, time);
134 DCHECK_EQ(auth.Succeeded(), 2);
135 DCHECK_EQ(auth.Token(), mock_access_token);
136 mock_delegate->UpdateCredentials(account, "mock_refresh_token");
137 DCHECK_EQ(auth.Refreshed(), 1);
138 }
139
140 } // namespace
141 } // namespace client
142 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698