• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 ClientPairingSession.
16 
17 #include <gtest/gtest.h>
18 #include <polo/pairing/clientpairingsession.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 TestClientPairingSession : public ClientPairingSession {
32  public:
TestClientPairingSession(wire::PoloWireAdapter * wire,PairingContext * context,PoloChallengeResponse * challenge)33   TestClientPairingSession(wire::PoloWireAdapter* wire,
34                           PairingContext* context,
35                           PoloChallengeResponse* challenge)
36       : ClientPairingSession(wire, context, challenge, "service1", "client1") {
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 MATCHER_P2(PairingRequestEq, service_name, client_name, "") {
53   return arg.service_name() == service_name
54       && arg.client_name() == client_name;
55 }
56 
57 class ClientPairingSessionTest : public ::testing::Test {
58  protected:
ClientPairingSessionTest()59   ClientPairingSessionTest()
60       : interface_(),
61         wire_(&interface_),
62         challenge_(),
63         context_(NULL, NULL, false),
64         session_(&wire_, &context_, &challenge_) {
65   }
66 
SetUp()67   virtual void SetUp() {
68   }
69 
TearDown()70   virtual void TearDown() {
71   }
72 
InitSession()73   void InitSession() {
74     InSequence sequence;
75 
76     EXPECT_CALL(listener_, OnSessionCreated());
77 
78     EXPECT_CALL(wire_, SendPairingRequestMessage(
79         PairingRequestEq("service1", "client1")));
80 
81     EXPECT_CALL(wire_, GetNextMessage());
82 
83     session_.DoPair(&listener_);
84   }
85 
86   StrictMock<wire::MockWireInterface> interface_;
87   StrictMock<wire::MockWireAdapter> wire_;
88   StrictMock<MockChallengeResponse> challenge_;
89   PairingContext context_;
90   StrictMock<MockPairingListener> listener_;
91   StrictMock<TestClientPairingSession> session_;
92 };
93 
TEST_F(ClientPairingSessionTest,DoInitializationPhase)94 TEST_F(ClientPairingSessionTest, DoInitializationPhase) {
95   InitSession();
96 }
97 
TEST_F(ClientPairingSessionTest,DoConfigurationPhase)98 TEST_F(ClientPairingSessionTest, DoConfigurationPhase) {
99   InitSession();
100   InSequence sequence;
101   encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8);
102   message::ConfigurationMessage configuration(encoding,
103       message::OptionsMessage::kInputDevice);
104   session_.TestSetConfiguration(configuration);
105 
106   EXPECT_CALL(wire_, SendConfigurationMessage(_));
107   EXPECT_CALL(wire_, GetNextMessage());
108 
109   session_.TestDoConfigurationPhase();
110 }
111 
TEST_F(ClientPairingSessionTest,OnPairingRequestAckMessage)112 TEST_F(ClientPairingSessionTest, OnPairingRequestAckMessage) {
113   InitSession();
114   InSequence sequence;
115   EXPECT_CALL(wire_, SendOptionsMessage(_));
116   EXPECT_CALL(wire_, GetNextMessage());
117 
118   message::PairingRequestAckMessage message;
119   session_.OnPairingRequestAckMessage(message);
120 }
121 
TEST_F(ClientPairingSessionTest,OnOptionsMessage)122 TEST_F(ClientPairingSessionTest, OnOptionsMessage) {
123   encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8);
124   session_.AddInputEncoding(encoding);
125   session_.AddOutputEncoding(encoding);
126 
127   InitSession();
128 
129   InSequence sequence;
130 
131   EXPECT_CALL(wire_, SendConfigurationMessage(_));
132   EXPECT_CALL(wire_, GetNextMessage());
133 
134   message::OptionsMessage message;
135   message.AddInputEncoding(encoding);
136   message.AddOutputEncoding(encoding);
137   message.set_protocol_role_preference(message::OptionsMessage::kInputDevice);
138   session_.OnOptionsMessage(message);
139 }
140 
TEST_F(ClientPairingSessionTest,OnConfigurationAckMessage)141 TEST_F(ClientPairingSessionTest, OnConfigurationAckMessage) {
142   InitSession();
143   InSequence sequence;
144   encoding::EncodingOption encoding(encoding::EncodingOption::kHexadecimal, 8);
145   message::ConfigurationMessage configuration(encoding,
146       message::OptionsMessage::kInputDevice);
147   session_.TestSetConfiguration(configuration);
148 
149   EXPECT_CALL(listener_, OnPerformInputDeviceRole());
150 
151   message::ConfigurationAckMessage message;
152   session_.OnConfigurationAckMessage(message);
153 }
154 
155 }  // namespace pairing
156 }  // namespace polo
157