OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/heartbeat_sender.h" | 5 #include "remoting/host/heartbeat_sender.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 TEST_F(HeartbeatSenderTest, DoSendStanza) { | 91 TEST_F(HeartbeatSenderTest, DoSendStanza) { |
92 XmlElement* sent_iq = NULL; | 92 XmlElement* sent_iq = NULL; |
93 EXPECT_CALL(signal_strategy_, GetLocalJid()) | 93 EXPECT_CALL(signal_strategy_, GetLocalJid()) |
94 .WillRepeatedly(Return(kTestJid)); | 94 .WillRepeatedly(Return(kTestJid)); |
95 EXPECT_CALL(signal_strategy_, GetNextId()) | 95 EXPECT_CALL(signal_strategy_, GetNextId()) |
96 .WillOnce(Return(kStanzaId)); | 96 .WillOnce(Return(kStanzaId)); |
97 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) | 97 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) |
98 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); | 98 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); |
99 | 99 |
100 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); | 100 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); |
101 message_loop_.RunAllPending(); | 101 message_loop_.RunUntilIdle(); |
102 | 102 |
103 scoped_ptr<XmlElement> stanza(sent_iq); | 103 scoped_ptr<XmlElement> stanza(sent_iq); |
104 ASSERT_TRUE(stanza != NULL); | 104 ASSERT_TRUE(stanza != NULL); |
105 ValidateHeartbeatStanza(stanza.get(), "0"); | 105 ValidateHeartbeatStanza(stanza.get(), "0"); |
106 | 106 |
107 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); | 107 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); |
108 message_loop_.RunAllPending(); | 108 message_loop_.RunUntilIdle(); |
109 } | 109 } |
110 | 110 |
111 // Call Start() followed by Stop(), twice, and make sure two valid heartbeats | 111 // Call Start() followed by Stop(), twice, and make sure two valid heartbeats |
112 // are sent, with the correct sequence IDs. | 112 // are sent, with the correct sequence IDs. |
113 TEST_F(HeartbeatSenderTest, DoSendStanzaTwice) { | 113 TEST_F(HeartbeatSenderTest, DoSendStanzaTwice) { |
114 XmlElement* sent_iq = NULL; | 114 XmlElement* sent_iq = NULL; |
115 EXPECT_CALL(signal_strategy_, GetLocalJid()) | 115 EXPECT_CALL(signal_strategy_, GetLocalJid()) |
116 .WillRepeatedly(Return(kTestJid)); | 116 .WillRepeatedly(Return(kTestJid)); |
117 EXPECT_CALL(signal_strategy_, GetNextId()) | 117 EXPECT_CALL(signal_strategy_, GetNextId()) |
118 .WillOnce(Return(kStanzaId)); | 118 .WillOnce(Return(kStanzaId)); |
119 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) | 119 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) |
120 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); | 120 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); |
121 | 121 |
122 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); | 122 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); |
123 message_loop_.RunAllPending(); | 123 message_loop_.RunUntilIdle(); |
124 | 124 |
125 scoped_ptr<XmlElement> stanza(sent_iq); | 125 scoped_ptr<XmlElement> stanza(sent_iq); |
126 ASSERT_TRUE(stanza != NULL); | 126 ASSERT_TRUE(stanza != NULL); |
127 ValidateHeartbeatStanza(stanza.get(), "0"); | 127 ValidateHeartbeatStanza(stanza.get(), "0"); |
128 | 128 |
129 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); | 129 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); |
130 message_loop_.RunAllPending(); | 130 message_loop_.RunUntilIdle(); |
131 | 131 |
132 EXPECT_CALL(signal_strategy_, GetLocalJid()) | 132 EXPECT_CALL(signal_strategy_, GetLocalJid()) |
133 .WillRepeatedly(Return(kTestJid)); | 133 .WillRepeatedly(Return(kTestJid)); |
134 EXPECT_CALL(signal_strategy_, GetNextId()) | 134 EXPECT_CALL(signal_strategy_, GetNextId()) |
135 .WillOnce(Return(kStanzaId + 1)); | 135 .WillOnce(Return(kStanzaId + 1)); |
136 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) | 136 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) |
137 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); | 137 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); |
138 | 138 |
139 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); | 139 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); |
140 message_loop_.RunAllPending(); | 140 message_loop_.RunUntilIdle(); |
141 | 141 |
142 scoped_ptr<XmlElement> stanza2(sent_iq); | 142 scoped_ptr<XmlElement> stanza2(sent_iq); |
143 ValidateHeartbeatStanza(stanza2.get(), "1"); | 143 ValidateHeartbeatStanza(stanza2.get(), "1"); |
144 | 144 |
145 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); | 145 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); |
146 message_loop_.RunAllPending(); | 146 message_loop_.RunUntilIdle(); |
147 } | 147 } |
148 | 148 |
149 // Call Start() followed by Stop(), make sure a valid Iq stanza is sent, | 149 // Call Start() followed by Stop(), make sure a valid Iq stanza is sent, |
150 // reply with an expected sequence ID, and make sure two valid heartbeats | 150 // reply with an expected sequence ID, and make sure two valid heartbeats |
151 // are sent, with the correct sequence IDs. | 151 // are sent, with the correct sequence IDs. |
152 TEST_F(HeartbeatSenderTest, DoSendStanzaWithExpectedSequenceId) { | 152 TEST_F(HeartbeatSenderTest, DoSendStanzaWithExpectedSequenceId) { |
153 XmlElement* sent_iq = NULL; | 153 XmlElement* sent_iq = NULL; |
154 EXPECT_CALL(signal_strategy_, GetLocalJid()) | 154 EXPECT_CALL(signal_strategy_, GetLocalJid()) |
155 .WillRepeatedly(Return(kTestJid)); | 155 .WillRepeatedly(Return(kTestJid)); |
156 EXPECT_CALL(signal_strategy_, GetNextId()) | 156 EXPECT_CALL(signal_strategy_, GetNextId()) |
157 .WillOnce(Return(kStanzaId)); | 157 .WillOnce(Return(kStanzaId)); |
158 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) | 158 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) |
159 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); | 159 .WillOnce(DoAll(SaveArg<0>(&sent_iq), Return(true))); |
160 | 160 |
161 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); | 161 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::CONNECTED); |
162 message_loop_.RunAllPending(); | 162 message_loop_.RunUntilIdle(); |
163 | 163 |
164 scoped_ptr<XmlElement> stanza(sent_iq); | 164 scoped_ptr<XmlElement> stanza(sent_iq); |
165 ASSERT_TRUE(stanza != NULL); | 165 ASSERT_TRUE(stanza != NULL); |
166 ValidateHeartbeatStanza(stanza.get(), "0"); | 166 ValidateHeartbeatStanza(stanza.get(), "0"); |
167 | 167 |
168 XmlElement* sent_iq2 = NULL; | 168 XmlElement* sent_iq2 = NULL; |
169 EXPECT_CALL(signal_strategy_, GetLocalJid()) | 169 EXPECT_CALL(signal_strategy_, GetLocalJid()) |
170 .WillRepeatedly(Return(kTestJid)); | 170 .WillRepeatedly(Return(kTestJid)); |
171 EXPECT_CALL(signal_strategy_, GetNextId()) | 171 EXPECT_CALL(signal_strategy_, GetNextId()) |
172 .WillOnce(Return(kStanzaId + 1)); | 172 .WillOnce(Return(kStanzaId + 1)); |
173 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) | 173 EXPECT_CALL(signal_strategy_, SendStanzaPtr(NotNull())) |
174 .WillOnce(DoAll(SaveArg<0>(&sent_iq2), Return(true))); | 174 .WillOnce(DoAll(SaveArg<0>(&sent_iq2), Return(true))); |
175 | 175 |
176 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ)); | 176 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ)); |
177 response->AddAttr(QName("", "type"), "result"); | 177 response->AddAttr(QName("", "type"), "result"); |
178 XmlElement* result = new XmlElement( | 178 XmlElement* result = new XmlElement( |
179 QName(kChromotingXmlNamespace, "heartbeat-result")); | 179 QName(kChromotingXmlNamespace, "heartbeat-result")); |
180 response->AddElement(result); | 180 response->AddElement(result); |
181 XmlElement* expected_sequence_id = new XmlElement( | 181 XmlElement* expected_sequence_id = new XmlElement( |
182 QName(kChromotingXmlNamespace, "expected-sequence-id")); | 182 QName(kChromotingXmlNamespace, "expected-sequence-id")); |
183 result->AddElement(expected_sequence_id); | 183 result->AddElement(expected_sequence_id); |
184 const int kExpectedSequenceId = 456; | 184 const int kExpectedSequenceId = 456; |
185 expected_sequence_id->AddText(base::IntToString(kExpectedSequenceId)); | 185 expected_sequence_id->AddText(base::IntToString(kExpectedSequenceId)); |
186 heartbeat_sender_->ProcessResponse(NULL, response.get()); | 186 heartbeat_sender_->ProcessResponse(NULL, response.get()); |
187 message_loop_.RunAllPending(); | 187 message_loop_.RunUntilIdle(); |
188 | 188 |
189 scoped_ptr<XmlElement> stanza2(sent_iq2); | 189 scoped_ptr<XmlElement> stanza2(sent_iq2); |
190 ASSERT_TRUE(stanza2 != NULL); | 190 ASSERT_TRUE(stanza2 != NULL); |
191 ValidateHeartbeatStanza(stanza2.get(), | 191 ValidateHeartbeatStanza(stanza2.get(), |
192 base::IntToString(kExpectedSequenceId).c_str()); | 192 base::IntToString(kExpectedSequenceId).c_str()); |
193 | 193 |
194 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); | 194 heartbeat_sender_->OnSignalStrategyStateChange(SignalStrategy::DISCONNECTED); |
195 message_loop_.RunAllPending(); | 195 message_loop_.RunUntilIdle(); |
196 } | 196 } |
197 | 197 |
198 // Verify that ProcessResponse parses set-interval result. | 198 // Verify that ProcessResponse parses set-interval result. |
199 TEST_F(HeartbeatSenderTest, ProcessResponseSetInterval) { | 199 TEST_F(HeartbeatSenderTest, ProcessResponseSetInterval) { |
200 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ)); | 200 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ)); |
201 response->AddAttr(QName("", "type"), "result"); | 201 response->AddAttr(QName("", "type"), "result"); |
202 | 202 |
203 XmlElement* result = new XmlElement( | 203 XmlElement* result = new XmlElement( |
204 QName(kChromotingXmlNamespace, "heartbeat-result")); | 204 QName(kChromotingXmlNamespace, "heartbeat-result")); |
205 response->AddElement(result); | 205 response->AddElement(result); |
(...skipping 30 matching lines...) Expand all Loading... |
236 EXPECT_TRUE(heartbeat_stanza->NextNamed(signature_tag) == NULL); | 236 EXPECT_TRUE(heartbeat_stanza->NextNamed(signature_tag) == NULL); |
237 | 237 |
238 HostKeyPair key_pair; | 238 HostKeyPair key_pair; |
239 key_pair.LoadFromString(kTestHostKeyPair); | 239 key_pair.LoadFromString(kTestHostKeyPair); |
240 std::string expected_signature = | 240 std::string expected_signature = |
241 key_pair.GetSignature(std::string(kTestJid) + ' ' + expectedSequenceId); | 241 key_pair.GetSignature(std::string(kTestJid) + ' ' + expectedSequenceId); |
242 EXPECT_EQ(expected_signature, signature->BodyText()); | 242 EXPECT_EQ(expected_signature, signature->BodyText()); |
243 } | 243 } |
244 | 244 |
245 } // namespace remoting | 245 } // namespace remoting |
OLD | NEW |