1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/metrics/metrics_response.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/metrics/metrics_service.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  class MetricsResponseTest : public testing::Test {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char kNoLogResponse[] =
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "<response xmlns=\"http://www.mozilla.org/metrics\"><config>"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "</config></response>";
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char kLogResponse1[] =
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "<response xmlns=\"http://www.mozilla.org/metrics\"><config>"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "<collectors>"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"profile\"/>"
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"document\"/>"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"window\"/>"
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"ui\"/>"
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "</collectors>"
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "<limit events=\"500\"/><upload interval=\"600\"/>"
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "</config></response>";
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char kLogResponse2[] =
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "<response xmlns=\"http://www.mozilla.org/metrics\"><config>"
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "<collectors>"
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"profile\"/>"
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"document\"/>"
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "<collector type=\"window\"/>"
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "</collectors>"
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "<limit events=\"250\"/><upload interval=\"900\"/>"
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "</config></response>";
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const struct ResponseCase {
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* response_xml;
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int collectors;
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int events;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int interval;
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool profile_active;
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool window_active;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool document_active;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ui_active;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} response_cases[] = {
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    kNoLogResponse,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MetricsResponse::COLLECTOR_NONE,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    0, 0,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    false, false, false, false
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    kLogResponse1,
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MetricsResponse::COLLECTOR_PROFILE |
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        MetricsResponse::COLLECTOR_DOCUMENT |
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        MetricsResponse::COLLECTOR_WINDOW |
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        MetricsResponse::COLLECTOR_UI,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    500, 600,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    true, true, true, true
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    kLogResponse2,
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MetricsResponse::COLLECTOR_PROFILE |
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        MetricsResponse::COLLECTOR_DOCUMENT |
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        MetricsResponse::COLLECTOR_WINDOW,
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    250, 900,
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    true, true, true, false
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MetricsResponseTest, ParseResponse) {
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (size_t i = 0; i < arraysize(response_cases); ++i) {
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ResponseCase rcase = response_cases[i];
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MetricsResponse response(rcase.response_xml);
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(response.valid());
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.collectors, response.collectors()) <<
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        "Mismatch in case " << i;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.events, response.events()) << "Mismatch in case " << i;
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.interval, response.interval()) << "Mismatch in case " << i;
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.profile_active,
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              response.collector_active(MetricsResponse::COLLECTOR_PROFILE)) <<
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              "Mismatch in case " << i;
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.window_active,
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              response.collector_active(MetricsResponse::COLLECTOR_WINDOW)) <<
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              "Mismatch in case " << i;
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.document_active,
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              response.collector_active(MetricsResponse::COLLECTOR_DOCUMENT)) <<
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              "Mismatch in case " << i;
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(rcase.ui_active,
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              response.collector_active(MetricsResponse::COLLECTOR_UI)) <<
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              "Mismatch in case " << i;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char* bogus_responses[] = {"", "<respo"};
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(MetricsResponseTest, ParseBogusResponse) {
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (size_t i = 0; i < arraysize(bogus_responses); ++i) {
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    MetricsResponse response(bogus_responses[i]);
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(response.valid());
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
109