summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metrics/metrics_log_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/metrics/metrics_log_unittest.cc')
-rw-r--r--chrome/browser/metrics/metrics_log_unittest.cc130
1 files changed, 130 insertions, 0 deletions
diff --git a/chrome/browser/metrics/metrics_log_unittest.cc b/chrome/browser/metrics/metrics_log_unittest.cc
new file mode 100644
index 0000000..4899b43
--- /dev/null
+++ b/chrome/browser/metrics/metrics_log_unittest.cc
@@ -0,0 +1,130 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "base/string_util.h"
+#include "base/time.h"
+#include "chrome/browser/metrics/metrics_log.h"
+#include "googleurl/src/gurl.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::TimeDelta;
+
+namespace {
+ class MetricsLogTest : public testing::Test {
+ };
+};
+
+TEST(MetricsLogTest, EmptyRecord) {
+ std::string expected_output = "<log clientid=\"bogus client ID\"/>";
+
+ MetricsLog log("bogus client ID", 0);
+ log.CloseLog();
+
+ int size = log.GetEncodedLogSize();
+ ASSERT_GT(size, 0);
+
+ std::string encoded;
+ ASSERT_TRUE(log.GetEncodedLog(WriteInto(&encoded, size), size));
+
+ ASSERT_EQ(expected_output, encoded);
+}
+
+namespace {
+
+class NoTimeMetricsLog : public MetricsLog {
+ public:
+ NoTimeMetricsLog(std::string client_id, int session_id):
+ MetricsLog(client_id, session_id) {}
+ virtual ~NoTimeMetricsLog() {}
+
+ // Override this so that output is testable.
+ virtual std::string GetCurrentTimeString() {
+ return std::string();
+ }
+};
+
+}; // namespace
+
+TEST(MetricsLogTest, WindowEvent) {
+ std::string expected_output =
+ "<log clientid=\"bogus client ID\">\n"
+ " <window action=\"create\" windowid=\"0\" session=\"0\" time=\"\"/>\n"
+ " <window action=\"open\" windowid=\"1\" parent=\"0\" "
+ "session=\"0\" time=\"\"/>\n"
+ " <window action=\"close\" windowid=\"1\" parent=\"0\" "
+ "session=\"0\" time=\"\"/>\n"
+ " <window action=\"destroy\" windowid=\"0\" session=\"0\" time=\"\"/>\n"
+ "</log>";
+
+ NoTimeMetricsLog log("bogus client ID", 0);
+ log.RecordWindowEvent(MetricsLog::WINDOW_CREATE, 0, -1);
+ log.RecordWindowEvent(MetricsLog::WINDOW_OPEN, 1, 0);
+ log.RecordWindowEvent(MetricsLog::WINDOW_CLOSE, 1, 0);
+ log.RecordWindowEvent(MetricsLog::WINDOW_DESTROY, 0, -1);
+ log.CloseLog();
+
+ ASSERT_EQ(4, log.num_events());
+
+ int size = log.GetEncodedLogSize();
+ ASSERT_GT(size, 0);
+
+ std::string encoded;
+ ASSERT_TRUE(log.GetEncodedLog(WriteInto(&encoded, size), size));
+
+ ASSERT_EQ(expected_output, encoded);
+}
+
+TEST(MetricsLogTest, LoadEvent) {
+ std::string expected_output =
+ "<log clientid=\"bogus client ID\">\n"
+ " <document action=\"load\" docid=\"1\" window=\"3\" loadtime=\"7219\" "
+ "origin=\"link\" "
+ "session=\"0\" time=\"\"/>\n"
+ "</log>";
+
+ NoTimeMetricsLog log("bogus client ID", 0);
+ log.RecordLoadEvent(3, GURL("http://google.com"), PageTransition::LINK,
+ 1, TimeDelta::FromMilliseconds(7219));
+
+ log.CloseLog();
+
+ ASSERT_EQ(1, log.num_events());
+
+ int size = log.GetEncodedLogSize();
+ ASSERT_GT(size, 0);
+
+ std::string encoded;
+ ASSERT_TRUE(log.GetEncodedLog(WriteInto(&encoded, size), size));
+
+ ASSERT_EQ(expected_output, encoded);
+}
+
+// Make sure our ID hashes are the same as what we see on the server side.
+TEST(MetricsLogTest, CreateHash) {
+ static const struct {
+ std::string input;
+ std::string output;
+ } cases[] = {
+ {"Back", "0x0557fa923dcee4d0"},
+ {"Forward", "0x67d2f6740a8eaebf"},
+ {"NewTab", "0x290eb683f96572f1"},
+ };
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
+ std::string hash_string = MetricsLog::CreateHash(cases[i].input);
+
+ // Convert to hex string
+ // We're only checking the first 8 bytes, because that's what
+ // the metrics server uses.
+ std::string hash_hex = "0x";
+ for (size_t j = 0; j < 8; j++) {
+ StringAppendF(&hash_hex, "%02x",
+ static_cast<uint8>(hash_string.data()[j]));
+ }
+ EXPECT_EQ(cases[i].output, hash_hex);
+ }
+};
+