| 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*, const std::string&)); | 38 MOCK_METHOD2(OnError, void(DialService*, const std::string&)); |
| 36 }; | 39 }; |
| 37 | 40 |
| 38 class DialServiceTest : public testing::Test { | 41 class DialServiceTest : public testing::Test { |
| 39 public: | 42 public: |
| 40 DialServiceTest() { | 43 DialServiceTest() { |
| 44 DCHECK(net::ParseIPLiteralToNumber("127.0.0.1", &localhost_ip_)); |
| 41 dial_service_ = new DialServiceImpl(&capturing_net_log_); | 45 dial_service_ = new DialServiceImpl(&capturing_net_log_); |
| 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 localhost_ip_; |
| 46 scoped_refptr<DialServiceImpl> dial_service_; | 51 scoped_refptr<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(localhost_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(localhost_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 |