OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <queue> | 5 #include <queue> |
6 | 6 |
7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "net/base/rand_callback.h" | 9 #include "net/base/rand_callback.h" |
10 #include "net/base/test_completion_callback.h" | 10 #include "net/base/test_completion_callback.h" |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 // Question | 234 // Question |
235 // This part is echoed back from the respective query. | 235 // This part is echoed back from the respective query. |
236 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', | 236 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', |
237 0x04, '_', 't', 'c', 'p', | 237 0x04, '_', 't', 'c', 'p', |
238 0x05, 'l', 'o', 'c', 'a', 'l', | 238 0x05, 'l', 'o', 'c', 'a', 'l', |
239 0x00, | 239 0x00, |
240 0x00, 0x0c, // TYPE is PTR. | 240 0x00, 0x0c, // TYPE is PTR. |
241 0x00, 0x01, // CLASS is IN. | 241 0x00, 0x01, // CLASS is IN. |
242 }; | 242 }; |
243 | 243 |
| 244 const uint8 kQueryPacketPrivetA[] = { |
| 245 // Header |
| 246 0x00, 0x00, // ID is zeroed out |
| 247 0x00, 0x00, // No flags. |
| 248 0x00, 0x01, // One question. |
| 249 0x00, 0x00, // 0 RRs (answers) |
| 250 0x00, 0x00, // 0 authority RRs |
| 251 0x00, 0x00, // 0 additional RRs |
| 252 |
| 253 // Question |
| 254 // This part is echoed back from the respective query. |
| 255 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', |
| 256 0x04, '_', 't', 'c', 'p', |
| 257 0x05, 'l', 'o', 'c', 'a', 'l', |
| 258 0x00, |
| 259 0x00, 0x01, // TYPE is A. |
| 260 0x00, 0x01, // CLASS is IN. |
| 261 }; |
| 262 |
244 const uint8 kSamplePacketAdditionalOnly[] = { | 263 const uint8 kSamplePacketAdditionalOnly[] = { |
245 // Header | 264 // Header |
246 0x00, 0x00, // ID is zeroed out | 265 0x00, 0x00, // ID is zeroed out |
247 0x81, 0x80, // Standard query response, RA, no error | 266 0x81, 0x80, // Standard query response, RA, no error |
248 0x00, 0x00, // No questions (for simplicity) | 267 0x00, 0x00, // No questions (for simplicity) |
249 0x00, 0x00, // 2 RRs (answers) | 268 0x00, 0x00, // 2 RRs (answers) |
250 0x00, 0x00, // 0 authority RRs | 269 0x00, 0x00, // 0 authority RRs |
251 0x00, 0x01, // 0 additional RRs | 270 0x00, 0x01, // 0 additional RRs |
252 | 271 |
253 // Answer 1 | 272 // Answer 1 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 0x00, 0x00, // 0 authority RRs | 315 0x00, 0x00, // 0 authority RRs |
297 0x00, 0x00, // 0 additional RRs | 316 0x00, 0x00, // 0 additional RRs |
298 | 317 |
299 // Answer 1 | 318 // Answer 1 |
300 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', | 319 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', |
301 0x04, '_', 't', 'c', 'p', | 320 0x04, '_', 't', 'c', 'p', |
302 0x05, 'l', 'o', 'c', 'a', 'l', | 321 0x05, 'l', 'o', 'c', 'a', 'l', |
303 0x00, | 322 0x00, |
304 0x00, 0x01, // TYPE is A. | 323 0x00, 0x01, // TYPE is A. |
305 0x00, 0x01, // CLASS is IN. | 324 0x00, 0x01, // CLASS is IN. |
306 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. | 325 0x00, 0x00, // TTL (4 bytes) is 5 seconds |
307 0x24, 0x74, | 326 0x00, 0x05, |
308 0x00, 0x04, // RDLENGTH is 4 bytes. | 327 0x00, 0x04, // RDLENGTH is 4 bytes. |
309 0xc0, 0x0c, | 328 0xc0, 0x0c, |
310 0x00, 0x02, | 329 0x00, 0x02, |
311 }; | 330 }; |
312 | 331 |
313 const uint8 kSamplePacketGoodbye[] = { | 332 const uint8 kSamplePacketGoodbye[] = { |
314 // Header | 333 // Header |
315 0x00, 0x00, // ID is zeroed out | 334 0x00, 0x00, // ID is zeroed out |
316 0x81, 0x80, // Standard query response, RA, no error | 335 0x81, 0x80, // Standard query response, RA, no error |
317 0x00, 0x00, // No questions (for simplicity) | 336 0x00, 0x00, // No questions (for simplicity) |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1001 EXPECT_CALL(delegate_privet, | 1020 EXPECT_CALL(delegate_privet, |
1002 OnNsecRecord("_privet._tcp.local", dns_protocol::kTypeA)); | 1021 OnNsecRecord("_privet._tcp.local", dns_protocol::kTypeA)); |
1003 | 1022 |
1004 SimulatePacketReceive(kSamplePacketNsec, | 1023 SimulatePacketReceive(kSamplePacketNsec, |
1005 sizeof(kSamplePacketNsec)); | 1024 sizeof(kSamplePacketNsec)); |
1006 | 1025 |
1007 EXPECT_EQ(record1, record2); | 1026 EXPECT_EQ(record1, record2); |
1008 } | 1027 } |
1009 | 1028 |
1010 | 1029 |
| 1030 TEST_F(MDnsTest, RefreshQuery) { |
| 1031 StrictMock<MockListenerDelegate> delegate_privet; |
| 1032 scoped_ptr<MDnsListener> listener_privet = |
| 1033 test_client_.CreateListener(dns_protocol::kTypeA, "_privet._tcp.local", |
| 1034 &delegate_privet); |
| 1035 |
| 1036 listener_privet->SetActiveRefresh(true); |
| 1037 ASSERT_TRUE(listener_privet->Start()); |
| 1038 |
| 1039 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)); |
| 1040 |
| 1041 SimulatePacketReceive(kSamplePacketAPrivet, |
| 1042 sizeof(kSamplePacketAPrivet)); |
| 1043 |
| 1044 // Expecting 2 calls (one for ipv4 and one for ipv6) for each of the 2 |
| 1045 // scheduled refresh queries. |
| 1046 EXPECT_CALL(socket_factory_, OnSendTo( |
| 1047 MakeString(kQueryPacketPrivetA, sizeof(kQueryPacketPrivetA)))) |
| 1048 .Times(4); |
| 1049 |
| 1050 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_REMOVED, _)); |
| 1051 |
| 1052 RunFor(base::TimeDelta::FromSeconds(6)); |
| 1053 } |
| 1054 |
1011 // Note: These tests assume that the ipv4 socket will always be created first. | 1055 // Note: These tests assume that the ipv4 socket will always be created first. |
1012 // This is a simplifying assumption based on the way the code works now. | 1056 // This is a simplifying assumption based on the way the code works now. |
1013 class SimpleMockSocketFactory : public MDnsSocketFactory { | 1057 class SimpleMockSocketFactory : public MDnsSocketFactory { |
1014 public: | 1058 public: |
1015 virtual void CreateSockets( | 1059 virtual void CreateSockets( |
1016 ScopedVector<DatagramServerSocket>* sockets) OVERRIDE { | 1060 ScopedVector<DatagramServerSocket>* sockets) OVERRIDE { |
1017 sockets->clear(); | 1061 sockets->clear(); |
1018 sockets->swap(sockets_); | 1062 sockets->swap(sockets_); |
1019 } | 1063 } |
1020 | 1064 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1132 | 1176 |
1133 ASSERT_TRUE(InitConnection()); | 1177 ASSERT_TRUE(InitConnection()); |
1134 | 1178 |
1135 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED)); | 1179 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED)); |
1136 callback.Run(ERR_SOCKET_NOT_CONNECTED); | 1180 callback.Run(ERR_SOCKET_NOT_CONNECTED); |
1137 } | 1181 } |
1138 | 1182 |
1139 } // namespace | 1183 } // namespace |
1140 | 1184 |
1141 } // namespace net | 1185 } // namespace net |
OLD | NEW |