Chromium Code Reviews| Index: components/precache/core/precache_fetcher_unittest.cc |
| diff --git a/components/precache/core/precache_fetcher_unittest.cc b/components/precache/core/precache_fetcher_unittest.cc |
| index 316b9a5f2cd3518ef876cce85ba5b0e2ce99dd32..18b839a51800245a63d27e32fcf31ddba8d672c8 100644 |
| --- a/components/precache/core/precache_fetcher_unittest.cc |
| +++ b/components/precache/core/precache_fetcher_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/callback.h" |
| #include "base/command_line.h" |
| #include "base/compiler_specific.h" |
| +#include "base/test/histogram_tester.h" |
| #include "base/thread_task_runner_handle.h" |
| #include "components/precache/core/precache_switches.h" |
| #include "components/precache/core/proto/precache.pb.h" |
| @@ -29,6 +30,8 @@ namespace { |
| class TestURLFetcherCallback { |
| public: |
| + TestURLFetcherCallback() : total_response_bytes_(0) {} |
| + |
| scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( |
| const GURL& url, net::URLFetcherDelegate* delegate, |
| const std::string& response_data, net::HttpStatusCode response_code, |
| @@ -43,6 +46,7 @@ class TestURLFetcherCallback { |
| fetcher->set_response_headers(download_headers); |
| } |
| + total_response_bytes_ += response_data.size(); |
| requested_urls_.insert(url); |
| return fetcher.Pass(); |
| } |
| @@ -51,9 +55,12 @@ class TestURLFetcherCallback { |
| return requested_urls_; |
| } |
| + int total_response_bytes() const { return total_response_bytes_; } |
| + |
| private: |
| // Multiset with one entry for each URL requested. |
| std::multiset<GURL> requested_urls_; |
| + int total_response_bytes_; |
| }; |
| class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { |
| @@ -77,7 +84,8 @@ class PrecacheFetcherTest : public testing::Test { |
| base::ThreadTaskRunnerHandle::Get())), |
| factory_(NULL, |
| base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
| - base::Unretained(&url_callback_))) {} |
| + base::Unretained(&url_callback_))), |
| + expected_total_response_bytes_(0) {} |
| protected: |
| base::MessageLoopForUI loop_; |
| @@ -85,6 +93,7 @@ class PrecacheFetcherTest : public testing::Test { |
| TestURLFetcherCallback url_callback_; |
| net::FakeURLFetcherFactory factory_; |
| TestPrecacheDelegate precache_delegate_; |
| + int expected_total_response_bytes_; |
| }; |
| const char kConfigURL[] = "http://config-url.com"; |
| @@ -104,6 +113,8 @@ const char kGoodResourceURL[] = "http://good-resource.com"; |
| const char kForcedStartingURLManifestURL[] = |
| "http://manifest-url-prefix.com/forced-starting-url.com"; |
| +// TODO(twifkak): Test UMA metrics for full and cancelled runs. |
| + |
| TEST_F(PrecacheFetcherTest, FullPrecache) { |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| switches::kPrecacheConfigSettingsURL, kConfigURL); |
| @@ -146,11 +157,17 @@ TEST_F(PrecacheFetcherTest, FullPrecache) { |
| PrecacheManifest().SerializeAsString(), net::HTTP_OK, |
| net::URLRequestStatus::SUCCESS); |
| - PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
| - std::string(), &precache_delegate_); |
| - precache_fetcher.Start(); |
| + base::HistogramTester histogram; |
| - base::MessageLoop::current()->RunUntilIdle(); |
| + { |
|
bengr
2015/06/30 19:26:19
Why the scope?
twifkak
2015/06/30 20:23:51
Documented on line 169. How should I document that
bengr
2015/07/06 17:31:08
Acknowledged.
|
| + PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(), |
| + std::string(), &precache_delegate_); |
| + precache_fetcher.Start(); |
| + |
| + base::MessageLoop::current()->RunUntilIdle(); |
| + |
| + // Destroy the PrecacheFetcher after it has finished to record metrics. |
| + } |
| std::multiset<GURL> expected_requested_urls; |
| expected_requested_urls.insert(GURL(kConfigURL)); |
| @@ -164,6 +181,10 @@ TEST_F(PrecacheFetcherTest, FullPrecache) { |
| EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| EXPECT_TRUE(precache_delegate_.was_on_done_called()); |
| + |
| + histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); |
| + histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes", |
| + url_callback_.total_response_bytes(), 1); |
| } |
| TEST_F(PrecacheFetcherTest, CustomManifestURLPrefix) { |
| @@ -272,13 +293,15 @@ TEST_F(PrecacheFetcherTest, Cancel) { |
| factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), |
| net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| + base::HistogramTester histogram; |
| + |
| scoped_ptr<PrecacheFetcher> precache_fetcher( |
| new PrecacheFetcher(starting_hosts, request_context_.get(), std::string(), |
| &precache_delegate_)); |
| precache_fetcher->Start(); |
| - // Destroy the PrecacheFetcher to cancel precaching. This should not cause |
| - // OnDone to be called on the precache delegate. |
| + // Destroy the PrecacheFetcher to cancel precaching and record metrics. This |
| + // should not cause OnDone to be called on the precache delegate. |
| precache_fetcher.reset(); |
| base::MessageLoop::current()->RunUntilIdle(); |
| @@ -288,6 +311,9 @@ TEST_F(PrecacheFetcherTest, Cancel) { |
| EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); |
| EXPECT_FALSE(precache_delegate_.was_on_done_called()); |
| + |
| + histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 0, 1); |
| + histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes", 0, 1); |
| } |
| #if defined(PRECACHE_CONFIG_SETTINGS_URL) |