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 ClientPairingSession. 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::InSequence; 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::Mock; 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::Return; 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::StrictMock; 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetusing ::testing::_; 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace polo { 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace pairing { 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass TestClientPairingSession : public ClientPairingSession { 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public: 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet TestClientPairingSession(wire::PoloWireAdapter* wire, 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingContext* context, 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PoloChallengeResponse* challenge) 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet : ClientPairingSession(wire, context, challenge, "service1", "client1") { 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void TestDoInitializationPhase() { 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DoInitializationPhase(); 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void TestDoConfigurationPhase() { 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DoConfigurationPhase(); 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet bool TestSetConfiguration(const message::ConfigurationMessage& config) { 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return SetConfiguration(config); 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetMATCHER_P2(PairingRequestEq, service_name, client_name, "") { 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return arg.service_name() == service_name 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet && arg.client_name() == client_name; 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass ClientPairingSessionTest : public ::testing::Test { 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet protected: 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ClientPairingSessionTest() 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet : interface_(), 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet wire_(&interface_), 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet challenge_(), 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet context_(NULL, NULL, false), 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_(&wire_, &context_, &challenge_) { 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void SetUp() { 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual void TearDown() { 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet void InitSession() { 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnSessionCreated()); 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendPairingRequestMessage( 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingRequestEq("service1", "client1"))); 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.DoPair(&listener_); 847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<wire::MockWireInterface> interface_; 877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<wire::MockWireAdapter> wire_; 887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<MockChallengeResponse> challenge_; 897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PairingContext context_; 907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<MockPairingListener> listener_; 917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StrictMock<TestClientPairingSession> session_; 927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 947c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(ClientPairingSessionTest, DoInitializationPhase) { 957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 987c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(ClientPairingSessionTest, DoConfigurationPhase) { 997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 1047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendConfigurationMessage(_)); 1077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 1087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestDoConfigurationPhase(); 1107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1127c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(ClientPairingSessionTest, OnPairingRequestAckMessage) { 1137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendOptionsMessage(_)); 1167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 1177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::PairingRequestAckMessage message; 1197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.OnPairingRequestAckMessage(message); 1207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1227c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(ClientPairingSessionTest, OnOptionsMessage) { 1237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddInputEncoding(encoding); 1257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.AddOutputEncoding(encoding); 1267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, SendConfigurationMessage(_)); 1327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(wire_, GetNextMessage()); 1337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage message; 1357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message.AddInputEncoding(encoding); 1367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message.AddOutputEncoding(encoding); 1377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message.set_protocol_role_preference(message::OptionsMessage::kInputDevice); 1387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.OnOptionsMessage(message); 1397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1417c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTEST_F(ClientPairingSessionTest, OnConfigurationAckMessage) { 1427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InitSession(); 1437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet InSequence sequence; 1447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); 1457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationMessage configuration(encoding, 1467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::OptionsMessage::kInputDevice); 1477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.TestSetConfiguration(configuration); 1487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet EXPECT_CALL(listener_, OnPerformInputDeviceRole()); 1507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet message::ConfigurationAckMessage message; 1527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet session_.OnConfigurationAckMessage(message); 1537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 1547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace pairing 1567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace polo 157