Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: components/rappor/rappor_metric_unittest.cc

Issue 1058333002: Multi-dimension rappor metrics (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/rappor/rappor_metric.h" 5 #include "components/rappor/rappor_metric.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace rappor { 13 namespace rappor {
14 14
15 const RapporParameters kTestRapporParameters = { 15 const RapporParameters kTestRapporParameters = {
16 1 /* Num cohorts */, 16 1 /* Num cohorts */,
17 16 /* Bloom filter size bytes */, 17 8 /* Bloom filter size bytes */,
18 4 /* Bloom filter hash count */, 18 4 /* Bloom filter hash count */,
19 8,
19 PROBABILITY_75 /* Fake data probability */, 20 PROBABILITY_75 /* Fake data probability */,
20 PROBABILITY_50 /* Fake one probability */, 21 PROBABILITY_50 /* Fake one probability */,
21 PROBABILITY_75 /* One coin probability */, 22 PROBABILITY_75 /* One coin probability */,
22 PROBABILITY_50 /* Zero coin probability */, 23 PROBABILITY_50 /* Zero coin probability */,
23 FINE_LEVEL /* Reporting level (not used) */}; 24 FINE_LEVEL /* Reporting level (not used) */};
24 25
25 const RapporParameters kTestStatsRapporParameters = { 26 const RapporParameters kTestStatsRapporParameters = {
26 1 /* Num cohorts */, 27 1 /* Num cohorts */,
27 50 /* Bloom filter size bytes */, 28 50 /* Bloom filter size bytes */,
28 4 /* Bloom filter hash count */, 29 4 /* Bloom filter hash count */,
30 0,
29 PROBABILITY_75 /* Fake data probability */, 31 PROBABILITY_75 /* Fake data probability */,
30 PROBABILITY_50 /* Fake one probability */, 32 PROBABILITY_50 /* Fake one probability */,
31 PROBABILITY_75 /* One coin probability */, 33 PROBABILITY_75 /* One coin probability */,
32 PROBABILITY_50 /* Zero coin probability */, 34 PROBABILITY_50 /* Zero coin probability */,
33 FINE_LEVEL /* Reporting level (not used) */}; 35 FINE_LEVEL /* Reporting level (not used) */};
34 36
35 // Check for basic syntax and use.
36 TEST(RapporMetricTest, BasicMetric) {
37 RapporMetric testMetric("MyRappor", kTestRapporParameters, 0);
38 testMetric.AddSample("Bar");
39 EXPECT_EQ(0x80, testMetric.bytes()[1]);
40 }
41
42 TEST(RapporMetricTest, GetReport) { 37 TEST(RapporMetricTest, GetReport) {
43 RapporMetric metric("MyRappor", kTestRapporParameters, 0); 38 RapporMetric metric("MyRappor", kTestRapporParameters);
44 39
45 const ByteVector report = metric.GetReport( 40 const ByteVector report = metric.GetReport(
46 HmacByteVectorGenerator::GenerateEntropyInput()); 41 HmacByteVectorGenerator::GenerateEntropyInput());
47 EXPECT_EQ(16u, report.size()); 42 EXPECT_EQ(16u, report.size());
48 } 43 }
49 44
50 TEST(RapporMetricTest, GetReportStatistics) { 45 TEST(RapporMetricTest, GetReportStatistics) {
51 RapporMetric metric("MyStatsRappor", kTestStatsRapporParameters, 0); 46 RapporMetric metric("MyStatsRappor", kTestStatsRapporParameters);
52 47
53 ByteVector real_bits(kTestStatsRapporParameters.bloom_filter_size_bytes); 48 ByteVector real_bits(kTestStatsRapporParameters.bloom_filter_size_bytes);
54 // Set 152 bits (19 bytes) 49 // Set 152 bits (19 bytes)
55 for (char i = 0; i < 19; i++) { 50 for (char i = 0; i < 19; i++) {
56 real_bits[i] = 0xff; 51 real_bits[i] = 0xff;
57 } 52 }
58 metric.SetBytesForTesting(real_bits); 53 metric.AddSample(real_bits);
59 const int real_bit_count = CountBits(real_bits); 54 const int real_bit_count = CountBits(real_bits);
60 EXPECT_EQ(real_bit_count, 152); 55 EXPECT_EQ(real_bit_count, 152);
61 56
62 const std::string secret = HmacByteVectorGenerator::GenerateEntropyInput(); 57 const std::string secret = HmacByteVectorGenerator::GenerateEntropyInput();
63 const ByteVector report = metric.GetReport(secret); 58 const ByteVector report = metric.GetReport(secret);
64 59
65 // For the bits we actually set in the Bloom filter, get a count of how 60 // For the bits we actually set in the Bloom filter, get a count of how
66 // many of them reported true. 61 // many of them reported true.
67 ByteVector from_true_reports = report; 62 ByteVector from_true_reports = report;
68 // Real bits AND report bits. 63 // Real bits AND report bits.
(...skipping 23 matching lines...) Expand all
92 // stats.binom(152, 0.65625).ppf(0.999995) = 124 87 // stats.binom(152, 0.65625).ppf(0.999995) = 124
93 EXPECT_LE(true_from_true_count, 124); 88 EXPECT_LE(true_from_true_count, 124);
94 89
95 // stats.binom(248, 0.59375).ppf(.000005) = 113 90 // stats.binom(248, 0.59375).ppf(.000005) = 113
96 EXPECT_GT(true_from_false_count, 113); 91 EXPECT_GT(true_from_false_count, 113);
97 // stats.binom(248, 0.59375).ppf(.999995) = 181 92 // stats.binom(248, 0.59375).ppf(.999995) = 181
98 EXPECT_LE(true_from_false_count, 181); 93 EXPECT_LE(true_from_false_count, 181);
99 } 94 }
100 95
101 } // namespace rappor 96 } // namespace rappor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698