15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/metrics/statistics_recorder.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/test/histogram_tester.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/external_metrics.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/metrics/serialization/metric_sample.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/metrics/serialization/serialization_utils.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { // Need this because of the FRIEND_TEST 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExternalMetricsTest : public testing::Test { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(dir_.CreateUniqueTempDir()); 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) external_metrics_ = ExternalMetrics::CreateForTesting( 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dir_.path().Append("testfile").value()); 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::ScopedTempDir dir_; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<ExternalMetrics> external_metrics_; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(ExternalMetricsTest, HandleMissingFile) { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(base::DeleteFile( 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath(external_metrics_->uma_events_file_), false)); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, external_metrics_->CollectEvents()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(ExternalMetricsTest, CanReceiveHistogram) { 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histogram_tester; 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<metrics::MetricSample> hist = 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::MetricSample::HistogramSample("foo", 2, 1, 100, 10); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(metrics::SerializationUtils::WriteMetricToFile( 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *hist.get(), external_metrics_->uma_events_file_)); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, external_metrics_->CollectEvents()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester.ExpectTotalCount("foo", 1); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(ExternalMetricsTest, IncorrectHistogramsAreDiscarded) { 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histogram_tester; 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Malformed histogram (min > max). 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<metrics::MetricSample> hist = 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) metrics::MetricSample::HistogramSample("bar", 30, 200, 20, 10); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(metrics::SerializationUtils::WriteMetricToFile( 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *hist.get(), external_metrics_->uma_events_file_)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) external_metrics_->CollectEvents(); 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) histogram_tester.ExpectTotalCount("bar", 0); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 67