OLD | NEW |
---|---|
(Empty) | |
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/metrics/chromeos/metrics_utils.h" | |
6 | |
7 #include "base/file_util.h" | |
8 #include "base/files/scoped_temp_dir.h" | |
9 #include "base/logging.h" | |
10 #include "base/strings/stringprintf.h" | |
11 #include "components/metrics/chromeos/metric_sample.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 | |
14 namespace metrics { | |
15 namespace { | |
16 | |
17 class MetricsUtilsChromeOSTest : public testing::Test { | |
18 protected: | |
19 MetricsUtilsChromeOSTest() { | |
20 bool success = temporary_dir.CreateUniqueTempDir(); | |
21 if (success) { | |
22 base::FilePath dir_path = temporary_dir.path(); | |
23 filename = dir_path.value() + "chromeossampletest"; | |
24 filepath = base::FilePath(filename); | |
25 } | |
26 } | |
27 | |
28 bool AreEq(MetricSample* a, MetricSample* b) { | |
29 CHECK(a); | |
30 CHECK(b); | |
31 return a->IsEqual(b); | |
32 } | |
33 | |
34 virtual void SetUp() { | |
35 base::DeleteFile(filepath, false); | |
36 } | |
37 | |
38 void TestSerialization(MetricSample* sample) { | |
39 std::string serialized(sample->ToString()); | |
40 ASSERT_EQ('\0', serialized[serialized.length() - 1]); | |
41 AreEq(sample, MetricsUtils::ReadSample(serialized).release()); | |
42 } | |
43 | |
44 std::string filename; | |
45 base::ScopedTempDir temporary_dir; | |
46 base::FilePath filepath; | |
47 }; | |
48 | |
49 TEST_F(MetricsUtilsChromeOSTest, CrashSerializeTest) { | |
50 TestSerialization(MetricSample::CrashSample("test").release()); | |
51 } | |
52 | |
53 TEST_F(MetricsUtilsChromeOSTest, HistogramSerializeTest) { | |
54 TestSerialization( | |
55 MetricSample::HistogramSample("myhist", 13, 1, 100, 10).release()); | |
56 } | |
57 | |
58 TEST_F(MetricsUtilsChromeOSTest, LinearSerializeTest) { | |
59 TestSerialization( | |
60 MetricSample::LinearHistogramSample("linearhist", 12, 30).release()); | |
61 } | |
62 | |
63 TEST_F(MetricsUtilsChromeOSTest, SparseSerializeTest) { | |
64 TestSerialization( | |
65 MetricSample::SparseHistogramSample("mysparse", 30).release()); | |
66 } | |
67 | |
68 TEST_F(MetricsUtilsChromeOSTest, UserActionSerializeTest) { | |
69 TestSerialization(MetricSample::UserActionSample("myaction").release()); | |
70 } | |
71 | |
72 TEST_F(MetricsUtilsChromeOSTest, IllegalNameAreFilteredTest) { | |
73 scoped_ptr<MetricSample> sample1 = | |
74 MetricSample::SparseHistogramSample("no space", 10); | |
75 scoped_ptr<MetricSample> sample2 = MetricSample::LinearHistogramSample( | |
76 base::StringPrintf("here%cbhe", '\0'), 1, 3); | |
77 | |
78 EXPECT_FALSE(MetricsUtils::WriteMetricToFile(sample1.get(), filename)); | |
79 EXPECT_FALSE(MetricsUtils::WriteMetricToFile(sample2.get(), filename)); | |
80 int64 size = 0; | |
81 | |
82 ASSERT_TRUE(!PathExists(filepath) || base::GetFileSize(filepath, &size)); | |
83 | |
84 EXPECT_EQ(0, size); | |
85 } | |
86 | |
87 TEST_F(MetricsUtilsChromeOSTest, BadInputIsCaughtTest) { | |
88 std::string input( | |
89 base::StringPrintf("sparsehistogram%cname foo%c", '\0', '\0')); | |
90 EXPECT_EQ(NULL, MetricSample::ReadSparseHistogram(input).release()); | |
91 } | |
92 | |
93 TEST_F(MetricsUtilsChromeOSTest, MessageSeparatedByZero) { | |
94 scoped_ptr<MetricSample> crash = MetricSample::CrashSample("crash"); | |
95 | |
96 MetricsUtils::WriteMetricToFile(crash.get(), filename); | |
97 int64 size = 0; | |
98 ASSERT_TRUE(base::GetFileSize(filepath, &size)); | |
99 EXPECT_EQ(size, 16); | |
100 } | |
101 | |
102 TEST_F(MetricsUtilsChromeOSTest, MessagesTooLongAreDiscardedTest) { | |
103 // Creates a message that is bigger than the maximum allowed size. | |
104 // As we are adding extra character (crash, \0s, etc), if the name is | |
105 // kMessageMaxLength long, it will be too long. | |
106 std::string name(MetricsUtils::kMessageMaxLength, 'c'); | |
107 | |
108 scoped_ptr<MetricSample> crash = MetricSample::CrashSample(name); | |
109 EXPECT_FALSE(MetricsUtils::WriteMetricToFile(crash.get(), filename)); | |
110 int64 size = 0; | |
111 ASSERT_TRUE(base::GetFileSize(filepath, &size)); | |
112 EXPECT_EQ(0, size); | |
113 } | |
114 | |
115 TEST_F(MetricsUtilsChromeOSTest, ReadLongMessageTest) { | |
116 base::File test_file(filepath, | |
117 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_APPEND); | |
118 std::string message(MetricsUtils::kMessageMaxLength + 1, 'c'); | |
119 | |
120 int32_t message_size = message.length() + sizeof(int32_t); | |
121 test_file.WriteAtCurrentPos(reinterpret_cast<const char*>(&message_size), | |
122 sizeof(message_size)); | |
123 test_file.WriteAtCurrentPos(message.c_str(), message.length()); | |
124 test_file.Close(); | |
125 | |
126 scoped_ptr<MetricSample> crash = MetricSample::CrashSample("test"); | |
127 MetricsUtils::WriteMetricToFile(crash.get(), filename); | |
128 | |
129 ScopedVector<MetricSample> samples; | |
130 MetricsUtils::ReadAndTruncateMetricsFromFile(filename, &samples); | |
131 ASSERT_EQ(size_t(1), samples.size()); | |
132 AreEq(crash.get(), samples[0]); | |
133 } | |
134 | |
135 TEST_F(MetricsUtilsChromeOSTest, WriteReadTest) { | |
136 scoped_ptr<MetricSample> hist = | |
137 MetricSample::HistogramSample("myhist", 1, 2, 3, 4); | |
138 scoped_ptr<MetricSample> crash = MetricSample::CrashSample("crash"); | |
139 scoped_ptr<MetricSample> lhist = | |
140 MetricSample::LinearHistogramSample("linear", 1, 10); | |
141 scoped_ptr<MetricSample> shist = | |
142 MetricSample::SparseHistogramSample("mysparse", 30); | |
143 scoped_ptr<MetricSample> action = MetricSample::UserActionSample("myaction"); | |
144 | |
145 MetricsUtils::WriteMetricToFile(hist.get(), filename); | |
146 MetricsUtils::WriteMetricToFile(crash.get(), filename); | |
147 MetricsUtils::WriteMetricToFile(lhist.get(), filename); | |
148 MetricsUtils::WriteMetricToFile(shist.get(), filename); | |
149 MetricsUtils::WriteMetricToFile(action.get(), filename); | |
150 ScopedVector<MetricSample> vect; | |
151 MetricsUtils::ReadAndTruncateMetricsFromFile(filename, &vect); | |
152 ASSERT_EQ(vect.size(), size_t(5)); | |
153 AreEq(hist.get(), vect[0]); | |
Alexei Svitkine (slow)
2014/05/13 15:36:26
You're ignoring the return value of this - since y
bsimonnet
2014/05/13 17:59:14
Thanks for catching that, one of those was not equ
| |
154 AreEq(crash.get(), vect[1]); | |
155 AreEq(lhist.get(), vect[2]); | |
156 AreEq(shist.get(), vect[3]); | |
157 AreEq(action.get(), vect[4]); | |
158 | |
159 int64 size = 0; | |
160 ASSERT_TRUE(base::GetFileSize(filepath, &size)); | |
161 ASSERT_EQ(0, size); | |
162 } | |
163 | |
164 } // namespace | |
165 } // namespace metrics | |
OLD | NEW |