1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/bind.h" 6 #include "base/bind_helpers.h" 7 #include "base/message_loop/message_loop.h" 8 #include "components/dom_distiller/core/distiller_url_fetcher.h" 9 #include "net/http/http_status_code.h" 10 #include "net/url_request/test_url_fetcher_factory.h" 11 #include "net/url_request/url_fetcher.h" 12 #include "net/url_request/url_request_context_getter.h" 13 #include "net/url_request/url_request_status.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "url/gurl.h" 16 17 const char kTestPageA[] = "http://www.a.com/"; 18 const char kTestPageAResponse[] = { 1, 2, 3, 4, 5, 6, 7 }; 19 const char kTestPageB[] = "http://www.b.com/"; 20 const char kTestPageBResponse[] = { 'a', 'b', 'c' }; 21 22 23 class DistillerURLFetcherTest : public testing::Test { 24 public: 25 void FetcherCallback(const std::string& response) { 26 response_ = response; 27 } 28 29 protected: 30 // testing::Test implementation: 31 virtual void SetUp() OVERRIDE { 32 url_fetcher_.reset(new dom_distiller::DistillerURLFetcher(NULL)); 33 factory_.reset(new net::FakeURLFetcherFactory(NULL)); 34 factory_->SetFakeResponse( 35 GURL(kTestPageA), 36 std::string(kTestPageAResponse, sizeof(kTestPageAResponse)), 37 net::HTTP_OK, 38 net::URLRequestStatus::SUCCESS); 39 factory_->SetFakeResponse( 40 GURL(kTestPageB), 41 std::string(kTestPageBResponse, sizeof(kTestPageBResponse)), 42 net::HTTP_INTERNAL_SERVER_ERROR, 43 net::URLRequestStatus::SUCCESS); 44 } 45 46 void Fetch(const std::string& url, 47 const std::string& expected_response) { 48 base::MessageLoopForUI loop; 49 url_fetcher_->FetchURL( 50 url, 51 base::Bind(&DistillerURLFetcherTest::FetcherCallback, 52 base::Unretained(this))); 53 loop.RunUntilIdle(); 54 CHECK_EQ(expected_response, response_); 55 } 56 57 scoped_ptr<dom_distiller::DistillerURLFetcher> url_fetcher_; 58 scoped_ptr<net::FakeURLFetcherFactory> factory_; 59 std::string response_; 60 }; 61 62 TEST_F(DistillerURLFetcherTest, PopulateProto) { 63 Fetch(kTestPageA, 64 std::string(kTestPageAResponse, sizeof(kTestPageAResponse))); 65 } 66 67 TEST_F(DistillerURLFetcherTest, PopulateProtoFailedFetch) { 68 // Expect the callback to contain an empty string for this URL. 69 Fetch(kTestPageB, std::string(std::string(), 0)); 70 } 71