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