| Index: chrome/browser/metrics/metrics_log_unittest.cc
|
| diff --git a/chrome/browser/metrics/metrics_log_unittest.cc b/chrome/browser/metrics/metrics_log_unittest.cc
|
| index 4c4b5557aa94426187bbfff3772e9fc3fbac1363..cc94f1235a13bad5f263c28d4942ec90e5000cc7 100644
|
| --- a/chrome/browser/metrics/metrics_log_unittest.cc
|
| +++ b/chrome/browser/metrics/metrics_log_unittest.cc
|
| @@ -4,52 +4,85 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/stringprintf.h"
|
| #include "base/string_util.h"
|
| #include "base/time.h"
|
| #include "chrome/browser/metrics/metrics_log.h"
|
| #include "chrome/browser/prefs/browser_prefs.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| +#include "chrome/common/metrics/proto/system_profile.pb.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/test/base/testing_pref_service.h"
|
| #include "googleurl/src/gurl.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/gfx/size.h"
|
| #include "webkit/plugins/webplugininfo.h"
|
|
|
| using base::TimeDelta;
|
|
|
| namespace {
|
|
|
| -// Since buildtime is highly variable, this function will scan an output log and
|
| -// replace it with a consistent number.
|
| -void NormalizeBuildtime(std::string* xml_encoded) {
|
| - std::string prefix = "buildtime=\"";
|
| - const char postfix = '\"';
|
| - size_t offset = xml_encoded->find(prefix);
|
| - ASSERT_NE(std::string::npos, offset);
|
| - offset += prefix.size();
|
| - size_t postfix_position = xml_encoded->find(postfix, offset);
|
| - ASSERT_NE(std::string::npos, postfix_position);
|
| - for (size_t i = offset; i < postfix_position; ++i) {
|
| - char digit = xml_encoded->at(i);
|
| - ASSERT_GE(digit, '0');
|
| - ASSERT_LE(digit, '9');
|
| +const char kClientId[] = "bogus client ID";
|
| +const int kSessionId = 127;
|
| +const int kScreenWidth = 1024;
|
| +const int kScreenHeight = 768;
|
| +const int kScreenCount = 3;
|
| +const base::FieldTrial::NameGroupId kFieldTrialIds[] = {
|
| + {37, 43},
|
| + {13, 47},
|
| + {23, 17}
|
| +};
|
| +
|
| +class TestMetricsLog : public MetricsLog {
|
| + public:
|
| + TestMetricsLog(const std::string& client_id, int session_id)
|
| + : MetricsLog(client_id, session_id) {
|
| + browser::RegisterLocalState(&prefs_);
|
| +
|
| +#if defined(OS_CHROMEOS)
|
| + prefs_.SetInteger(prefs::kStabilityChildProcessCrashCount, 10);
|
| + prefs_.SetInteger(prefs::kStabilityOtherUserCrashCount, 11);
|
| + prefs_.SetInteger(prefs::kStabilityKernelCrashCount, 12);
|
| + prefs_.SetInteger(prefs::kStabilitySystemUncleanShutdownCount, 13);
|
| +#endif // OS_CHROMEOS
|
| }
|
| + virtual ~TestMetricsLog() {}
|
|
|
| - // Insert a single fake buildtime.
|
| - xml_encoded->replace(offset, postfix_position - offset, "123246");
|
| -}
|
| + virtual PrefService* GetPrefService() OVERRIDE {
|
| + return &prefs_;
|
| + }
|
|
|
| -class NoTimeMetricsLog : public MetricsLog {
|
| - public:
|
| - NoTimeMetricsLog(std::string client_id, int session_id):
|
| - MetricsLog(client_id, session_id) {}
|
| - virtual ~NoTimeMetricsLog() {}
|
| + const metrics::SystemProfileProto& system_profile() const {
|
| + return uma_proto()->system_profile();
|
| + }
|
|
|
| - // Override this so that output is testable.
|
| - virtual std::string GetCurrentTimeString() {
|
| + private:
|
| + virtual std::string GetCurrentTimeString() OVERRIDE {
|
| return std::string();
|
| }
|
| +
|
| + virtual void GetFieldTrialIds(
|
| + std::vector<base::FieldTrial::NameGroupId>* field_trial_ids) const
|
| + OVERRIDE {
|
| + ASSERT_TRUE(field_trial_ids->empty());
|
| +
|
| + for (size_t i = 0; i < arraysize(kFieldTrialIds); ++i) {
|
| + field_trial_ids->push_back(kFieldTrialIds[i]);
|
| + }
|
| + }
|
| +
|
| + virtual gfx::Size GetScreenSize() const OVERRIDE {
|
| + return gfx::Size(kScreenWidth, kScreenHeight);
|
| + }
|
| +
|
| + virtual int GetScreenCount() const OVERRIDE {
|
| + return kScreenCount;
|
| + }
|
| +
|
| + TestingPrefService prefs_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestMetricsLog);
|
| };
|
|
|
| } // namespace
|
| @@ -57,35 +90,45 @@ class NoTimeMetricsLog : public MetricsLog {
|
| class MetricsLogTest : public testing::Test {
|
| };
|
|
|
| -#if defined(OS_CHROMEOS)
|
| -TEST(MetricsLogTest, ChromeOSStabilityData) {
|
| - NoTimeMetricsLog log("bogus client ID", 0);
|
| - TestingPrefService prefs;
|
| - browser::RegisterLocalState(&prefs);
|
| -
|
| - prefs.SetInteger(prefs::kStabilityChildProcessCrashCount, 10);
|
| - prefs.SetInteger(prefs::kStabilityOtherUserCrashCount, 11);
|
| - prefs.SetInteger(prefs::kStabilityKernelCrashCount, 12);
|
| - prefs.SetInteger(prefs::kStabilitySystemUncleanShutdownCount, 13);
|
| +TEST_F(MetricsLogTest, RecordEnvironment) {
|
| + // Everything except build_timestamp and app_version
|
| + TestMetricsLog log(kClientId, kSessionId);
|
|
|
| std::vector<webkit::WebPluginInfo> plugins;
|
| + log.RecordEnvironment(plugins, NULL);
|
| +
|
| + const metrics::SystemProfileProto& system_profile = log.system_profile();
|
| + ASSERT_EQ(arraysize(kFieldTrialIds),
|
| + static_cast<size_t>(system_profile.field_trial_size()));
|
| + for (size_t i = 0; i < arraysize(kFieldTrialIds); ++i) {
|
| + const metrics::SystemProfileProto::FieldTrial& field_trial =
|
| + system_profile.field_trial(i);
|
| + EXPECT_EQ(kFieldTrialIds[i].name, field_trial.name_id());
|
| + EXPECT_EQ(kFieldTrialIds[i].group, field_trial.group_id());
|
| + }
|
| +
|
| + // TODO(isherman): Verify other data written into the protobuf as a result of
|
| + // this call.
|
| +}
|
| +
|
| +#if defined(OS_CHROMEOS)
|
| +TEST_F(MetricsLogTest, ChromeOSStabilityData) {
|
| + TestMetricsLog log(kClientId, kSessionId);
|
|
|
| - std::string expected_output = base::StringPrintf(
|
| - "<log clientid=\"bogus client ID\" buildtime=\"123456789\" "
|
| - "appversion=\"%s\">\n"
|
| - "<stability stuff>\n", MetricsLog::GetVersionString().c_str());
|
| // Expect 3 warnings about not yet being able to send the
|
| // Chrome OS stability stats.
|
| - log.WriteStabilityElement(plugins, &prefs);
|
| + std::vector<webkit::WebPluginInfo> plugins;
|
| + PrefService* prefs = log.GetPrefService();
|
| + log.WriteStabilityElement(plugins, prefs);
|
| log.CloseLog();
|
|
|
| int size = log.GetEncodedLogSizeXml();
|
| ASSERT_GT(size, 0);
|
|
|
| - EXPECT_EQ(0, prefs.GetInteger(prefs::kStabilityChildProcessCrashCount));
|
| - EXPECT_EQ(0, prefs.GetInteger(prefs::kStabilityOtherUserCrashCount));
|
| - EXPECT_EQ(0, prefs.GetInteger(prefs::kStabilityKernelCrashCount));
|
| - EXPECT_EQ(0, prefs.GetInteger(prefs::kStabilitySystemUncleanShutdownCount));
|
| + EXPECT_EQ(0, prefs->GetInteger(prefs::kStabilityChildProcessCrashCount));
|
| + EXPECT_EQ(0, prefs->GetInteger(prefs::kStabilityOtherUserCrashCount));
|
| + EXPECT_EQ(0, prefs->GetInteger(prefs::kStabilityKernelCrashCount));
|
| + EXPECT_EQ(0, prefs->GetInteger(prefs::kStabilitySystemUncleanShutdownCount));
|
|
|
| std::string encoded;
|
| // Leave room for the NUL terminator.
|
|
|