17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/local_discovery/privet_url_fetcher.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/url_request/test_url_fetcher_factory.h" 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/url_request/url_request_test_util.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing testing::StrictMock; 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace local_discovery { 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace { 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kSamplePrivetURL[] = 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "http://10.0.0.8:7676/privet/register?action=start"; 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kSamplePrivetToken[] = "MyToken"; 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)const char kEmptyPrivetToken[] = "\"\""; 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kSampleParsableJSON[] = "{ \"hello\" : 2 }"; 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kSampleUnparsableJSON[] = "{ \"hello\" : }"; 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst char kSampleJSONWithError[] = "{ \"error\" : \"unittest_example\" }"; 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass MockPrivetURLFetcherDelegate : public PrivetURLFetcher::Delegate { 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MockPrivetURLFetcherDelegate() : raw_mode_(false) { 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~MockPrivetURLFetcherDelegate() { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnError(PrivetURLFetcher* fetcher, 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PrivetURLFetcher::ErrorType error) OVERRIDE { 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnErrorInternal(error); 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MOCK_METHOD1(OnErrorInternal, void(PrivetURLFetcher::ErrorType error)); 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnParsedJson(PrivetURLFetcher* fetcher, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue& value, 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool has_error) OVERRIDE { 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch saved_value_.reset(value.DeepCopy()); 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnParsedJsonInternal(has_error); 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MOCK_METHOD1(OnParsedJsonInternal, void(bool has_error)); 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual void OnNeedPrivetToken( 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) PrivetURLFetcher* fetcher, 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const PrivetURLFetcher::TokenCallback& callback) { 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool OnRawData(PrivetURLFetcher* fetcher, 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool response_is_file, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& data, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& response_file) { 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!raw_mode_) return false; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (response_is_file) { 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(response_file != base::FilePath()); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnFileInternal(); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnRawDataInternal(data); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MOCK_METHOD1(OnRawDataInternal, void(std::string data)); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MOCK_METHOD0(OnFileInternal, void()); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* saved_value() { return saved_value_.get(); } 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetRawMode(bool raw_mode) { 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) raw_mode_ = raw_mode; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string GetAuthToken() { return "MyAuthToken"; } 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> saved_value_; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool raw_mode_; 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass PrivetURLFetcherTest : public ::testing::Test { 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PrivetURLFetcherTest() { 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch request_context_= new net::TestURLRequestContextGetter( 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::MessageLoopProxy::current()); 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_.reset(new PrivetURLFetcher( 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GURL(kSamplePrivetURL), 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::URLFetcher::POST, 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch request_context_.get(), 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch &delegate_)); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kSamplePrivetToken); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~PrivetURLFetcherTest() { 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RunFor(base::TimeDelta time_period) { 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::CancelableCallback<void()> callback(base::Bind( 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &PrivetURLFetcherTest::Stop, base::Unretained(this))); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, callback.callback(), time_period); 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoop::current()->Run(); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.Cancel(); 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Stop() { 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoop::current()->Quit(); 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::MessageLoop loop_; 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_refptr<net::TestURLRequestContextGetter> request_context_; 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcherFactory fetcher_factory_; 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<PrivetURLFetcher> privet_urlfetcher_; 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch StrictMock<MockPrivetURLFetcherDelegate> delegate_; 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(PrivetURLFetcherTest, FetchSuccess) { 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_->Start(); 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(fetcher != NULL); 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->SetResponseString(kSampleParsableJSON); 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::OK)); 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_response_code(200); 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue* value = delegate_.saved_value(); 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int hello_value; 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(value != NULL); 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(value->GetInteger("hello", &hello_value)); 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(2, hello_value); 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(PrivetURLFetcherTest, HTTP503Retry) { 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) privet_urlfetcher_->Start(); 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->SetResponseString(kSampleParsableJSON); 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::OK)); 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->set_response_code(503); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RunFor(base::TimeDelta::FromSeconds(7)); 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher = fetcher_factory_.GetFetcherByID(0); 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->SetResponseString(kSampleParsableJSON); 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::OK)); 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fetcher->set_response_code(200); 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(PrivetURLFetcherTest, ResponseCodeError) { 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_->Start(); 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(fetcher != NULL); 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->SetResponseString(kSampleParsableJSON); 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::OK)); 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_response_code(404); 1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(delegate_, 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnErrorInternal(PrivetURLFetcher::RESPONSE_CODE_ERROR)); 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(PrivetURLFetcherTest, JsonParseError) { 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_->Start(); 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(fetcher != NULL); 1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->SetResponseString(kSampleUnparsableJSON); 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::OK)); 1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_response_code(200); 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(delegate_, 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnErrorInternal(PrivetURLFetcher::JSON_PARSE_ERROR)); 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(PrivetURLFetcherTest, Header) { 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_->Start(); 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(fetcher != NULL); 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::HttpRequestHeaders headers; 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->GetExtraRequestHeaders(&headers); 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string header_token; 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(kSamplePrivetToken, header_token); 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(PrivetURLFetcherTest, Header2) { 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ""); 2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch privet_urlfetcher_->SendEmptyPrivetToken(); 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch privet_urlfetcher_->Start(); 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(fetcher != NULL); 219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch net::HttpRequestHeaders headers; 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch fetcher->GetExtraRequestHeaders(&headers); 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string header_token; 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(kEmptyPrivetToken, header_token); 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 227effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(PrivetURLFetcherTest, AlwaysSendEmpty) { 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "SampleToken"); 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch privet_urlfetcher_->SendEmptyPrivetToken(); 2328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) privet_urlfetcher_->Start(); 2330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 2368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) net::HttpRequestHeaders headers; 2378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) fetcher->GetExtraRequestHeaders(&headers); 2388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::string header_token; 2408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 2418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_EQ(kEmptyPrivetToken, header_token); 2428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(PrivetURLFetcherTest, FetchHasError) { 2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch privet_urlfetcher_->Start(); 2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(fetcher != NULL); 2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->SetResponseString(kSampleJSONWithError); 2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch net::OK)); 2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->set_response_code(200); 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_CALL(delegate_, OnParsedJsonInternal(true)); 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fetcher->delegate()->OnURLFetchComplete(fetcher); 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(PrivetURLFetcherTest, FetcherRawData) { 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delegate_.SetRawMode(true); 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) privet_urlfetcher_->Start(); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->SetResponseString(kSampleJSONWithError); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::OK)); 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->set_response_code(200); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(delegate_, OnRawDataInternal(kSampleJSONWithError)); 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(PrivetURLFetcherTest, RangeRequest) { 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delegate_.SetRawMode(true); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) privet_urlfetcher_->SetByteRange(200, 300); 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) privet_urlfetcher_->Start(); 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::HttpRequestHeaders headers; 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->GetExtraRequestHeaders(&headers); 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string header_range; 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(headers.GetHeader("Range", &header_range)); 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("bytes=200-300", header_range); 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(PrivetURLFetcherTest, FetcherToFile) { 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) delegate_.SetRawMode(true); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) privet_urlfetcher_->SaveResponseToFile(); 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) privet_urlfetcher_->Start(); 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->SetResponseFilePath( 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("sample/file"))); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::OK)); 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->set_response_code(200); 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_CALL(delegate_, OnFileInternal()); 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(PrivetURLFetcherTest, V3Mode) { 3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) delegate_.SetRawMode(true); 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) privet_urlfetcher_->V3Mode(); 3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) privet_urlfetcher_->Start(); 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(fetcher != NULL); 3076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fetcher->SetResponseFilePath( 3086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("sample/file"))); 3096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) net::HttpRequestHeaders headers; 3106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fetcher->GetExtraRequestHeaders(&headers); 3116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string header_token; 3136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_FALSE(headers.GetHeader("X-Privet-Token", &header_token)); 3146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(headers.GetHeader("X-Privet-Auth", &header_token)); 3156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ("MyAuthToken", header_token); 3166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 3176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace 3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace local_discovery 321