Index: components/metrics/leak_detector/protobuf_to_mojo_converter_unittest.cc |
diff --git a/components/metrics/leak_detector/protobuf_to_mojo_converter_unittest.cc b/components/metrics/leak_detector/protobuf_to_mojo_converter_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f768c312f05d42768b92597008f90203cd95c9af |
--- /dev/null |
+++ b/components/metrics/leak_detector/protobuf_to_mojo_converter_unittest.cc |
@@ -0,0 +1,139 @@ |
+// Copyright 2016 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/metrics/leak_detector/protobuf_to_mojo_converter.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace metrics { |
+namespace leak_detector { |
+ |
+TEST(protobuf_to_mojo_converterTest, ConvertParams) { |
+ MemoryLeakReportProto::Params params; |
+ params.set_sampling_rate(0.75); |
+ params.set_max_stack_depth(19); |
+ params.set_analysis_interval_bytes(25 * 1024 * 1024); |
+ params.set_size_suspicion_threshold(8); |
+ params.set_call_stack_suspicion_threshold(11); |
+ |
+ // Convert to equivalent Mojo struct. |
+ mojo::StructPtr<mojom::LeakDetectorParams> mojo_params = |
+ mojom::LeakDetectorParams::New(); |
+ protobuf_to_mojo_converter::ParamsToMojo(params, mojo_params.get()); |
+ |
+ EXPECT_DOUBLE_EQ(0.75, mojo_params->sampling_rate); |
+ EXPECT_EQ(19U, mojo_params->max_stack_depth); |
+ EXPECT_EQ(25U * 1024 * 1024, mojo_params->analysis_interval_bytes); |
+ EXPECT_EQ(8U, mojo_params->size_suspicion_threshold); |
+ EXPECT_EQ(11U, mojo_params->call_stack_suspicion_threshold); |
+ |
+ // Convert Mojo struct back to protobuf. |
+ MemoryLeakReportProto::Params new_params; |
+ protobuf_to_mojo_converter::MojoToParams(*mojo_params, &new_params); |
+ |
+ EXPECT_DOUBLE_EQ(0.75, new_params.sampling_rate()); |
+ EXPECT_EQ(19U, new_params.max_stack_depth()); |
+ EXPECT_EQ(25U * 1024 * 1024, new_params.analysis_interval_bytes()); |
+ EXPECT_EQ(8U, new_params.size_suspicion_threshold()); |
+ EXPECT_EQ(11U, new_params.call_stack_suspicion_threshold()); |
+} |
+ |
+TEST(protobuf_to_mojo_converterTest, ConvertReport) { |
+ MemoryLeakReportProto report; |
+ report.add_call_stack(0xdeadbeef); |
+ report.add_call_stack(0xc001d00d); |
+ report.add_call_stack(0x900df00d); |
+ report.set_size_bytes(24); |
+ |
+ auto entry1 = report.add_alloc_breakdown_history(); |
+ entry1->add_counts_by_size(1); |
+ entry1->add_counts_by_size(2); |
+ entry1->add_counts_by_size(3); |
+ entry1->set_count_for_call_stack(4); |
+ |
+ auto entry2 = report.add_alloc_breakdown_history(); |
+ entry2->add_counts_by_size(11); |
+ entry2->add_counts_by_size(12); |
+ entry2->add_counts_by_size(13); |
+ entry2->add_counts_by_size(14); |
+ entry2->set_count_for_call_stack(15); |
+ |
+ auto entry3 = report.add_alloc_breakdown_history(); |
+ entry3->add_counts_by_size(21); |
+ entry3->add_counts_by_size(22); |
+ entry3->add_counts_by_size(23); |
+ entry3->add_counts_by_size(24); |
+ entry3->add_counts_by_size(25); |
+ entry3->set_count_for_call_stack(26); |
+ |
+ // Convert to equivalent Mojo struct. |
+ mojo::StructPtr<mojom::MemoryLeakReport> mojo_report = |
+ mojom::MemoryLeakReport::New(); |
+ protobuf_to_mojo_converter::ReportToMojo(report, mojo_report.get()); |
+ |
+ ASSERT_EQ(3U, mojo_report->call_stack.size()); |
+ EXPECT_EQ(0xdeadbeef, mojo_report->call_stack[0]); |
+ EXPECT_EQ(0xc001d00d, mojo_report->call_stack[1]); |
+ EXPECT_EQ(0x900df00d, mojo_report->call_stack[2]); |
+ EXPECT_EQ(24U, mojo_report->size_bytes); |
+ |
+ ASSERT_EQ(3U, mojo_report->alloc_breakdown_history.size()); |
+ |
+ ASSERT_EQ(3U, mojo_report->alloc_breakdown_history[0]->counts_by_size.size()); |
+ EXPECT_EQ(1U, mojo_report->alloc_breakdown_history[0]->counts_by_size[0]); |
+ EXPECT_EQ(2U, mojo_report->alloc_breakdown_history[0]->counts_by_size[1]); |
+ EXPECT_EQ(3U, mojo_report->alloc_breakdown_history[0]->counts_by_size[2]); |
+ EXPECT_EQ(4U, mojo_report->alloc_breakdown_history[0]->count_for_call_stack); |
+ |
+ ASSERT_EQ(4U, mojo_report->alloc_breakdown_history[1]->counts_by_size.size()); |
+ EXPECT_EQ(11U, mojo_report->alloc_breakdown_history[1]->counts_by_size[0]); |
+ EXPECT_EQ(12U, mojo_report->alloc_breakdown_history[1]->counts_by_size[1]); |
+ EXPECT_EQ(13U, mojo_report->alloc_breakdown_history[1]->counts_by_size[2]); |
+ EXPECT_EQ(14U, mojo_report->alloc_breakdown_history[1]->counts_by_size[3]); |
+ EXPECT_EQ(15U, mojo_report->alloc_breakdown_history[1]->count_for_call_stack); |
+ |
+ ASSERT_EQ(5U, mojo_report->alloc_breakdown_history[2]->counts_by_size.size()); |
+ EXPECT_EQ(21U, mojo_report->alloc_breakdown_history[2]->counts_by_size[0]); |
+ EXPECT_EQ(22U, mojo_report->alloc_breakdown_history[2]->counts_by_size[1]); |
+ EXPECT_EQ(23U, mojo_report->alloc_breakdown_history[2]->counts_by_size[2]); |
+ EXPECT_EQ(24U, mojo_report->alloc_breakdown_history[2]->counts_by_size[3]); |
+ EXPECT_EQ(25U, mojo_report->alloc_breakdown_history[2]->counts_by_size[4]); |
+ EXPECT_EQ(26U, mojo_report->alloc_breakdown_history[2]->count_for_call_stack); |
+ |
+ // Convert Mojo struct back to protobuf. |
+ MemoryLeakReportProto new_report; |
+ protobuf_to_mojo_converter::MojoToReport(*mojo_report, &new_report); |
+ |
+ ASSERT_EQ(3, new_report.call_stack().size()); |
+ EXPECT_EQ(0xdeadbeef, new_report.call_stack(0)); |
+ EXPECT_EQ(0xc001d00d, new_report.call_stack(1)); |
+ EXPECT_EQ(0x900df00d, new_report.call_stack(2)); |
+ EXPECT_EQ(24U, new_report.size_bytes()); |
+ |
+ ASSERT_EQ(3, new_report.alloc_breakdown_history().size()); |
+ |
+ ASSERT_EQ(3, new_report.alloc_breakdown_history(0).counts_by_size().size()); |
+ EXPECT_EQ(1U, new_report.alloc_breakdown_history(0).counts_by_size(0)); |
+ EXPECT_EQ(2U, new_report.alloc_breakdown_history(0).counts_by_size(1)); |
+ EXPECT_EQ(3U, new_report.alloc_breakdown_history(0).counts_by_size(2)); |
+ EXPECT_EQ(4U, new_report.alloc_breakdown_history(0).count_for_call_stack()); |
+ |
+ ASSERT_EQ(4, new_report.alloc_breakdown_history(1).counts_by_size().size()); |
+ EXPECT_EQ(11U, new_report.alloc_breakdown_history(1).counts_by_size(0)); |
+ EXPECT_EQ(12U, new_report.alloc_breakdown_history(1).counts_by_size(1)); |
+ EXPECT_EQ(13U, new_report.alloc_breakdown_history(1).counts_by_size(2)); |
+ EXPECT_EQ(14U, new_report.alloc_breakdown_history(1).counts_by_size(3)); |
+ EXPECT_EQ(15U, new_report.alloc_breakdown_history(1).count_for_call_stack()); |
+ |
+ ASSERT_EQ(5, new_report.alloc_breakdown_history(2).counts_by_size().size()); |
+ EXPECT_EQ(21U, new_report.alloc_breakdown_history(2).counts_by_size(0)); |
+ EXPECT_EQ(22U, new_report.alloc_breakdown_history(2).counts_by_size(1)); |
+ EXPECT_EQ(23U, new_report.alloc_breakdown_history(2).counts_by_size(2)); |
+ EXPECT_EQ(24U, new_report.alloc_breakdown_history(2).counts_by_size(3)); |
+ EXPECT_EQ(25U, new_report.alloc_breakdown_history(2).counts_by_size(4)); |
+ EXPECT_EQ(26U, new_report.alloc_breakdown_history(2).count_for_call_stack()); |
+} |
+ |
+} // namespace leak_detector |
+} // namespace metrics |