1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/api/identity/identity_mint_queue.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using extensions::IdentityMintRequestQueue; 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockRequest : public extensions::IdentityMintRequestQueue::Request { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType)); 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, SerialRequests) { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id("ext_id"); 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request2; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request2, StartMintToken(type)).Times(1); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request2); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request2); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, InteractiveType) { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id("ext_id"); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, ParallelRequests) { 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id("ext_id"); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request2; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request3; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request2); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request3); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request2, StartMintToken(type)).Times(1); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request3, StartMintToken(type)).Times(1); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request2); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request3); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, ParallelRequestsFromTwoExtensions) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id1("ext_id_1"); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id2("ext_id_2"); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request2; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request2, StartMintToken(type)).Times(1); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id1, std::set<std::string>(), &request1); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id2, std::set<std::string>(), &request2); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id1, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string>(), &request1); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id2, 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string>(), &request2); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, ParallelRequestsForDifferentScopes) { 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id("ext_id"); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request2; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> scopes1; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> scopes2; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes1.insert("a"); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes1.insert("b"); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes2.insert("a"); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request2, StartMintToken(type)).Times(1); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, scopes1, &request1); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, scopes2, &request2); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, scopes1, &request1); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, scopes2, &request2); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, KeyComparisons) { 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id1("ext_id_1"); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id2("ext_id_2"); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> scopes1; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> scopes2; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string> scopes3; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes1.insert("a"); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes1.insert("b"); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopes2.insert("a"); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> ids; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ids.push_back(extension_id1); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ids.push_back(extension_id2); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::set<std::string> > scopesets; 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopesets.push_back(scopes1); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopesets.push_back(scopes2); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scopesets.push_back(scopes3); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<IdentityMintRequestQueue::RequestKey> keys; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::vector< 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::RequestKey>::const_iterator 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RequestKeyIterator; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string>::const_iterator id_it; 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::set<std::string> >::const_iterator scope_it; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (id_it = ids.begin(); id_it != ids.end(); ++id_it) { 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (scope_it = scopesets.begin(); scope_it != scopesets.end(); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++scope_it) { 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keys.push_back(IdentityMintRequestQueue::RequestKey( 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE, *id_it, 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *scope_it)); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) keys.push_back(IdentityMintRequestQueue::RequestKey( 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, *id_it, *scope_it)); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // keys should not be less than themselves 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (RequestKeyIterator it = keys.begin(); it != keys.end(); ++it) { 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(*it < *it); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // keys should not equal different keys 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (RequestKeyIterator it1 = keys.begin(); it1 != keys.end(); ++it1) { 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RequestKeyIterator it2 = it1; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (++it2; it2 != keys.end(); ++it2) { 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(*it1 < *it2 || *it2 < *it1); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(*it1 < *it2 && *it2 < *it1); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(IdentityMintQueueTest, Empty) { 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MintType type = 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IdentityMintRequestQueue queue; 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string extension_id("ext_id"); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockRequest request1; 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(queue.empty(type, extension_id, std::set<std::string>())); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(request1, StartMintToken(type)).Times(1); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestStart(type, extension_id, std::set<std::string>(), &request1); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(queue.empty(type, extension_id, std::set<std::string>())); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) queue.RequestComplete(type, extension_id, std::set<std::string>(), &request1); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(queue.empty(type, extension_id, std::set<std::string>())); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 186