blob: 91d1339284679be5cd22a8d566fba7a1e958f2ca [file] [log] [blame]
Jerome Poichet7c997852014-05-20 10:50:05 -07001// 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
22using ::testing::InSequence;
23using ::testing::Mock;
24using ::testing::Return;
25using ::testing::StrictMock;
26using ::testing::_;
27
28namespace polo {
29namespace pairing {
30
31class TestClientPairingSession : public ClientPairingSession {
32 public:
33 TestClientPairingSession(wire::PoloWireAdapter* wire,
34 PairingContext* context,
35 PoloChallengeResponse* challenge)
36 : ClientPairingSession(wire, context, challenge, "service1", "client1") {
37 }
38
39 void TestDoInitializationPhase() {
40 DoInitializationPhase();
41 }
42
43 void TestDoConfigurationPhase() {
44 DoConfigurationPhase();
45 }
46
47 bool TestSetConfiguration(const message::ConfigurationMessage& config) {
48 return SetConfiguration(config);
49 }
50};
51
52MATCHER_P2(PairingRequestEq, service_name, client_name, "") {
53 return arg.service_name() == service_name
54 && arg.client_name() == client_name;
55}
56
57class ClientPairingSessionTest : public ::testing::Test {
58 protected:
59 ClientPairingSessionTest()
60 : interface_(),
61 wire_(&interface_),
62 challenge_(),
63 context_(NULL, NULL, false),
64 session_(&wire_, &context_, &challenge_) {
65 }
66
67 virtual void SetUp() {
68 }
69
70 virtual void TearDown() {
71 }
72
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
94TEST_F(ClientPairingSessionTest, DoInitializationPhase) {
95 InitSession();
96}
97
98TEST_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
112TEST_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
122TEST_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
141TEST_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