// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Tests for ServerPairingSession. #include #include #include "polo/pairing/mocks.h" #include "polo/wire/mocks.h" using ::testing::InSequence; using ::testing::Mock; using ::testing::Return; using ::testing::StrictMock; using ::testing::_; namespace polo { namespace pairing { class TestServerPairingSession : public ServerPairingSession { public: TestServerPairingSession(wire::PoloWireAdapter* wire, PairingContext* context, PoloChallengeResponse* challenge) : ServerPairingSession(wire, context, challenge, "server1") { } void TestDoInitializationPhase() { DoInitializationPhase(); } void TestDoConfigurationPhase() { DoConfigurationPhase(); } bool TestSetConfiguration(const message::ConfigurationMessage& config) { return SetConfiguration(config); } }; class ServerPairingSessionTest : public ::testing::Test { protected: ServerPairingSessionTest() : interface_(), wire_(&interface_), challenge_(), context_(NULL, NULL, true), session_(&wire_, &context_, &challenge_) { } virtual void SetUp() { } virtual void TearDown() { } void InitSession() { InSequence sequence; EXPECT_CALL(listener_, OnSessionCreated()); EXPECT_CALL(wire_, GetNextMessage()); session_.DoPair(&listener_); } StrictMock interface_; StrictMock wire_; StrictMock challenge_; PairingContext context_; StrictMock listener_; StrictMock session_; }; TEST_F(ServerPairingSessionTest, DoInitializationPhase) { InitSession(); } TEST_F(ServerPairingSessionTest, DoConfigurationPhase) { InitSession(); InSequence sequence; EXPECT_CALL(wire_, GetNextMessage()); session_.TestDoInitializationPhase(); } TEST_F(ServerPairingSessionTest, OnPairingRequestMessage) { InitSession(); InSequence sequence; EXPECT_CALL(wire_, SendPairingRequestAckMessage(_)); EXPECT_CALL(wire_, GetNextMessage()); message::PairingRequestMessage message("service1"); session_.OnPairingRequestMessage(message); } TEST_F(ServerPairingSessionTest, OnOptionsMessage) { InitSession(); InSequence sequence; EXPECT_CALL(wire_, SendOptionsMessage(_)); EXPECT_CALL(wire_, GetNextMessage()); message::OptionsMessage message; session_.OnOptionsMessage(message); } TEST_F(ServerPairingSessionTest, OnConfigurationMessage) { encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8); session_.AddInputEncoding(encoding); session_.AddOutputEncoding(encoding); InitSession(); InSequence sequence; EXPECT_CALL(wire_, SendConfigurationAckMessage(_)); EXPECT_CALL(challenge_, GetGamma(_)).WillOnce(Return(new Gamma(5, 0x5))); EXPECT_CALL(listener_, OnPerformOutputDeviceRole(Gamma(5, 0x5))); EXPECT_CALL(wire_, GetNextMessage()); message::ConfigurationMessage message(encoding, message::OptionsMessage::kInputDevice); session_.OnConfigurationMessage(message); } } // namespace pairing } // namespace polo