pairing_registry_unittest.cc revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
1b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// found in the LICENSE file. 4b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 5b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "remoting/protocol/pairing_registry.h" 6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include <stdlib.h> 8b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/bind.h" 10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/compiler_specific.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "remoting/protocol/protocol_mock_objects.h" 12b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace remoting { 16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace protocol { 17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class PairingRegistryTest : public testing::Test { 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) public: 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetUp() OVERRIDE { 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) got_secret_ = false; 22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 23b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void CompareSecret(const std::string& expected, 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PairingRegistry::Pairing actual) { 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(actual.shared_secret(), expected); 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) got_secret_ = true; 28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) protected: 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool got_secret_; 32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}; 33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(PairingRegistryTest, GetPairing) { 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PairingRegistry::Pairing client_info = 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PairingRegistry::Pairing::Create("client_name"); 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPairingRegistryDelegate* mock_delegate = 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new MockPairingRegistryDelegate(); 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mock_delegate->AddPairing(client_info, PairingRegistry::AddPairingCallback()); 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) registry->GetPairing(client_info.client_id(), 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Bind(&PairingRegistryTest::CompareSecret, 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) client_info.shared_secret())); 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mock_delegate->RunCallback(); 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(got_secret_); 50b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(PairingRegistryTest, AddPairing) { 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPairingRegistryDelegate* mock_delegate = 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new MockPairingRegistryDelegate(); 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); 56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Verify that we can create pairings from two clients with the same name, but 60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // that they aren't allocated the same client id. 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client_name"); 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client_name"); 63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const PairingRegistry::PairedClients& clients = 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mock_delegate->paired_clients(); 66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ASSERT_EQ(clients.size(), 2u); 67b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) PairingRegistry::Pairing first = clients.begin()->second; 68b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) PairingRegistry::Pairing second = (++clients.begin())->second; 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_EQ(first.client_name(), second.client_name()); 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_NE(first.client_id(), second.client_id()); 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace protocol 74b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace remoting 75