102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved. 202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project// found in the LICENSE file. 402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "remoting/protocol/pairing_registry.h" 602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdlib.h> 802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <algorithm> 1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/bind.h" 1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/compiler_specific.h" 1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/memory/scoped_ptr.h" 1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/message_loop/message_loop.h" 1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/run_loop.h" 1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/thread_task_runner_handle.h" 1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "base/values.h" 1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "remoting/protocol/protocol_mock_objects.h" 1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "testing/gmock/include/gmock/gmock.h" 2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "testing/gtest/include/gtest/gtest.h" 2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectusing testing::Sequence; 2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnamespace { 2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectusing remoting::protocol::PairingRegistry; 2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectclass MockPairingRegistryCallbacks { 2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project public: 3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MockPairingRegistryCallbacks() {} 3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project virtual ~MockPairingRegistryCallbacks() {} 3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MOCK_METHOD1(DoneCallback, void(bool)); 3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MOCK_METHOD1(GetAllPairingsCallbackPtr, void(base::ListValue*)); 3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MOCK_METHOD1(GetPairingCallback, void(PairingRegistry::Pairing)); 3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project void GetAllPairingsCallback(scoped_ptr<base::ListValue> pairings) { 3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetAllPairingsCallbackPtr(pairings.get()); 3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project private: 4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DISALLOW_COPY_AND_ASSIGN(MockPairingRegistryCallbacks); 4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}; 4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project// Verify that a pairing Dictionary has correct entries, but doesn't include 4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project// any shared secret. 4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid VerifyPairing(PairingRegistry::Pairing expected, 4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project const base::DictionaryValue& actual) { 4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project std::string value; 5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_TRUE(actual.GetString(PairingRegistry::kClientNameKey, &value)); 5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(expected.client_name(), value); 5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_TRUE(actual.GetString(PairingRegistry::kClientIdKey, &value)); 5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(expected.client_id(), value); 5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_FALSE(actual.HasKey(PairingRegistry::kSharedSecretKey)); 5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} // namespace 5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnamespace remoting { 6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnamespace protocol { 6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectclass PairingRegistryTest : public testing::Test { 6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project public: 6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project virtual void SetUp() OVERRIDE { 6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project callback_count_ = 0; 6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project void set_pairings(scoped_ptr<base::ListValue> pairings) { 7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairings_ = pairings.Pass(); 7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project void ExpectSecret(const std::string& expected, 7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing actual) { 7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(expected, actual.shared_secret()); 7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++callback_count_; 7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project void ExpectSaveSuccess(bool success) { 8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_TRUE(success); 8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++callback_count_; 8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project protected: 8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::MessageLoop message_loop_; 8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::RunLoop run_loop_; 8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int callback_count_; 8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<base::ListValue> pairings_; 9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}; 9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectTEST_F(PairingRegistryTest, CreateAndGetPairings) { 9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry( 9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate())); 9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_1 = registry->CreatePairing("my_client"); 9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_2 = registry->CreatePairing("my_client"); 9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_NE(pairing_1.shared_secret(), pairing_2.shared_secret()); 9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing(pairing_1.client_id(), 10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::ExpectSecret, 10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this), 10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_1.shared_secret())); 10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(1, callback_count_); 10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project // Check that the second client is paired with a different shared secret. 10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing(pairing_2.client_id(), 10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::ExpectSecret, 10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this), 11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_2.shared_secret())); 11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(2, callback_count_); 11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectTEST_F(PairingRegistryTest, GetAllPairings) { 11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry( 11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate())); 11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetAllPairings( 12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::set_pairings, 12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this))); 12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_EQ(2u, pairings_->GetSize()); 12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project const base::DictionaryValue* actual_pairing_1; 12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project const base::DictionaryValue* actual_pairing_2; 12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_1)); 12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_TRUE(pairings_->GetDictionary(1, &actual_pairing_2)); 12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project // Ordering is not guaranteed, so swap if necessary. 13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project std::string actual_client_id; 13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_TRUE(actual_pairing_1->GetString(PairingRegistry::kClientIdKey, 13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &actual_client_id)); 13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (actual_client_id != pairing_1.client_id()) { 13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project std::swap(actual_pairing_1, actual_pairing_2); 13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project VerifyPairing(pairing_1, *actual_pairing_1); 13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project VerifyPairing(pairing_2, *actual_pairing_2); 14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectTEST_F(PairingRegistryTest, DeletePairing) { 14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry( 14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate())); 14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->DeletePairing( 14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_1.client_id(), 15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this))); 15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project // Re-read the list, and verify it only has the pairing_2 client. 15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetAllPairings( 15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::set_pairings, 15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this))); 15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_EQ(1u, pairings_->GetSize()); 15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project const base::DictionaryValue* actual_pairing_2; 16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_TRUE(pairings_->GetDictionary(0, &actual_pairing_2)); 16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project std::string actual_client_id; 16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ASSERT_TRUE(actual_pairing_2->GetString(PairingRegistry::kClientIdKey, 16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &actual_client_id)); 16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_EQ(pairing_2.client_id(), actual_client_id); 16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectTEST_F(PairingRegistryTest, ClearAllPairings) { 16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_refptr<PairingRegistry> registry = new SynchronousPairingRegistry( 16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate())); 17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->ClearAllPairings( 17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::ExpectSaveSuccess, 17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this))); 17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project // Re-read the list, and verify it is empty. 17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetAllPairings( 17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&PairingRegistryTest::set_pairings, 18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(this))); 18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_TRUE(pairings_->empty()); 18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectACTION_P(QuitMessageLoop, callback) { 18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project callback.Run(); 18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectMATCHER_P(EqualsClientName, client_name, "") { 19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return arg.client_name() == client_name; 19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectMATCHER(NoPairings, "") { 19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return arg->empty(); 19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectTEST_F(PairingRegistryTest, SerializedRequests) { 19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MockPairingRegistryCallbacks callbacks; 19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Sequence s; 20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client1"))) 20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client2"))) 20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, DoneCallback(true)) 20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client1"))) 20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName(""))) 20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, DoneCallback(true)) 21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetAllPairingsCallbackPtr(NoPairings())) 21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s); 21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project EXPECT_CALL(callbacks, GetPairingCallback(EqualsClientName("client3"))) 21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .InSequence(s) 21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project .WillOnce(QuitMessageLoop(run_loop_.QuitClosure())); 21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_refptr<PairingRegistry> registry = new PairingRegistry( 21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::ThreadTaskRunnerHandle::Get(), 22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scoped_ptr<PairingRegistry::Delegate>(new MockPairingRegistryDelegate())); 22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client1"); 22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client2"); 22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing( 22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_1.client_id(), 22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback, 22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing( 22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_2.client_id(), 22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback, 23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->DeletePairing( 23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_2.client_id(), 23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::DoneCallback, 23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing( 23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_1.client_id(), 23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback, 23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing( 24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_2.client_id(), 24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback, 24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->ClearAllPairings( 24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::DoneCallback, 24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetAllPairings( 24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetAllPairingsCallback, 24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PairingRegistry::Pairing pairing_3 = registry->CreatePairing("client3"); 25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project registry->GetPairing( 25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pairing_3.client_id(), 25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Bind(&MockPairingRegistryCallbacks::GetPairingCallback, 25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base::Unretained(&callbacks))); 25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project run_loop_.Run(); 25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} // namespace protocol 25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} // namespace remoting 26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project