1 // Copyright 2012 Google Inc. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 // Tests for ServerPairingSession.
16
17 #include <gtest/gtest.h>
18 #include <polo/pairing/serverpairingsession.h>
19 #include "polo/pairing/mocks.h"
20 #include "polo/wire/mocks.h"
21
22 using ::testing::InSequence;
23 using ::testing::Mock;
24 using ::testing::Return;
25 using ::testing::StrictMock;
26 using ::testing::_;
27
28 namespace polo {
29 namespace pairing {
30
31 class TestServerPairingSession : public ServerPairingSession {
32 public:
TestServerPairingSession(wire::PoloWireAdapter * wire,PairingContext * context,PoloChallengeResponse * challenge)33 TestServerPairingSession(wire::PoloWireAdapter* wire,
34 PairingContext* context,
35 PoloChallengeResponse* challenge)
36 : ServerPairingSession(wire, context, challenge, "server1") {
37 }
38
TestDoInitializationPhase()39 void TestDoInitializationPhase() {
40 DoInitializationPhase();
41 }
42
TestDoConfigurationPhase()43 void TestDoConfigurationPhase() {
44 DoConfigurationPhase();
45 }
46
TestSetConfiguration(const message::ConfigurationMessage & config)47 bool TestSetConfiguration(const message::ConfigurationMessage& config) {
48 return SetConfiguration(config);
49 }
50 };
51
52 class ServerPairingSessionTest : public ::testing::Test {
53 protected:
ServerPairingSessionTest()54 ServerPairingSessionTest()
55 : interface_(),
56 wire_(&interface_),
57 challenge_(),
58 context_(NULL, NULL, true),
59 session_(&wire_, &context_, &challenge_) {
60 }
61
SetUp()62 virtual void SetUp() {
63 }
64
TearDown()65 virtual void TearDown() {
66 }
67
InitSession()68 void InitSession() {
69 InSequence sequence;
70
71 EXPECT_CALL(listener_, OnSessionCreated());
72 EXPECT_CALL(wire_, GetNextMessage());
73
74 session_.DoPair(&listener_);
75 }
76
77 StrictMock<wire::MockWireInterface> interface_;
78 StrictMock<wire::MockWireAdapter> wire_;
79 StrictMock<MockChallengeResponse> challenge_;
80 PairingContext context_;
81 StrictMock<MockPairingListener> listener_;
82 StrictMock<TestServerPairingSession> session_;
83 };
84
TEST_F(ServerPairingSessionTest,DoInitializationPhase)85 TEST_F(ServerPairingSessionTest, DoInitializationPhase) {
86 InitSession();
87 }
88
TEST_F(ServerPairingSessionTest,DoConfigurationPhase)89 TEST_F(ServerPairingSessionTest, DoConfigurationPhase) {
90 InitSession();
91 InSequence sequence;
92 EXPECT_CALL(wire_, GetNextMessage());
93
94 session_.TestDoInitializationPhase();
95 }
96
TEST_F(ServerPairingSessionTest,OnPairingRequestMessage)97 TEST_F(ServerPairingSessionTest, OnPairingRequestMessage) {
98 InitSession();
99 InSequence sequence;
100 EXPECT_CALL(wire_, SendPairingRequestAckMessage(_));
101 EXPECT_CALL(wire_, GetNextMessage());
102
103 message::PairingRequestMessage message("service1");
104 session_.OnPairingRequestMessage(message);
105 }
106
TEST_F(ServerPairingSessionTest,OnOptionsMessage)107 TEST_F(ServerPairingSessionTest, OnOptionsMessage) {
108 InitSession();
109 InSequence sequence;
110 EXPECT_CALL(wire_, SendOptionsMessage(_));
111 EXPECT_CALL(wire_, GetNextMessage());
112
113 message::OptionsMessage message;
114 session_.OnOptionsMessage(message);
115 }
116
TEST_F(ServerPairingSessionTest,OnConfigurationMessage)117 TEST_F(ServerPairingSessionTest, OnConfigurationMessage) {
118 encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8);
119 session_.AddInputEncoding(encoding);
120 session_.AddOutputEncoding(encoding);
121
122 InitSession();
123
124 InSequence sequence;
125 EXPECT_CALL(wire_, SendConfigurationAckMessage(_));
126
127 EXPECT_CALL(challenge_, GetGamma(_)).WillOnce(Return(new Gamma(5, 0x5)));
128 EXPECT_CALL(listener_, OnPerformOutputDeviceRole(Gamma(5, 0x5)));
129 EXPECT_CALL(wire_, GetNextMessage());
130
131 message::ConfigurationMessage message(encoding,
132 message::OptionsMessage::kInputDevice);
133 session_.OnConfigurationMessage(message);
134 }
135
136 } // namespace pairing
137 } // namespace polo
138