privet_url_fetcher_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright 2013 The Chromium Authors. All rights reserved. 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file. 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "chrome/browser/local_discovery/privet_url_fetcher.h" 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "net/url_request/test_url_fetcher_factory.h" 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "net/url_request/url_request_test_util.h" 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "testing/gmock/include/gmock/gmock.h" 9ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett#include "testing/gtest/include/gtest/gtest.h" 10ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett 11ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennettusing testing::StrictMock; 12ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace local_discovery { 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace { 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerconst char kSamplePrivetURL[] = 18ff9a01000ff74a994aa3da26ea2ec732c97291b7Manuel Klimek "http://10.0.0.8:7676/privet/register?action=start"; 1930a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruthconst char kSamplePrivetToken[] = "MyToken"; 2030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruthconst char kEmptyPrivetToken[] = "\"\""; 21ad75653f81dece1c806e9c28dd7e7582c9929a27Ted Kremenek 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesconst char kSampleParsableJSON[] = "{ \"hello\" : 2 }"; 23ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregorconst char kSampleUnparsableJSON[] = "{ \"hello\" : }"; 24d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregorconst char kSampleJSONWithError[] = "{ \"error\" : \"unittest_example\" }"; 2530a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth 267532dc66648cfe7432c9fe66dec5225f0ab301c6Douglas Gregorclass MockPrivetURLFetcherDelegate : public PrivetURLFetcher::Delegate { 27464175bba1318bef7905122e9fda20cff926df78Chris Lattner public: 2830a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth MockPrivetURLFetcherDelegate() : raw_mode_(false) { 2930a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth } 3030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth 3130a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth virtual ~MockPrivetURLFetcherDelegate() { 3230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth } 3330a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth 34464175bba1318bef7905122e9fda20cff926df78Chris Lattner virtual void OnError(PrivetURLFetcher* fetcher, 3568d331a78e655d97294e94fcfa63f92cc1f40578Steve Naroff PrivetURLFetcher::ErrorType error) OVERRIDE { 364f32786ac45210143654390177105eb749b614e9Ted Kremenek OnErrorInternal(error); 37432a8893f7e30d141d7f279bd00b741a3cdac81fFariborz Jahanian } 38c1b0f7fa9b755ab59129ae85187d0d4f91379995Argyrios Kyrtzidis 396c2b6eb8d836da19007f7540709e16d5e39a1cbaChris Lattner MOCK_METHOD1(OnErrorInternal, void(PrivetURLFetcher::ErrorType error)); 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void OnParsedJson(PrivetURLFetcher* fetcher, 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const base::DictionaryValue* value, 43b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner bool has_error) OVERRIDE { 44b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner saved_value_.reset(value->DeepCopy()); 45b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner OnParsedJsonInternal(has_error); 46b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner } 475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 48a9376d470ccb0eac74fe09a6b2a18a890f1d17c4Chris Lattner MOCK_METHOD1(OnParsedJsonInternal, void(bool has_error)); 496b96742ceedebb5eb8f1299ab67cb3ecd6d92aafReid Kleckner 50e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar virtual void OnNeedPrivetToken( 515e530af5d51572a0ed5dbe50da54bd333840c63dDavid Chisnall PrivetURLFetcher* fetcher, 52bdc601b196c48d4cd56a5ceb45d41ae4e87371abKen Dyck const PrivetURLFetcher::TokenCallback& callback) { 53d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie } 54e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar 557b90340c9c7d07aef4e301e72b5e8a30d5f4f0c8Argyrios Kyrtzidis bool OnRawData(PrivetURLFetcher* fetcher, 56c7229c338c21ef26b01ef3ecf9eec4fd373fa9ecChris Lattner bool response_is_file, 57211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith const std::string& data, 58e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar const base::FilePath& response_file) { 59d934112e6170b0fd940d8e40db6936cea2cdcf62Douglas Gregor if (!raw_mode_) return false; 60071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 61942f9fe11d3a9583eef6bc4ca2549b1f0d1694daReid Kleckner if (response_is_file) { 62e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar EXPECT_TRUE(response_file != base::FilePath()); 6314110477887e3dc168ffc6c191e72d705051f99ePeter Collingbourne OnFileInternal(); 640d8df780aef1acda5962347a32591efc629b6748Anders Carlsson } else { 65c56f34a1c1779de15330bdb3eec39b3418802d47Daniel Dunbar OnRawDataInternal(data); 660076ea62c2da91121bca6d402da67f0b611fc8bbDmitri Gribenko } 670d8df780aef1acda5962347a32591efc629b6748Anders Carlsson 68ed97649e9574b9d854fa4d6109c9333ae0993554John McCall return true; 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 711b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattner MOCK_METHOD1(OnRawDataInternal, void(std::string data)); 721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 731abee64ad71519ea9d91f1fe76441b9cdb75b6c0Dmitri Gribenko MOCK_METHOD0(OnFileInternal, void()); 741abee64ad71519ea9d91f1fe76441b9cdb75b6c0Dmitri Gribenko 751abee64ad71519ea9d91f1fe76441b9cdb75b6c0Dmitri Gribenko const base::DictionaryValue* saved_value() { return saved_value_.get(); } 761abee64ad71519ea9d91f1fe76441b9cdb75b6c0Dmitri Gribenko 77ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett void SetRawMode(bool raw_mode) { 78ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett raw_mode_ = raw_mode; 79c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith } 80ef99001908e799c388f1363b1e607dad5f5b57d3John McCall 81ef99001908e799c388f1363b1e607dad5f5b57d3John McCall private: 82f512acee01617c9da8079ed88ded3bb9f2418349Benjamin Kramer scoped_ptr<base::DictionaryValue> saved_value_; 834ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad bool raw_mode_; 844ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad}; 854ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass PrivetURLFetcherTest : public ::testing::Test { 874ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad public: 884ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad PrivetURLFetcherTest() { 894ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad request_context_= new net::TestURLRequestContextGetter( 904ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad base::MessageLoopProxy::current()); 914ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad privet_urlfetcher_.reset(new PrivetURLFetcher( 924ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad GURL(kSamplePrivetURL), 934ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad net::URLFetcher::POST, 944ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad request_context_.get(), 954ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad &delegate_)); 964ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 974ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 984ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad kSamplePrivetToken); 998026f6d82f7fa544bc0453714fe94bca62a1196eSebastian Redl } 1008026f6d82f7fa544bc0453714fe94bca62a1196eSebastian Redl virtual ~PrivetURLFetcherTest() { 1014ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad } 1024ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 1034ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad void RunFor(base::TimeDelta time_period) { 1044ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad base::CancelableCallback<void()> callback(base::Bind( 1054ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad &PrivetURLFetcherTest::Stop, base::Unretained(this))); 106c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor base::MessageLoop::current()->PostDelayedTask( 107c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor FROM_HERE, callback.callback(), time_period); 1084ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 109ef99001908e799c388f1363b1e607dad5f5b57d3John McCall base::MessageLoop::current()->Run(); 1104ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad callback.Cancel(); 1114ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad } 1124ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 1134ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad void Stop() { 1144ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad base::MessageLoop::current()->Quit(); 11533500955d731c73717af52088b7fc0e7a85681e7John McCall } 1167536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor 1174ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad protected: 1184ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad base::MessageLoop loop_; 119483b9f3bc05c5409e2c6643f1c9d91e21c8ff9d2Richard Smith scoped_refptr<net::TestURLRequestContextGetter> request_context_; 120b001de7458d17c17e6d8b8034c7cfcefd3b70c00Eli Friedman net::TestURLFetcherFactory fetcher_factory_; 1219d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall scoped_ptr<PrivetURLFetcher> privet_urlfetcher_; 1221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump StrictMock<MockPrivetURLFetcherDelegate> delegate_; 1234ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad}; 1244ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 125146060435c3efce95c95a092c7a1eb651cfb9ae0John McCallTEST_F(PrivetURLFetcherTest, FetchSuccess) { 126146060435c3efce95c95a092c7a1eb651cfb9ae0John McCall privet_urlfetcher_->Start(); 127146060435c3efce95c95a092c7a1eb651cfb9ae0John McCall net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 128146060435c3efce95c95a092c7a1eb651cfb9ae0John McCall ASSERT_TRUE(fetcher != NULL); 1291aee05d08b2184acadeb36de300e216390780d6cDouglas Gregor fetcher->SetResponseString(kSampleParsableJSON); 1301aee05d08b2184acadeb36de300e216390780d6cDouglas Gregor fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 131ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregor net::OK)); 132ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregor fetcher->set_response_code(200); 133ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregor 1344ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); 1354ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad fetcher->delegate()->OnURLFetchComplete(fetcher); 136ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregor 137ab452ba8323d1985e08bade2bced588cddf2cc28Douglas Gregor const base::DictionaryValue* value = delegate_.saved_value(); 138ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett int hello_value; 139ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett ASSERT_TRUE(value != NULL); 140ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett ASSERT_TRUE(value->GetInteger("hello", &hello_value)); 1414ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad EXPECT_EQ(2, hello_value); 1424ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad} 1434ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 1444ba2a17694148e16eaa8d3917f657ffcd3667be4Jay FoadTEST_F(PrivetURLFetcherTest, HTTP503Retry) { 145f98aba35e6c3da5aae61843fc01334939e4e12ecEli Friedman privet_urlfetcher_->Start(); 146ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 147bc5419a2edc4030d1a623576fe339fbd3eed17a6Daniel Dunbar ASSERT_TRUE(fetcher != NULL); 148bc5419a2edc4030d1a623576fe339fbd3eed17a6Daniel Dunbar fetcher->SetResponseString(kSampleParsableJSON); 149bc5419a2edc4030d1a623576fe339fbd3eed17a6Daniel Dunbar fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 150bc5419a2edc4030d1a623576fe339fbd3eed17a6Daniel Dunbar net::OK)); 151ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett fetcher->set_response_code(503); 152cd03f862d82cac28c9517e2036716f8d49112c8bRichard Smith 153f53df2398e07d13be9962b95aebc19b31706fa33Anders Carlsson fetcher->delegate()->OnURLFetchComplete(fetcher); 1548a1d722f13df383600f36d77f842957c8adb5f1bArgyrios Kyrtzidis 1558a1d722f13df383600f36d77f842957c8adb5f1bArgyrios Kyrtzidis RunFor(base::TimeDelta::FromSeconds(7)); 156b40034c2e580ab3b08de9dfb738d8e5d8ef79136Argyrios Kyrtzidis fetcher = fetcher_factory_.GetFetcherByID(0); 157b40034c2e580ab3b08de9dfb738d8e5d8ef79136Argyrios Kyrtzidis 158b40034c2e580ab3b08de9dfb738d8e5d8ef79136Argyrios Kyrtzidis ASSERT_TRUE(fetcher != NULL); 159b40034c2e580ab3b08de9dfb738d8e5d8ef79136Argyrios Kyrtzidis fetcher->SetResponseString(kSampleParsableJSON); 1608a1d722f13df383600f36d77f842957c8adb5f1bArgyrios Kyrtzidis fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1611ceee5c42d5c410217f67d384eecc6ea4a2bba9bFariborz Jahanian net::OK)); 162830937bc1100fba7682f7c32c40512085870f50cFariborz Jahanian fetcher->set_response_code(200); 1631ceee5c42d5c410217f67d384eecc6ea4a2bba9bFariborz Jahanian 164af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois Pichet EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); 165ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett fetcher->delegate()->OnURLFetchComplete(fetcher); 166af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois Pichet} 1670d95f0d7b81110f77e99e833f766d19be7b7e072Francois Pichet 168af0f4d0b2e38c810effc8b024ad2fb6604eec5d3Francois PichetTEST_F(PrivetURLFetcherTest, ResponseCodeError) { 169211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith privet_urlfetcher_->Start(); 170211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 171211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith ASSERT_TRUE(fetcher != NULL); 172211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith fetcher->SetResponseString(kSampleParsableJSON); 173211c8ddb5b500ed84833751363d0cfe1115f4dd3Richard Smith fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1743e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor net::OK)); 1753e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor fetcher->set_response_code(404); 1763e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor 1773e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor EXPECT_CALL(delegate_, 1783e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor OnErrorInternal(PrivetURLFetcher::RESPONSE_CODE_ERROR)); 1793e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor fetcher->delegate()->OnURLFetchComplete(fetcher); 1803e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor} 1813e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor 1823e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas GregorTEST_F(PrivetURLFetcherTest, JsonParseError) { 1833e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor privet_urlfetcher_->Start(); 1843e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 1853e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor ASSERT_TRUE(fetcher != NULL); 1863e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor fetcher->SetResponseString(kSampleUnparsableJSON); 1873e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 1883e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor net::OK)); 1893e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor fetcher->set_response_code(200); 1904ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 1914ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad EXPECT_CALL(delegate_, 1923e1274f2b99cb99c03cc8e2c6517c37d330b597aDouglas Gregor OnErrorInternal(PrivetURLFetcher::JSON_PARSE_ERROR)); 1934ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad fetcher->delegate()->OnURLFetchComplete(fetcher); 1944ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad} 195006113841bdae1edb77aef75ba1ffdf2e55a3094Argyrios Kyrtzidis 196772eeaefef2c883aabe35caf4543e7e32d290183Douglas GregorTEST_F(PrivetURLFetcherTest, Header) { 197772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor privet_urlfetcher_->Start(); 198006113841bdae1edb77aef75ba1ffdf2e55a3094Argyrios Kyrtzidis net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 199772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor ASSERT_TRUE(fetcher != NULL); 200772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor net::HttpRequestHeaders headers; 201cac18add73d095eaab600aefe27ea7174aec4922Nico Weber fetcher->GetExtraRequestHeaders(&headers); 202cac18add73d095eaab600aefe27ea7174aec4922Nico Weber 203cac18add73d095eaab600aefe27ea7174aec4922Nico Weber std::string header_token; 204772eeaefef2c883aabe35caf4543e7e32d290183Douglas Gregor ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 205c5613b26a24a33d7450e3d0bf315c6ccc920ce7bMeador Inge EXPECT_EQ(kSamplePrivetToken, header_token); 206c5613b26a24a33d7450e3d0bf315c6ccc920ce7bMeador Inge} 207c5613b26a24a33d7450e3d0bf315c6ccc920ce7bMeador Inge 208d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve NaroffTEST_F(PrivetURLFetcherTest, Header2) { 209ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 2104dfd02a17c6d604c72e6936527c5e1c56d3ecb7aDouglas Gregor ""); 2114dfd02a17c6d604c72e6936527c5e1c56d3ecb7aDouglas Gregor 212ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett privet_urlfetcher_->SendEmptyPrivetToken(); 2137a27ea52b7bd635c89bec5a9c521a3bf7d204238Douglas Gregor privet_urlfetcher_->Start(); 2141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 215ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 21679d6726921897811232554ed94c5d77b5b7b3fc0Douglas Gregor ASSERT_TRUE(fetcher != NULL); 217a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor net::HttpRequestHeaders headers; 218ca0d10edcf1192ab8546a75e8be5bab7ef32e488James Dennett fetcher->GetExtraRequestHeaders(&headers); 219a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor 220961713055e636170da59d7006a878cb4ba518a5dFariborz Jahanian std::string header_token; 221961713055e636170da59d7006a878cb4ba518a5dFariborz Jahanian ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 222961713055e636170da59d7006a878cb4ba518a5dFariborz Jahanian EXPECT_EQ(kEmptyPrivetToken, header_token); 223a6ea10e22b600d92e084f6b11b9b9a92d0eb2412Douglas Gregor} 22401a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas Gregor 22501a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas GregorTEST_F(PrivetURLFetcherTest, AlwaysSendEmpty) { 22601a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas Gregor PrivetURLFetcher::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), 22701a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas Gregor "SampleToken"); 22801a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas Gregor 22901a4cf11777bb34c35f5d251a9e95eb736d0842bDouglas Gregor privet_urlfetcher_->SendEmptyPrivetToken(); 230a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek privet_urlfetcher_->Start(); 2314ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad 232f64bc202a2bcdf7b10f418ad52aaa7366c8ffef9Fariborz Jahanian net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 233f7992132207d7ddc8810a135cec97ebe5805e500Fariborz Jahanian ASSERT_TRUE(fetcher != NULL); 234f7992132207d7ddc8810a135cec97ebe5805e500Fariborz Jahanian net::HttpRequestHeaders headers; 235f64bc202a2bcdf7b10f418ad52aaa7366c8ffef9Fariborz Jahanian fetcher->GetExtraRequestHeaders(&headers); 2367a9d49fd2bfac00e905b361ba76d26ab5b6c3b09Ted Kremenek 237e97179c675b341927807c718be215c8d1aab8acbDouglas Gregor std::string header_token; 238e97179c675b341927807c718be215c8d1aab8acbDouglas Gregor ASSERT_TRUE(headers.GetHeader("X-Privet-Token", &header_token)); 239e97179c675b341927807c718be215c8d1aab8acbDouglas Gregor EXPECT_EQ(kEmptyPrivetToken, header_token); 240c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor} 241c29f77b769bcc5b6dc85e72c8e3cc2e348e5cf25Douglas Gregor 2421eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpTEST_F(PrivetURLFetcherTest, FetchHasError) { 2438fad9941a635a42ee644e7396ca84cbaaa5c1b6eMike Stump privet_urlfetcher_->Start(); 244782fa308a765aeac2acb39c4e697c937ec21185bMike Stump net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ASSERT_TRUE(fetcher != NULL); 2468fad9941a635a42ee644e7396ca84cbaaa5c1b6eMike Stump fetcher->SetResponseString(kSampleJSONWithError); 247782fa308a765aeac2acb39c4e697c937ec21185bMike Stump fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump net::OK)); 249e2d4f4ed44a32f179c6d48cd1dba8346ab2129d9Rafael Espindola fetcher->set_response_code(200); 250e2d4f4ed44a32f179c6d48cd1dba8346ab2129d9Rafael Espindola 251e2d4f4ed44a32f179c6d48cd1dba8346ab2129d9Rafael Espindola EXPECT_CALL(delegate_, OnParsedJsonInternal(true)); 252adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump fetcher->delegate()->OnURLFetchComplete(fetcher); 2535c0d3d66bf06213009802876a14e6298efc1e0b0Douglas Gregor} 2545c0d3d66bf06213009802876a14e6298efc1e0b0Douglas Gregor 2555c0d3d66bf06213009802876a14e6298efc1e0b0Douglas GregorTEST_F(PrivetURLFetcherTest, FetcherRawData) { 2564ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad delegate_.SetRawMode(true); 257adaaad3715c9c26cdcfdfe3401a13d7b4423ddcfMike Stump privet_urlfetcher_->Start(); 258083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2595c0d3d66bf06213009802876a14e6298efc1e0b0Douglas Gregor ASSERT_TRUE(fetcher != NULL); 2605c0d3d66bf06213009802876a14e6298efc1e0b0Douglas Gregor fetcher->SetResponseString(kSampleJSONWithError); 2615c0d3d66bf06213009802876a14e6298efc1e0b0Douglas Gregor fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 2624ba2a17694148e16eaa8d3917f657ffcd3667be4Jay Foad net::OK)); 263083c25eea14bb4cc4ecc3ec763c60e2e609e22bdMike Stump fetcher->set_response_code(200); 26414b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne 26514b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne EXPECT_CALL(delegate_, OnRawDataInternal(kSampleJSONWithError)); 26614b6ba77710d6431794d65c7d58c6f29c3dc956ePeter Collingbourne fetcher->delegate()->OnURLFetchComplete(fetcher); 267bf1a028246d884a540aeafa38e89be59a269b072John McCall} 268bf1a028246d884a540aeafa38e89be59a269b072John McCall 2691eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpTEST_F(PrivetURLFetcherTest, RangeRequest) { 27068584ed35ad819a1668e3f527ba7f5dd4ae6a333Douglas Gregor delegate_.SetRawMode(true); 27168584ed35ad819a1668e3f527ba7f5dd4ae6a333Douglas Gregor privet_urlfetcher_->SetByteRange(200, 300); 27268584ed35ad819a1668e3f527ba7f5dd4ae6a333Douglas Gregor privet_urlfetcher_->Start(); 2736320064d0c60fa8683f5623881c9394fd4aa7689Douglas Gregor net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 2742455636163fdd18581d7fdae816433f886d88213Mike Stump ASSERT_TRUE(fetcher != NULL); 2754ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith net::HttpRequestHeaders headers; 2764ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith fetcher->GetExtraRequestHeaders(&headers); 2774ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith 2784ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith std::string header_range; 2794ed0122c1b795379cc4e11dfd62312358dcbf506Richard Smith ASSERT_TRUE(headers.GetHeader("Range", &header_range)); 280ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo EXPECT_EQ("bytes=200-300", header_range); 281ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo} 282ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo 283ef4579cda09b73e3d4d98af48201da25adc29326Larisse VoufoTEST_F(PrivetURLFetcherTest, FetcherToFile) { 284ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo delegate_.SetRawMode(true); 285ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo privet_urlfetcher_->SaveResponseToFile(); 286ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo privet_urlfetcher_->Start(); 287ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0); 288ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo ASSERT_TRUE(fetcher != NULL); 289ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo fetcher->SetResponseFilePath( 2907caa6825f42a0f7e97d6fc06233133c42b218e46Douglas Gregor base::FilePath(FILE_PATH_LITERAL("sample/file"))); 291ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 292ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo net::OK)); 293ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo fetcher->set_response_code(200); 294ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo 295ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo EXPECT_CALL(delegate_, OnFileInternal()); 296ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo fetcher->delegate()->OnURLFetchComplete(fetcher); 297ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo} 298ef4579cda09b73e3d4d98af48201da25adc29326Larisse Voufo 2997caa6825f42a0f7e97d6fc06233133c42b218e46Douglas Gregor} // namespace 3007caa6825f42a0f7e97d6fc06233133c42b218e46Douglas Gregor 3017caa6825f42a0f7e97d6fc06233133c42b218e46Douglas Gregor} // namespace local_discovery 3027caa6825f42a0f7e97d6fc06233133c42b218e46Douglas Gregor