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