12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/dial/dial_device_data.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/dial/dial_service.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/capturing_net_log.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/ip_endpoint.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::Time; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using base::TimeDelta; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::A; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AtLeast; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Return; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kValidResponse[] = 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "HTTP/1.1 OK\r\n" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "LOCATION: http://127.0.0.1/dd.xml\r\n" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "USN: some_id\r\n" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CACHE-CONTROL: max-age=1800\r\n" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CONFIGID.UPNP.ORG: 1\r\n\r\n"; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockObserver : public DialService::Observer { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnDiscoveryRequest, void(DialService*)); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD2(OnDeviceDiscovered, void(DialService*, const DialDeviceData&)); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD1(OnDiscoveryFinished, void(DialService*)); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD2(OnError, void(DialService*, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DialService::DialServiceErrorCode&)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DialServiceTest : public testing::Test { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DialServiceTest() 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : dial_service_(&capturing_net_log_) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(net::ParseIPLiteralToNumber("0.0.0.0", &mock_ip_)); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.AddObserver(&mock_observer_); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_socket_ = dial_service_.CreateDialSocket(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CapturingNetLog capturing_net_log_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::IPAddressNumber mock_ip_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialServiceImpl dial_service_; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<DialServiceImpl::DialSocket> dial_socket_; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockObserver mock_observer_; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DialServiceTest, TestSendMultipleRequests) { 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO loop; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Setting the finish delay to zero disables the timer that invokes 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FinishDiscovery(). 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.finish_delay_ = TimeDelta::FromSeconds(0); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.request_interval_ = TimeDelta::FromSeconds(0); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.max_requests_ = 4; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.discovery_active_ = true; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(4); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.BindAndAddSocket(mock_ip_); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1u, dial_service_.dial_sockets_.size()); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.SendOneRequest(); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) loop.RunUntilIdle(); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.FinishDiscovery(); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(DialServiceTest, TestMultipleNetworkInterfaces) { 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopForIO loop; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Setting the finish delay to zero disables the timer that invokes 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // FinishDiscovery(). 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.finish_delay_ = TimeDelta::FromSeconds(0); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.request_interval_ = TimeDelta::FromSeconds(0); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.max_requests_ = 4; 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.discovery_active_ = true; 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkInterfaceList interface_list; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) interface_list.push_back( 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::NetworkInterface("network1", 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "network1", 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::NetworkChangeNotifier::CONNECTION_UNKNOWN, 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_ip_, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IP_ADDRESS_ATTRIBUTE_NONE)); 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) interface_list.push_back( 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::NetworkInterface("network2", 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "network2", 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::NetworkChangeNotifier::CONNECTION_UNKNOWN, 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_ip_, 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IP_ADDRESS_ATTRIBUTE_NONE)); 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) interface_list.push_back( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::NetworkInterface("network3", 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "network3", 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::NetworkChangeNotifier::CONNECTION_UNKNOWN, 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_ip_, 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IP_ADDRESS_ATTRIBUTE_NONE)); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "network4" is equivalent to "network2" because both the address family 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // and interface index are the same. 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) interface_list.push_back( 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::NetworkInterface("network4", 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "network4", 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::NetworkChangeNotifier::CONNECTION_UNKNOWN, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_ip_, 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::IP_ADDRESS_ATTRIBUTE_NONE)); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 3 sockets * 4 requests per socket = 12 requests 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(12); 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_service_.SendNetworkList(interface_list); 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3u, dial_service_.dial_sockets_.size()); 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop.RunUntilIdle(); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.FinishDiscovery(); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DialServiceTest, TestOnDiscoveryRequest) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.discovery_active_ = true; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.num_requests_sent_ = 1; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.max_requests_ = 1; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t num_bytes = dial_service_.send_buffer_->size(); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryRequest(A<DialService*>())).Times(1); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_socket_->OnSocketWrite(num_bytes, num_bytes); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DialServiceTest, TestOnDeviceDiscovered) { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.discovery_active_ = true; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int response_size = arraysize(kValidResponse) - 1; 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_socket_->recv_buffer_ = 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new net::IOBufferWithSize(response_size); 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) strncpy(dial_socket_->recv_buffer_->data(), 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kValidResponse, 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) response_size); 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_socket_->recv_address_ = net::IPEndPoint(mock_ip_, 12345); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialDeviceData expected_device; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_device.set_device_id("some_id"); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock_observer_, 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDeviceDiscovered(A<DialService*>(), expected_device)) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(1); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dial_socket_->OnSocketRead(response_size); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DialServiceTest, TestOnDiscoveryFinished) { 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.discovery_active_ = true; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(mock_observer_, OnDiscoveryFinished(A<DialService*>())).Times(1); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dial_service_.FinishDiscovery(); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(dial_service_.discovery_active_); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(DialServiceTest, TestResponseParsing) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Time now = Time::Now(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Successful case 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialDeviceData parsed; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(DialServiceImpl::DialSocket::ParseResponse( 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kValidResponse, now, &parsed)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("some_id", parsed.device_id()); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("http://127.0.0.1/dd.xml", parsed.device_description_url().spec()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, parsed.config_id()); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(now, parsed.response_time()); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Failure cases 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DialDeviceData not_parsed; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty, garbage 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string(), now, ¬_parsed)); 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "\r\n\r\n", 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now, ¬_parsed)); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "xyzzy", 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No headers 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTTP/1.1 OK\r\n\r\n", 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Missing LOCATION 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTTP/1.1 OK\r\n" 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "USN: some_id\r\n\r\n", 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty LOCATION 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTTP/1.1 OK\r\n" 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "LOCATION:\r\n" 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "USN: some_id\r\n\r\n", 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Missing USN 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTTP/1.1 OK\r\n" 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "LOCATION: http://127.0.0.1/dd.xml\r\n\r\n", 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty USN 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(DialServiceImpl::DialSocket::ParseResponse( 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTTP/1.1 OK\r\n" 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "LOCATION: http://127.0.0.1/dd.xml\r\n" 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "USN:\r\n\r\n", 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now, ¬_parsed)); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 226