pairing_registry_unittest.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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) void CompareSecret(const std::string& expected, 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PairingRegistry::Pairing actual) { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(expected, actual.shared_secret()); 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch secret_ = actual.shared_secret(); 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) got_secret_ = true; 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) protected: 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string secret_; 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool got_secret_; 30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}; 31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(PairingRegistryTest, CreateAndGetPairings) { 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MockPairingRegistryDelegate* mock_delegate = 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new MockPairingRegistryDelegate(); 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<PairingRegistry::Delegate> delegate(mock_delegate); 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<PairingRegistry> registry(new PairingRegistry(delegate.Pass())); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PairingRegistry::Pairing pairing_1 = registry->CreatePairing("client_name"); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mock_delegate->RunCallback(); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PairingRegistry::Pairing pairing_2 = registry->CreatePairing("client_name"); 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mock_delegate->RunCallback(); 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch registry->GetPairing(pairing_1.client_id(), 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Bind(&PairingRegistryTest::CompareSecret, 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this), 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pairing_1.shared_secret())); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch got_secret_ = false; 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mock_delegate->RunCallback(); 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_TRUE(got_secret_); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string secret_1 = secret_; 51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check that the second client is paired with a different shared secret. 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch registry->GetPairing(pairing_2.client_id(), 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&PairingRegistryTest::CompareSecret, 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Unretained(this), 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pairing_2.shared_secret())); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch got_secret_ = false; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch mock_delegate->RunCallback(); 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(got_secret_); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_NE(secret_, secret_1); 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace protocol 64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace remoting 65