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 "base/memory/ref_counted.h" | 5 #include "base/memory/ref_counted.h" |
| 6 #include "base/message_loop.h" |
6 #include "chrome/browser/extensions/api/dial/dial_device_data.h" | 7 #include "chrome/browser/extensions/api/dial/dial_device_data.h" |
7 #include "chrome/browser/extensions/api/dial/dial_service.h" | 8 #include "chrome/browser/extensions/api/dial/dial_service.h" |
8 #include "net/base/capturing_net_log.h" | 9 #include "net/base/capturing_net_log.h" |
| 10 #include "net/base/ip_endpoint.h" |
9 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
11 | 13 |
12 using base::Time; | 14 using base::Time; |
| 15 using base::TimeDelta; |
13 using ::testing::A; | 16 using ::testing::A; |
14 using ::testing::AtLeast; | 17 using ::testing::AtLeast; |
15 using ::testing::Return; | 18 using ::testing::Return; |
16 | 19 |
17 namespace { | 20 namespace { |
18 | 21 |
19 const char kValidResponse[] = | 22 const char kValidResponse[] = |
20 "HTTP/1.1 OK\r\n" | 23 "HTTP/1.1 OK\r\n" |
21 "LOCATION: http://127.0.0.1/dd.xml\r\n" | 24 "LOCATION: http://127.0.0.1/dd.xml\r\n" |
22 "USN: some_id\r\n" | 25 "USN: some_id\r\n" |
23 "CACHE-CONTROL: max-age=1800\r\n" | 26 "CACHE-CONTROL: max-age=1800\r\n" |
24 "CONFIGID.UPNP.ORG: 1\r\n\r\n"; | 27 "CONFIGID.UPNP.ORG: 1\r\n\r\n"; |
25 | 28 |
26 } // namespace | 29 } // namespace |
27 | 30 |
28 namespace extensions { | 31 namespace extensions { |
29 | 32 |
30 class MockObserver : public DialService::Observer { | 33 class MockObserver : public DialService::Observer { |
31 public: | 34 public: |
32 MOCK_METHOD1(OnDiscoveryRequest, void(DialService*)); | 35 MOCK_METHOD1(OnDiscoveryRequest, void(DialService*)); |
33 MOCK_METHOD2(OnDeviceDiscovered, void(DialService*, const DialDeviceData&)); | 36 MOCK_METHOD2(OnDeviceDiscovered, void(DialService*, const DialDeviceData&)); |
34 MOCK_METHOD1(OnDiscoveryFinished, void(DialService*)); | 37 MOCK_METHOD1(OnDiscoveryFinished, void(DialService*)); |
35 MOCK_METHOD2(OnError, void(DialService*, | 38 MOCK_METHOD2(OnError, void(DialService*, |
36 const DialService::DialServiceErrorCode&)); | 39 const DialService::DialServiceErrorCode&)); |
37 }; | 40 }; |
38 | 41 |
39 class DialServiceTest : public testing::Test { | 42 class DialServiceTest : public testing::Test { |
40 public: | 43 public: |
41 DialServiceTest() : dial_service_(&capturing_net_log_) { | 44 DialServiceTest() : dial_service_(&capturing_net_log_) { |
| 45 CHECK(net::ParseIPLiteralToNumber("0.0.0.0", &mock_ip_)); |
42 dial_service_.AddObserver(&mock_observer_); | 46 dial_service_.AddObserver(&mock_observer_); |
43 } | 47 } |
44 protected: | 48 protected: |
45 net::CapturingNetLog capturing_net_log_; | 49 net::CapturingNetLog capturing_net_log_; |
| 50 net::IPAddressNumber mock_ip_; |
46 DialServiceImpl dial_service_; | 51 DialServiceImpl dial_service_; |
47 MockObserver mock_observer_; | 52 MockObserver mock_observer_; |
48 }; | 53 }; |
49 | 54 |
| 55 TEST_F(DialServiceTest, TestSendMultipleRequests) { |
| 56 MessageLoop loop(MessageLoop::TYPE_IO); |
| 57 // Setting the finish delay to zero disables the timer that invokes |
| 58 // FinishDiscovery(). |
| 59 dial_service_.finish_delay_ = TimeDelta::FromSeconds(0); |
| 60 dial_service_.request_interval_ = TimeDelta::FromSeconds(0); |
| 61 dial_service_.max_requests_ = 4; |
| 62 dial_service_.discovery_active_ = true; |
| 63 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(4); |
| 64 EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); |
| 65 dial_service_.BindSocketAndSendRequest(mock_ip_); |
| 66 loop.RunUntilIdle(); |
| 67 dial_service_.FinishDiscovery(); |
| 68 } |
| 69 |
50 TEST_F(DialServiceTest, TestOnDiscoveryRequest) { | 70 TEST_F(DialServiceTest, TestOnDiscoveryRequest) { |
51 dial_service_.discovery_active_ = true; | 71 dial_service_.discovery_active_ = true; |
| 72 dial_service_.num_requests_sent_ = 1; |
| 73 dial_service_.max_requests_ = 1; |
52 size_t num_bytes = dial_service_.send_buffer_->size(); | 74 size_t num_bytes = dial_service_.send_buffer_->size(); |
53 | |
54 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(1); | 75 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(1); |
55 dial_service_.OnSocketWrite(num_bytes); | 76 dial_service_.OnSocketWrite(num_bytes); |
56 } | 77 } |
57 | 78 |
58 TEST_F(DialServiceTest, TestOnDeviceDiscovered) { | 79 TEST_F(DialServiceTest, TestOnDeviceDiscovered) { |
59 dial_service_.discovery_active_ = true; | 80 dial_service_.discovery_active_ = true; |
60 int response_size = arraysize(kValidResponse) - 1; | 81 int response_size = arraysize(kValidResponse) - 1; |
61 dial_service_.recv_buffer_ = new net::IOBufferWithSize(response_size); | 82 dial_service_.recv_buffer_ = new net::IOBufferWithSize(response_size); |
62 strncpy(dial_service_.recv_buffer_->data(), kValidResponse, response_size); | 83 strncpy(dial_service_.recv_buffer_->data(), kValidResponse, response_size); |
| 84 dial_service_.recv_address_ = net::IPEndPoint(mock_ip_, 12345); |
63 | 85 |
64 DialDeviceData expected_device; | 86 DialDeviceData expected_device; |
65 expected_device.set_device_id("some_id"); | 87 expected_device.set_device_id("some_id"); |
66 | 88 |
67 EXPECT_CALL(mock_observer_, | 89 EXPECT_CALL(mock_observer_, |
68 OnDeviceDiscovered(A<DialService*>(), expected_device)) | 90 OnDeviceDiscovered(A<DialService*>(), expected_device)) |
69 .Times(1); | 91 .Times(1); |
70 dial_service_.OnSocketRead(response_size); | 92 dial_service_.OnSocketRead(response_size); |
71 }; | 93 }; |
72 | 94 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 | 152 |
131 // Empty USN | 153 // Empty USN |
132 EXPECT_FALSE(DialServiceImpl::ParseResponse( | 154 EXPECT_FALSE(DialServiceImpl::ParseResponse( |
133 "HTTP/1.1 OK\r\n" | 155 "HTTP/1.1 OK\r\n" |
134 "LOCATION: http://127.0.0.1/dd.xml\r\n" | 156 "LOCATION: http://127.0.0.1/dd.xml\r\n" |
135 "USN:\r\n\r\n", | 157 "USN:\r\n\r\n", |
136 now, ¬_parsed)); | 158 now, ¬_parsed)); |
137 } | 159 } |
138 | 160 |
139 } // namespace extensions | 161 } // namespace extensions |
OLD | NEW |