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