File: password_manager_metrics_util_unittest.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (81 lines) | stat: -rw-r--r-- 2,929 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Copyright 2013 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 "components/password_manager/core/browser/password_manager_metrics_util.h"

#include <iterator>
#include <map>

#include "base/basictypes.h"
#include "base/prefs/scoped_user_pref_update.h"
#include "base/values.h"
#include "chrome/test/base/testing_profile.h"
#include "components/password_manager/core/common/password_manager_pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"

class PasswordManagerMetricsUtilTest : public testing::Test {
 public:
  PasswordManagerMetricsUtilTest() {}

 protected:
  bool IsMonitored(const char* url_host) {
    size_t group_id = password_manager::metrics_util::MonitoredDomainGroupId(
        url_host, profile_.GetPrefs());
    return group_id > 0;
  }

  TestingProfile profile_;
};

TEST_F(PasswordManagerMetricsUtilTest, MonitoredDomainGroupAssigmentTest) {
  const char* const kMonitoredWebsites[] = {
      "https://www.google.com",
      "https://www.yahoo.com",
      "https://www.baidu.com",
      "https://www.wikipedia.org",
      "https://www.linkedin.com",
      "https://www.twitter.com",
      "https://www.facebook.com",
      "https://www.amazon.com",
      "https://www.ebay.com",
      "https://www.tumblr.com",
  };
  const size_t kMonitoredWebsitesLength = arraysize(kMonitoredWebsites);

  // The |groups| map contains the group id and the number of times
  // it get assigned.
  std::map<size_t, size_t> groups;

  // Provide all possible values of the group id parameter for each monitored
  // website.
  for (size_t i = 0; i < kMonitoredWebsitesLength; ++i) {
    for (size_t j = 0; j < password_manager::metrics_util::kGroupsPerDomain;
         ++j) {
      {  // Set the group index for domain |i| to |j|.
        ListPrefUpdate group_indices(
            profile_.GetPrefs(),
            password_manager::prefs::kPasswordManagerGroupsForDomains);
        group_indices->Set(i, new base::FundamentalValue(static_cast<int>(j)));
      }  // At the end of the scope the prefs get updated.

      ++groups[password_manager::metrics_util::MonitoredDomainGroupId(
          kMonitoredWebsites[i], profile_.GetPrefs())];
    }
  }

  // Check if all groups get assigned the same number of times.
  size_t number_of_assigment = groups.begin()->second;
  for (std::map<size_t, size_t>::iterator it = groups.begin();
       it != groups.end(); ++it) {
    EXPECT_EQ(it->second, number_of_assigment) << " group id = " << it->first;
  }
}

TEST_F(PasswordManagerMetricsUtilTest, MonitoredDomainGroupTest) {
  EXPECT_TRUE(IsMonitored("https://www.linkedin.com"));
  EXPECT_TRUE(IsMonitored("https://www.amazon.com"));
  EXPECT_TRUE(IsMonitored("https://www.facebook.com"));
  EXPECT_TRUE(IsMonitored("http://wikipedia.org"));
  EXPECT_FALSE(IsMonitored("http://thisisnotwikipedia.org"));
}