1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/identity/identity_mint_queue.h"
#include <vector>
#include "base/memory/scoped_ptr.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using extensions::ExtensionTokenKey;
using extensions::IdentityMintRequestQueue;
namespace {
class MockRequest : public extensions::IdentityMintRequestQueue::Request {
public:
MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType));
};
scoped_ptr<ExtensionTokenKey> ExtensionIdToKey(
const std::string& extension_id) {
return scoped_ptr<ExtensionTokenKey>(new ExtensionTokenKey(
extension_id, "user_id", std::set<std::string>()));
}
} // namespace
TEST(IdentityMintQueueTest, SerialRequests) {
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
IdentityMintRequestQueue queue;
scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
MockRequest request1;
MockRequest request2;
EXPECT_CALL(request1, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key, &request1);
queue.RequestComplete(type, *key, &request1);
EXPECT_CALL(request2, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key, &request2);
queue.RequestComplete(type, *key, &request2);
}
TEST(IdentityMintQueueTest, InteractiveType) {
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
IdentityMintRequestQueue queue;
scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
MockRequest request1;
EXPECT_CALL(request1, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key, &request1);
queue.RequestComplete(type, *key, &request1);
}
TEST(IdentityMintQueueTest, ParallelRequests) {
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
IdentityMintRequestQueue queue;
scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
MockRequest request1;
MockRequest request2;
MockRequest request3;
EXPECT_CALL(request1, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key, &request1);
queue.RequestStart(type, *key, &request2);
queue.RequestStart(type, *key, &request3);
EXPECT_CALL(request2, StartMintToken(type)).Times(1);
queue.RequestComplete(type, *key, &request1);
EXPECT_CALL(request3, StartMintToken(type)).Times(1);
queue.RequestComplete(type, *key, &request2);
queue.RequestComplete(type, *key, &request3);
}
TEST(IdentityMintQueueTest, ParallelRequestsFromTwoKeys) {
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
IdentityMintRequestQueue queue;
scoped_ptr<ExtensionTokenKey> key1(ExtensionIdToKey("ext_id_1"));
scoped_ptr<ExtensionTokenKey> key2(ExtensionIdToKey("ext_id_2"));
MockRequest request1;
MockRequest request2;
EXPECT_CALL(request1, StartMintToken(type)).Times(1);
EXPECT_CALL(request2, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key1, &request1);
queue.RequestStart(type, *key2, &request2);
queue.RequestComplete(type, *key1, &request1);
queue.RequestComplete(type, *key2, &request2);
}
TEST(IdentityMintQueueTest, Empty) {
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
IdentityMintRequestQueue queue;
scoped_ptr<ExtensionTokenKey> key(ExtensionIdToKey("ext_id"));
MockRequest request1;
EXPECT_TRUE(queue.empty(type, *key));
EXPECT_CALL(request1, StartMintToken(type)).Times(1);
queue.RequestStart(type, *key, &request1);
EXPECT_FALSE(queue.empty(type, *key));
queue.RequestComplete(type, *key, &request1);
EXPECT_TRUE(queue.empty(type, *key));
}
|