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

Side by Side Diff: chrome/browser/extensions/api/identity/identity_mint_queue_unittest.cc

Issue 99173004: Identity API: add multi-account support to token cache and request queues (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/identity/identity_mint_queue.h" 5 #include "chrome/browser/extensions/api/identity/identity_mint_queue.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/scoped_ptr.h"
9 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 12
13 using extensions::ExtensionTokenKey;
12 using extensions::IdentityMintRequestQueue; 14 using extensions::IdentityMintRequestQueue;
13 15
14 namespace { 16 namespace {
15 17
16 class MockRequest : public extensions::IdentityMintRequestQueue::Request { 18 class MockRequest : public extensions::IdentityMintRequestQueue::Request {
17 public: 19 public:
18 MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType)); 20 MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType));
19 }; 21 };
20 22
23 scoped_ptr<ExtensionTokenKey> ExtensionIdToKey(
24 const std::string& extension_id) {
25 return scoped_ptr<ExtensionTokenKey>(new ExtensionTokenKey(
26 extension_id, "user_id", std::set<std::string>()));
27 }
28
21 } // namespace 29 } // namespace
22 30
23 TEST(IdentityMintQueueTest, SerialRequests) { 31 TEST(IdentityMintQueueTest, SerialRequests) {
24 IdentityMintRequestQueue::MintType type = 32 IdentityMintRequestQueue::MintType type =
25 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 33 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
26 IdentityMintRequestQueue queue; 34 IdentityMintRequestQueue queue;
27 std::string extension_id("ext_id"); 35 scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
28 MockRequest request1; 36 MockRequest request1;
29 MockRequest request2; 37 MockRequest request2;
30 38
31 EXPECT_CALL(request1, StartMintToken(type)).Times(1); 39 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
32 queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 40 queue.RequestStart(type, *key, &request1);
33 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 41 queue.RequestComplete(type, *key, &request1);
34 42
35 EXPECT_CALL(request2, StartMintToken(type)).Times(1); 43 EXPECT_CALL(request2, StartMintToken(type)).Times(1);
36 queue.RequestStart(type, extension_id, std::set<std::string>(), &request2); 44 queue.RequestStart(type, *key, &request2);
37 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request2); 45 queue.RequestComplete(type, *key, &request2);
38 } 46 }
39 47
40 TEST(IdentityMintQueueTest, InteractiveType) { 48 TEST(IdentityMintQueueTest, InteractiveType) {
41 IdentityMintRequestQueue::MintType type = 49 IdentityMintRequestQueue::MintType type =
42 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; 50 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
43 IdentityMintRequestQueue queue; 51 IdentityMintRequestQueue queue;
44 std::string extension_id("ext_id"); 52 scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
45 MockRequest request1; 53 MockRequest request1;
46 54
47 EXPECT_CALL(request1, StartMintToken(type)).Times(1); 55 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
48 queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 56 queue.RequestStart(type, *key, &request1);
49 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 57 queue.RequestComplete(type, *key, &request1);
50 } 58 }
51 59
52 TEST(IdentityMintQueueTest, ParallelRequests) { 60 TEST(IdentityMintQueueTest, ParallelRequests) {
53 IdentityMintRequestQueue::MintType type = 61 IdentityMintRequestQueue::MintType type =
54 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 62 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
55 IdentityMintRequestQueue queue; 63 IdentityMintRequestQueue queue;
56 std::string extension_id("ext_id"); 64 scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
57 MockRequest request1; 65 MockRequest request1;
58 MockRequest request2; 66 MockRequest request2;
59 MockRequest request3; 67 MockRequest request3;
60 68
61 EXPECT_CALL(request1, StartMintToken(type)).Times(1); 69 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
62 queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 70 queue.RequestStart(type, *key, &request1);
63 queue.RequestStart(type, extension_id, std::set<std::string>(), &request2); 71 queue.RequestStart(type, *key, &request2);
64 queue.RequestStart(type, extension_id, std::set<std::string>(), &request3); 72 queue.RequestStart(type, *key, &request3);
65 73
66 EXPECT_CALL(request2, StartMintToken(type)).Times(1); 74 EXPECT_CALL(request2, StartMintToken(type)).Times(1);
67 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 75 queue.RequestComplete(type, *key, &request1);
68 76
69 EXPECT_CALL(request3, StartMintToken(type)).Times(1); 77 EXPECT_CALL(request3, StartMintToken(type)).Times(1);
70 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request2); 78 queue.RequestComplete(type, *key, &request2);
71 79
72 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request3); 80 queue.RequestComplete(type, *key, &request3);
73 } 81 }
74 82
75 TEST(IdentityMintQueueTest, ParallelRequestsFromTwoExtensions) { 83 TEST(IdentityMintQueueTest, ParallelRequestsFromTwoKeys) {
76 IdentityMintRequestQueue::MintType type = 84 IdentityMintRequestQueue::MintType type =
77 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 85 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
78 IdentityMintRequestQueue queue; 86 IdentityMintRequestQueue queue;
79 std::string extension_id1("ext_id_1"); 87 scoped_ptr<ExtensionTokenKey> key1(ExtensionIdToKey("ext_id_1"));
80 std::string extension_id2("ext_id_2"); 88 scoped_ptr<ExtensionTokenKey> key2(ExtensionIdToKey("ext_id_2"));
81 MockRequest request1; 89 MockRequest request1;
82 MockRequest request2; 90 MockRequest request2;
83 91
84 EXPECT_CALL(request1, StartMintToken(type)).Times(1); 92 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
85 EXPECT_CALL(request2, StartMintToken(type)).Times(1); 93 EXPECT_CALL(request2, StartMintToken(type)).Times(1);
86 queue.RequestStart(type, extension_id1, std::set<std::string>(), &request1); 94 queue.RequestStart(type, *key1, &request1);
87 queue.RequestStart(type, extension_id2, std::set<std::string>(), &request2); 95 queue.RequestStart(type, *key2, &request2);
88 96
89 queue.RequestComplete(type, extension_id1, 97 queue.RequestComplete(type, *key1, &request1);
90 std::set<std::string>(), &request1); 98 queue.RequestComplete(type, *key2, &request2);
91 queue.RequestComplete(type, extension_id2,
92 std::set<std::string>(), &request2);
93 }
94
95 TEST(IdentityMintQueueTest, ParallelRequestsForDifferentScopes) {
fgorski 2013/12/02 20:54:39 Is that one no longer relevant?
Michael Courage 2013/12/02 21:53:06 Yes, it was already a little bit redundant, since
96 IdentityMintRequestQueue::MintType type =
97 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
98 IdentityMintRequestQueue queue;
99 std::string extension_id("ext_id");
100 MockRequest request1;
101 MockRequest request2;
102 std::set<std::string> scopes1;
103 std::set<std::string> scopes2;
104
105 scopes1.insert("a");
106 scopes1.insert("b");
107 scopes2.insert("a");
108
109 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
110 EXPECT_CALL(request2, StartMintToken(type)).Times(1);
111 queue.RequestStart(type, extension_id, scopes1, &request1);
112 queue.RequestStart(type, extension_id, scopes2, &request2);
113
114 queue.RequestComplete(type, extension_id, scopes1, &request1);
115 queue.RequestComplete(type, extension_id, scopes2, &request2);
116 }
117
118 TEST(IdentityMintQueueTest, KeyComparisons) {
119 std::string extension_id1("ext_id_1");
120 std::string extension_id2("ext_id_2");
121 std::set<std::string> scopes1;
122 std::set<std::string> scopes2;
123 std::set<std::string> scopes3;
124
125 scopes1.insert("a");
126 scopes1.insert("b");
127 scopes2.insert("a");
128
129 std::vector<std::string> ids;
130 ids.push_back(extension_id1);
131 ids.push_back(extension_id2);
132
133 std::vector<std::set<std::string> > scopesets;
134 scopesets.push_back(scopes1);
135 scopesets.push_back(scopes2);
136 scopesets.push_back(scopes3);
137
138 std::vector<IdentityMintRequestQueue::RequestKey> keys;
139 typedef std::vector<
140 IdentityMintRequestQueue::RequestKey>::const_iterator
141 RequestKeyIterator;
142
143 std::vector<std::string>::const_iterator id_it;
144 std::vector<std::set<std::string> >::const_iterator scope_it;
145
146 for (id_it = ids.begin(); id_it != ids.end(); ++id_it) {
147 for (scope_it = scopesets.begin(); scope_it != scopesets.end();
148 ++scope_it) {
149 keys.push_back(IdentityMintRequestQueue::RequestKey(
150 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE, *id_it,
151 *scope_it));
152 keys.push_back(IdentityMintRequestQueue::RequestKey(
153 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, *id_it, *scope_it));
154 }
155 }
156
157 // keys should not be less than themselves
158 for (RequestKeyIterator it = keys.begin(); it != keys.end(); ++it) {
159 EXPECT_FALSE(*it < *it);
160 }
161
162 // keys should not equal different keys
163 for (RequestKeyIterator it1 = keys.begin(); it1 != keys.end(); ++it1) {
164 RequestKeyIterator it2 = it1;
165 for (++it2; it2 != keys.end(); ++it2) {
166 EXPECT_TRUE(*it1 < *it2 || *it2 < *it1);
167 EXPECT_FALSE(*it1 < *it2 && *it2 < *it1);
168 }
169 }
170 } 99 }
171 100
172 TEST(IdentityMintQueueTest, Empty) { 101 TEST(IdentityMintQueueTest, Empty) {
173 IdentityMintRequestQueue::MintType type = 102 IdentityMintRequestQueue::MintType type =
174 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; 103 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
175 IdentityMintRequestQueue queue; 104 IdentityMintRequestQueue queue;
176 std::string extension_id("ext_id"); 105 scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
177 MockRequest request1; 106 MockRequest request1;
178 107
179 EXPECT_TRUE(queue.empty(type, extension_id, std::set<std::string>())); 108 EXPECT_TRUE(queue.empty(type, *key));
180 EXPECT_CALL(request1, StartMintToken(type)).Times(1); 109 EXPECT_CALL(request1, StartMintToken(type)).Times(1);
181 queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 110 queue.RequestStart(type, *key, &request1);
182 EXPECT_FALSE(queue.empty(type, extension_id, std::set<std::string>())); 111 EXPECT_FALSE(queue.empty(type, *key));
183 queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 112 queue.RequestComplete(type, *key, &request1);
184 EXPECT_TRUE(queue.empty(type, extension_id, std::set<std::string>())); 113 EXPECT_TRUE(queue.empty(type, *key));
185 } 114 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/identity/identity_mint_queue.cc ('k') | chrome/browser/ui/webui/identity_internals_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698