17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Copyright 2012 Google Inc. All Rights Reserved. 27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Licensed under the Apache License, Version 2.0 (the "License"); 47c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// you may not use this file except in compliance with the License. 57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// You may obtain a copy of the License at 67c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// http://www.apache.org/licenses/LICENSE-2.0 87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Unless required by applicable law or agreed to in writing, software 107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// distributed under the License is distributed on an "AS IS" BASIS, 117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// See the License for the specific language governing permissions and 137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// limitations under the License. 147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Tests for PairingSession. 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <gtest/gtest.h> 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <polo/pairing/clientpairingsession.h> 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/pairing/mocks.h" 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/wire/mocks.h" 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::Const; 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::InSequence; 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::Mock; 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::Return; 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::ReturnRef; 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::StrictMock; 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::_; 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace polo { 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace pairing { 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass TestPairingSession : public PairingSession { 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public: 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet TestPairingSession(wire::PoloWireAdapter* wire, 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingContext* context, 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PoloChallengeResponse* challenge) 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet : PairingSession(wire, context, challenge) { 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void TestDoPairingPhase() { 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DoPairingPhase(); 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet bool TestSetConfiguration(const message::ConfigurationMessage& message) { 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return SetConfiguration(message); 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const message::ConfigurationMessage* GetConfiguration() { 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return configuration(); 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet const message::OptionsMessage& GetLocalOptions() { 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return local_options(); 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void TestOnSecretMessage(const message::SecretMessage& message) { 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet OnSecretMessage(message); 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void TestOnSecretAckmessage(const message::SecretAckMessage& message) { 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet OnSecretAckMessage(message); 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD0(DoInitializationPhase, void()); 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD0(DoConfigurationPhase, void()); 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD1(OnConfigurationMessage, 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void(const pairing::message::ConfigurationMessage& message)); 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD1(OnConfigurationAckMessage, 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void(const pairing::message::ConfigurationAckMessage& message)); 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD1(OnOptionsMessage, 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void(const pairing::message::OptionsMessage& message)); 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD1(OnPairingRequestMessage, 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void(const pairing::message::PairingRequestMessage& message)); 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet MOCK_METHOD1(OnPairingRequestAckMessage, 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void(const pairing::message::PairingRequestAckMessage& message)); 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass PairingSessionTest : public ::testing::Test { 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet protected: 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingSessionTest() 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet : interface_(), 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet wire_(&interface_), 847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet challenge_(), 857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet context_(NULL, NULL, false), 867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_(&wire_, &context_, &challenge_) { 877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SetUp() { 907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void TearDown() { 937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void InitSession() { 967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnSessionCreated()); 997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(session_, DoInitializationPhase()); 1007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.DoPair(&listener_); 1027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<wire::MockWireInterface> interface_; 1057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<wire::MockWireAdapter> wire_; 1067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<MockChallengeResponse> challenge_; 1077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingContext context_; 1087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<MockPairingListener> listener_; 1097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<TestPairingSession> session_; 1107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 1117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1127c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, DoPair) { 1137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Test the base SetUp case which initializes the pairing session. 1147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1177c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, SetConfiguration) { 1187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 1217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_TRUE(session_.GetConfiguration()); 1247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_EQ(encoding::EncodingOption::kHexadecimal, 1257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.GetConfiguration()->encoding().encoding_type()); 1267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_EQ(8, session_.GetConfiguration()->encoding().symbol_length()); 1277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_EQ(message::OptionsMessage::kInputDevice, 1287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.GetConfiguration()->client_role()); 1297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_TRUE(session_.encoder()); 1317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_EQ(2, session_.encoder()->symbols_per_byte()); 1327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1347c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, DoPairingPhaseInputDevice) { 1357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 1417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPerformInputDeviceRole()); 1447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestDoPairingPhase(); 1467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1487c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, DoPairingPhaseDisplayDevice) { 1497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kDisplayDevice); 1557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, GetGamma(_)).WillOnce(Return(new Gamma(10, 0x5))); 1587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPerformOutputDeviceRole(Gamma(10, 0x5))); 1597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 1607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestDoPairingPhase(); 1627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1647c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, AddInputEncoding) { 1657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddInputEncoding(encoding); 1677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_TRUE(session_.GetLocalOptions().SupportsInputEncoding(encoding)); 1687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1707c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, AddInputEncodingInvalidEncoding) { 1717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 1); 1727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddInputEncoding(encoding); 1737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_FALSE(session_.GetLocalOptions().SupportsInputEncoding(encoding)); 1747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1767c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, AddOutputEncoding) { 1777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddOutputEncoding(encoding); 1797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_TRUE(session_.GetLocalOptions().SupportsOutputEncoding(encoding)); 1807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1827c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, AddOutputEncodingInvalidEncoding) { 1837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kUnknown, 8); 1847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddOutputEncoding(encoding); 1857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ASSERT_FALSE(session_.GetLocalOptions().SupportsOutputEncoding(encoding)); 1867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1887c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, SetSecret) { 1897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Do the setup so the session is expecting the secret. 1937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 1967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPerformInputDeviceRole()); 1997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestDoPairingPhase(); 2017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Gamma gamma(5, 0x1); 2037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Nonce nonce(5, 0x2); 2047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Alpha alpha(5, 0x3); 2057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, CheckGamma(gamma)).WillOnce(Return(true)); 2077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, ExtractNonce(gamma)) 2087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Nonce(nonce))); 2097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, GetAlpha(nonce)) 2107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Alpha(alpha))); 2117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendSecretMessage(_)); 2137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 2147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.SetSecret(gamma); 2167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 2177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2187c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, OnSecretMessage) { 2197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 2207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 2217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Do the setup to set the secret. 2237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 2247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 2257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 2267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 2277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPerformInputDeviceRole()); 2297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestDoPairingPhase(); 2317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Gamma gamma(5, 0x1); 2337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Nonce nonce(5, 0x2); 2347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Alpha alpha(5, 0x3); 2357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, CheckGamma(gamma)).WillOnce(Return(true)); 2377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, ExtractNonce(gamma)) 2387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Nonce(nonce))); 2397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, GetAlpha(nonce)) 2407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Alpha(alpha))); 2417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendSecretMessage(_)); 2437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 2447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.SetSecret(gamma); 2467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, GetAlpha(nonce)) 2487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Alpha(alpha))); 2497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(challenge_, GetAlpha(nonce)) 2517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet .WillOnce(Return(new Alpha(alpha))); 2527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendSecretAckMessage(_)); 2547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPairingSuccess()); 2557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::SecretMessage message(alpha); 2577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestOnSecretMessage(message); 2587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 2597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2607c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(PairingSessionTest, OnSecretAckMessage) { 2617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPairingSuccess()); 2627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Alpha alpha(5, 0x3); 2647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::SecretAckMessage message(alpha); 2657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestOnSecretAckmessage(message); 2667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 2677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace pairing 2697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace polo 270