Index: components/rappor/sampler_unittest.cc |
diff --git a/components/rappor/sampler_unittest.cc b/components/rappor/sampler_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2790c6f4118d44d0682fed587a1aff6890f7b962 |
--- /dev/null |
+++ b/components/rappor/sampler_unittest.cc |
@@ -0,0 +1,60 @@ |
+// Copyright 2015 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/rappor/sampler.h" |
+ |
+#include "components/rappor/byte_vector_utils.h" |
+#include "components/rappor/proto/rappor_metric.pb.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace rappor { |
+ |
+const RapporParameters kTestRapporParameters = { |
+ 1 /* Num cohorts */, |
+ 1 /* Bloom filter size bytes */, |
+ 4 /* Bloom filter hash count */, |
+ PROBABILITY_75 /* Fake data probability */, |
+ PROBABILITY_50 /* Fake one probability */, |
+ PROBABILITY_75 /* One coin probability */, |
+ PROBABILITY_50 /* Zero coin probability */, |
+ FINE_LEVEL /* Reporting level (not used) */}; |
+ |
+class TestSamplerFactory { |
+ public: |
+ static scoped_ptr<Sample> CreateSample() { |
+ return scoped_ptr<Sample>(new Sample(0, kTestRapporParameters)); |
+ } |
+}; |
+ |
+namespace internal { |
+ |
+// Test that exporting deletes samples. |
+TEST(RapporSamplerTest, TestExport) { |
+ Sampler sampler; |
+ |
+ scoped_ptr<Sample> sample1 = TestSamplerFactory::CreateSample(); |
+ sample1->SetStringField("Foo", "Junk"); |
+ sampler.AddSample("Metric1", sample1.Pass()); |
+ |
+ scoped_ptr<Sample> sample2 = TestSamplerFactory::CreateSample(); |
+ sample2->SetStringField("Foo", "Junk2"); |
+ sampler.AddSample("Metric1", sample2.Pass()); |
+ |
+ // Since the two samples were for one metric, we should randomly get one |
+ // of the two. |
+ RapporReports reports; |
+ std::string secret = HmacByteVectorGenerator::GenerateEntropyInput(); |
+ sampler.ExportMetrics(secret, &reports); |
+ EXPECT_EQ(1, reports.report_size()); |
+ EXPECT_EQ(1u, reports.report(0).bits().size()); |
+ |
+ // First export should clear the metric. |
+ RapporReports reports2; |
+ sampler.ExportMetrics(secret, &reports2); |
+ EXPECT_EQ(0, reports2.report_size()); |
+} |
+ |
+} // namespace internal |
+ |
+} // namespace rappor |