1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/rappor/rappor_service.h"
6
7#include "base/base64.h"
8#include "base/prefs/testing_pref_service.h"
9#include "components/rappor/byte_vector_utils.h"
10#include "components/rappor/proto/rappor_metric.pb.h"
11#include "components/rappor/rappor_parameters.h"
12#include "components/rappor/rappor_pref_names.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace rappor {
16
17class TestRapporService : public RapporService {
18 public:
19  TestRapporService() : RapporService(&prefs_) {
20    RegisterPrefs(prefs_.registry());
21    prefs_.SetInteger(prefs::kRapporCohortSeed, 0);
22    std::string secret = HmacByteVectorGenerator::GenerateEntropyInput();
23    std::string secret_base64;
24    base::Base64Encode(secret, &secret_base64);
25    prefs_.SetString(prefs::kRapporSecret, secret_base64);
26    LoadCohort();
27    LoadSecret();
28  }
29
30  void GetReports(RapporReports* reports) {
31    ExportMetrics(reports);
32  }
33
34  void TestRecordSample(const std::string& metric_name,
35                        const RapporParameters& parameters,
36                        const std::string& sample) {
37    RecordSampleInternal(metric_name, parameters, sample);
38  }
39
40 protected:
41  TestingPrefServiceSimple prefs_;
42
43 private:
44  DISALLOW_COPY_AND_ASSIGN(TestRapporService);
45};
46
47TEST(RapporServiceTest, RecordAndExportMetrics) {
48  const RapporParameters kTestRapporParameters = {
49      1 /* Num cohorts */,
50      16 /* Bloom filter size bytes */,
51      4 /* Bloom filter hash count */,
52      PROBABILITY_75 /* Fake data probability */,
53      PROBABILITY_50 /* Fake one probability */,
54      PROBABILITY_75 /* One coin probability */,
55      PROBABILITY_50 /* Zero coin probability */};
56
57  TestRapporService rappor_service;
58
59  rappor_service.TestRecordSample("MyMetric", kTestRapporParameters, "foo");
60  rappor_service.TestRecordSample("MyMetric", kTestRapporParameters, "bar");
61
62  RapporReports reports;
63  rappor_service.GetReports(&reports);
64  EXPECT_EQ(1, reports.report_size());
65
66  const RapporReports::Report& report = reports.report(0);
67  EXPECT_TRUE(report.name_hash());
68  EXPECT_EQ(16u, report.bits().size());
69}
70
71}  // namespace rappor
72