Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1074)

Side by Side Diff: chrome/browser/media/router/discovery/dial/dial_service_unittest.cc

Issue 2756483007: [Device Discovery] Move files from browser/extensions/api/dial to browser/media/router/discovery/di… (Closed)
Patch Set: resolve code review comments from Devlin Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/media/router/discovery/dial/dial_service.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/browser/extensions/api/dial/dial_service.h" 5 #include "chrome/browser/media/router/discovery/dial/dial_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "chrome/browser/extensions/api/dial/dial_device_data.h" 14 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
15 #include "content/public/test/test_browser_thread_bundle.h" 15 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "net/base/ip_address.h" 16 #include "net/base/ip_address.h"
17 #include "net/base/ip_endpoint.h" 17 #include "net/base/ip_endpoint.h"
18 #include "net/base/network_interfaces.h" 18 #include "net/base/network_interfaces.h"
19 #include "net/log/test_net_log.h" 19 #include "net/log/test_net_log.h"
20 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 22
23 using base::Time; 23 using base::Time;
24 using base::TimeDelta; 24 using base::TimeDelta;
25 using ::testing::A; 25 using ::testing::A;
26 using ::testing::AtLeast; 26 using ::testing::AtLeast;
27 using ::testing::Return; 27 using ::testing::Return;
28 28
29 namespace { 29 namespace {
30 30
31 const char kValidResponse[] = 31 const char kValidResponse[] =
32 "HTTP/1.1 OK\r\n" 32 "HTTP/1.1 OK\r\n"
33 "LOCATION: http://127.0.0.1/dd.xml\r\n" 33 "LOCATION: http://127.0.0.1/dd.xml\r\n"
34 "USN: some_id\r\n" 34 "USN: some_id\r\n"
35 "CACHE-CONTROL: max-age=1800\r\n" 35 "CACHE-CONTROL: max-age=1800\r\n"
36 "CONFIGID.UPNP.ORG: 1\r\n\r\n"; 36 "CONFIGID.UPNP.ORG: 1\r\n\r\n";
37 37
38 } // namespace 38 } // namespace
39 39
40 namespace extensions { 40 namespace media_router {
41 namespace api {
42 namespace dial {
43 41
44 class MockObserver : public DialService::Observer { 42 class MockObserver : public DialService::Observer {
45 public: 43 public:
46 ~MockObserver() override {} 44 ~MockObserver() override {}
47 45
48 MOCK_METHOD1(OnDiscoveryRequest, void(DialService*)); 46 MOCK_METHOD1(OnDiscoveryRequest, void(DialService*));
49 MOCK_METHOD2(OnDeviceDiscovered, void(DialService*, const DialDeviceData&)); 47 MOCK_METHOD2(OnDeviceDiscovered, void(DialService*, const DialDeviceData&));
50 MOCK_METHOD1(OnDiscoveryFinished, void(DialService*)); 48 MOCK_METHOD1(OnDiscoveryFinished, void(DialService*));
51 MOCK_METHOD2(OnError, void(DialService*, 49 MOCK_METHOD2(OnError,
52 const DialService::DialServiceErrorCode&)); 50 void(DialService*, const DialService::DialServiceErrorCode&));
53 }; 51 };
54 52
55 class DialServiceTest : public testing::Test { 53 class DialServiceTest : public testing::Test {
56 public: 54 public:
57 DialServiceTest() 55 DialServiceTest()
58 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 56 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
59 mock_ip_(net::IPAddress::IPv4AllZeros()), 57 mock_ip_(net::IPAddress::IPv4AllZeros()),
60 dial_service_(&test_net_log_) { 58 dial_service_(&test_net_log_) {
61 dial_service_.AddObserver(&mock_observer_); 59 dial_service_.AddObserver(&mock_observer_);
62 dial_socket_ = dial_service_.CreateDialSocket(); 60 dial_socket_ = dial_service_.CreateDialSocket();
63 } 61 }
62
64 protected: 63 protected:
65 content::TestBrowserThreadBundle thread_bundle_; 64 content::TestBrowserThreadBundle thread_bundle_;
66 net::TestNetLog test_net_log_; 65 net::TestNetLog test_net_log_;
67 net::IPAddress mock_ip_; 66 net::IPAddress mock_ip_;
68 DialServiceImpl dial_service_; 67 DialServiceImpl dial_service_;
69 std::unique_ptr<DialServiceImpl::DialSocket> dial_socket_; 68 std::unique_ptr<DialServiceImpl::DialSocket> dial_socket_;
70 MockObserver mock_observer_; 69 MockObserver mock_observer_;
71 }; 70 };
72 71
73 TEST_F(DialServiceTest, TestSendMultipleRequests) { 72 TEST_F(DialServiceTest, TestSendMultipleRequests) {
(...skipping 13 matching lines...) Expand all
87 } 86 }
88 87
89 TEST_F(DialServiceTest, TestMultipleNetworkInterfaces) { 88 TEST_F(DialServiceTest, TestMultipleNetworkInterfaces) {
90 // Setting the finish delay to zero disables the timer that invokes 89 // Setting the finish delay to zero disables the timer that invokes
91 // FinishDiscovery(). 90 // FinishDiscovery().
92 dial_service_.finish_delay_ = TimeDelta::FromSeconds(0); 91 dial_service_.finish_delay_ = TimeDelta::FromSeconds(0);
93 dial_service_.request_interval_ = TimeDelta::FromSeconds(0); 92 dial_service_.request_interval_ = TimeDelta::FromSeconds(0);
94 dial_service_.max_requests_ = 4; 93 dial_service_.max_requests_ = 4;
95 dial_service_.discovery_active_ = true; 94 dial_service_.discovery_active_ = true;
96 net::NetworkInterfaceList interface_list; 95 net::NetworkInterfaceList interface_list;
97 interface_list.push_back( 96 interface_list.push_back(net::NetworkInterface(
98 net::NetworkInterface("network1", 97 "network1", "network1", 0, net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
99 "network1", 98 mock_ip_, 0, net::IP_ADDRESS_ATTRIBUTE_NONE));
100 0, 99 interface_list.push_back(net::NetworkInterface(
101 net::NetworkChangeNotifier::CONNECTION_UNKNOWN, 100 "network2", "network2", 1, net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
102 mock_ip_, 101 mock_ip_, 0, net::IP_ADDRESS_ATTRIBUTE_NONE));
103 0, 102 interface_list.push_back(net::NetworkInterface(
104 net::IP_ADDRESS_ATTRIBUTE_NONE)); 103 "network3", "network3", 2, net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
105 interface_list.push_back( 104 mock_ip_, 0, net::IP_ADDRESS_ATTRIBUTE_NONE));
106 net::NetworkInterface("network2",
107 "network2",
108 1,
109 net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
110 mock_ip_,
111 0,
112 net::IP_ADDRESS_ATTRIBUTE_NONE));
113 interface_list.push_back(
114 net::NetworkInterface("network3",
115 "network3",
116 2,
117 net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
118 mock_ip_,
119 0,
120 net::IP_ADDRESS_ATTRIBUTE_NONE));
121 105
122 // "network4" is equivalent to "network2" because both the address family 106 // "network4" is equivalent to "network2" because both the address family
123 // and interface index are the same. 107 // and interface index are the same.
124 interface_list.push_back( 108 interface_list.push_back(net::NetworkInterface(
125 net::NetworkInterface("network4", 109 "network4", "network4", 1, net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
126 "network4", 110 mock_ip_, 0, net::IP_ADDRESS_ATTRIBUTE_NONE));
127 1,
128 net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
129 mock_ip_,
130 0,
131 net::IP_ADDRESS_ATTRIBUTE_NONE));
132 111
133 // 3 sockets * 4 requests per socket = 12 requests 112 // 3 sockets * 4 requests per socket = 12 requests
134 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(12); 113 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(12);
135 EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); 114 EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1);
136 115
137 dial_service_.SendNetworkList(interface_list); 116 dial_service_.SendNetworkList(interface_list);
138 EXPECT_EQ(3u, dial_service_.dial_sockets_.size()); 117 EXPECT_EQ(3u, dial_service_.dial_sockets_.size());
139 118
140 base::RunLoop().RunUntilIdle(); 119 base::RunLoop().RunUntilIdle();
141 dial_service_.FinishDiscovery(); 120 dial_service_.FinishDiscovery();
142 } 121 }
143 122
144 TEST_F(DialServiceTest, TestOnDiscoveryRequest) { 123 TEST_F(DialServiceTest, TestOnDiscoveryRequest) {
145 dial_service_.discovery_active_ = true; 124 dial_service_.discovery_active_ = true;
146 dial_service_.num_requests_sent_ = 1; 125 dial_service_.num_requests_sent_ = 1;
147 dial_service_.max_requests_ = 1; 126 dial_service_.max_requests_ = 1;
148 size_t num_bytes = dial_service_.send_buffer_->size(); 127 size_t num_bytes = dial_service_.send_buffer_->size();
149 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(1); 128 EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(1);
150 dial_socket_->OnSocketWrite(num_bytes, num_bytes); 129 dial_socket_->OnSocketWrite(num_bytes, num_bytes);
151 } 130 }
152 131
153 TEST_F(DialServiceTest, TestOnDeviceDiscovered) { 132 TEST_F(DialServiceTest, TestOnDeviceDiscovered) {
154 dial_service_.discovery_active_ = true; 133 dial_service_.discovery_active_ = true;
155 int response_size = arraysize(kValidResponse) - 1; 134 int response_size = arraysize(kValidResponse) - 1;
156 dial_socket_->recv_buffer_ = 135 dial_socket_->recv_buffer_ = new net::IOBufferWithSize(response_size);
157 new net::IOBufferWithSize(response_size); 136 strncpy(dial_socket_->recv_buffer_->data(), kValidResponse, response_size);
158 strncpy(dial_socket_->recv_buffer_->data(),
159 kValidResponse,
160 response_size);
161 dial_socket_->recv_address_ = net::IPEndPoint(mock_ip_, 12345); 137 dial_socket_->recv_address_ = net::IPEndPoint(mock_ip_, 12345);
162 138
163 DialDeviceData expected_device; 139 DialDeviceData expected_device;
164 expected_device.set_device_id("some_id"); 140 expected_device.set_device_id("some_id");
165 141
166 EXPECT_CALL(mock_observer_, 142 EXPECT_CALL(mock_observer_,
167 OnDeviceDiscovered(A<DialService*>(), expected_device)) 143 OnDeviceDiscovered(A<DialService*>(), expected_device))
168 .Times(1); 144 .Times(1);
169 dial_socket_->OnSocketRead(response_size); 145 dial_socket_->OnSocketRead(response_size);
170 } 146 }
171 147
172 TEST_F(DialServiceTest, TestOnDiscoveryFinished) { 148 TEST_F(DialServiceTest, TestOnDiscoveryFinished) {
173 dial_service_.discovery_active_ = true; 149 dial_service_.discovery_active_ = true;
174 150
175 EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); 151 EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1);
176 dial_service_.FinishDiscovery(); 152 dial_service_.FinishDiscovery();
177 EXPECT_FALSE(dial_service_.discovery_active_); 153 EXPECT_FALSE(dial_service_.discovery_active_);
178 } 154 }
179 155
180 TEST_F(DialServiceTest, TestResponseParsing) { 156 TEST_F(DialServiceTest, TestResponseParsing) {
181 Time now = Time::Now(); 157 Time now = Time::Now();
182 158
183 // Successful case 159 // Successful case
184 DialDeviceData parsed; 160 DialDeviceData parsed;
185 EXPECT_TRUE(DialServiceImpl::DialSocket::ParseResponse( 161 EXPECT_TRUE(
186 kValidResponse, now, &parsed)); 162 DialServiceImpl::DialSocket::ParseResponse(kValidResponse, now, &parsed));
187 EXPECT_EQ("some_id", parsed.device_id()); 163 EXPECT_EQ("some_id", parsed.device_id());
188 EXPECT_EQ("http://127.0.0.1/dd.xml", parsed.device_description_url().spec()); 164 EXPECT_EQ("http://127.0.0.1/dd.xml", parsed.device_description_url().spec());
189 EXPECT_EQ(1, parsed.config_id()); 165 EXPECT_EQ(1, parsed.config_id());
190 EXPECT_EQ(now, parsed.response_time()); 166 EXPECT_EQ(now, parsed.response_time());
191 167
192 // Failure cases 168 // Failure cases
193 DialDeviceData not_parsed; 169 DialDeviceData not_parsed;
194 170
195 // Empty, garbage 171 // Empty, garbage
196 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 172 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse(std::string(), now,
197 std::string(), now, &not_parsed)); 173 &not_parsed));
198 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 174 EXPECT_FALSE(
199 "\r\n\r\n", 175 DialServiceImpl::DialSocket::ParseResponse("\r\n\r\n", now, &not_parsed));
200 now, &not_parsed)); 176 EXPECT_FALSE(
201 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 177 DialServiceImpl::DialSocket::ParseResponse("xyzzy", now, &not_parsed));
202 "xyzzy",
203 now, &not_parsed));
204 178
205 // No headers 179 // No headers
206 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 180 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse("HTTP/1.1 OK\r\n\r\n",
207 "HTTP/1.1 OK\r\n\r\n", 181 now, &not_parsed));
208 now, &not_parsed));
209 182
210 // Missing LOCATION 183 // Missing LOCATION
211 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 184 EXPECT_FALSE(
212 "HTTP/1.1 OK\r\n" 185 DialServiceImpl::DialSocket::ParseResponse("HTTP/1.1 OK\r\n"
213 "USN: some_id\r\n\r\n", 186 "USN: some_id\r\n\r\n",
214 now, &not_parsed)); 187 now, &not_parsed));
215 188
216 // Empty LOCATION 189 // Empty LOCATION
217 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 190 EXPECT_FALSE(
218 "HTTP/1.1 OK\r\n" 191 DialServiceImpl::DialSocket::ParseResponse("HTTP/1.1 OK\r\n"
219 "LOCATION:\r\n" 192 "LOCATION:\r\n"
220 "USN: some_id\r\n\r\n", 193 "USN: some_id\r\n\r\n",
221 now, &not_parsed)); 194 now, &not_parsed));
222 195
223 // Missing USN 196 // Missing USN
224 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 197 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse(
225 "HTTP/1.1 OK\r\n" 198 "HTTP/1.1 OK\r\n"
226 "LOCATION: http://127.0.0.1/dd.xml\r\n\r\n", 199 "LOCATION: http://127.0.0.1/dd.xml\r\n\r\n",
227 now, &not_parsed)); 200 now, &not_parsed));
228 201
229 // Empty USN 202 // Empty USN
230 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 203 EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse(
231 "HTTP/1.1 OK\r\n" 204 "HTTP/1.1 OK\r\n"
232 "LOCATION: http://127.0.0.1/dd.xml\r\n" 205 "LOCATION: http://127.0.0.1/dd.xml\r\n"
233 "USN:\r\n\r\n", 206 "USN:\r\n\r\n",
234 now, &not_parsed)); 207 now, &not_parsed));
235 } 208 }
236 209
237 } // namespace dial 210 } // namespace media_router
238 } // namespace api
239 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/media/router/discovery/dial/dial_service.cc ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698