blob: 832b36a0c5086b642a9e6ddaed8b36fe79017fc3 [file] [log] [blame]
Christopher Ferris626efb72016-02-23 18:02:20 -08001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <sys/types.h>
18#include <unistd.h>
19
20#include <memory>
21#include <string>
22
23#include <android-base/file.h>
24#include <android-base/stringprintf.h>
Christopher Ferris626efb72016-02-23 18:02:20 -080025#include <gtest/gtest.h>
26
Elliott Hughes8e9aeb92017-11-10 10:22:07 -080027#include "../trace-dev.cpp"
Christopher Ferris626efb72016-02-23 18:02:20 -080028
29class TraceDevTest : public ::testing::Test {
30 protected:
31 void SetUp() override {
32 lseek(tmp_file_.fd, 0, SEEK_SET);
33 atrace_marker_fd = tmp_file_.fd;
34 }
35
36 void TearDown() override {
37 atrace_marker_fd = -1;
38 }
39
40 TemporaryFile tmp_file_;
41
42 static std::string MakeName(size_t length) {
43 std::string name;
44 for (size_t i = 0; i < length; i++) {
45 name += '0' + (i % 10);
46 }
47 return name;
48 }
49};
50
51TEST_F(TraceDevTest, atrace_begin_body_normal) {
52 atrace_begin_body("fake_name");
53
54 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
55
56 std::string actual;
57 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
58 std::string expected = android::base::StringPrintf("B|%d|fake_name", getpid());
59 ASSERT_STREQ(expected.c_str(), actual.c_str());
60}
61
62TEST_F(TraceDevTest, atrace_begin_body_exact) {
63 std::string expected = android::base::StringPrintf("B|%d|", getpid());
64 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 1);
65 atrace_begin_body(name.c_str());
66
67 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
68 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
69
70 std::string actual;
71 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
72 expected += name;
73 ASSERT_STREQ(expected.c_str(), actual.c_str());
74
75 // Add a single character and verify we get the exact same value as before.
76 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
77 name += '*';
78 atrace_begin_body(name.c_str());
79 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
80 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
81 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
82 ASSERT_STREQ(expected.c_str(), actual.c_str());
83}
84
85TEST_F(TraceDevTest, atrace_begin_body_truncated) {
86 std::string expected = android::base::StringPrintf("B|%d|", getpid());
87 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
88 atrace_begin_body(name.c_str());
89
90 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
91 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
92
93 std::string actual;
94 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
95 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 1;
96 expected += android::base::StringPrintf("%.*s", expected_len, name.c_str());
97 ASSERT_STREQ(expected.c_str(), actual.c_str());
98}
99
100TEST_F(TraceDevTest, atrace_async_begin_body_normal) {
101 atrace_async_begin_body("fake_name", 12345);
102
103 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
104
105 std::string actual;
106 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
107 std::string expected = android::base::StringPrintf("S|%d|fake_name|12345", getpid());
108 ASSERT_STREQ(expected.c_str(), actual.c_str());
109}
110
111TEST_F(TraceDevTest, atrace_async_begin_body_exact) {
112 std::string expected = android::base::StringPrintf("S|%d|", getpid());
113 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
114 atrace_async_begin_body(name.c_str(), 12345);
115
116 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
117 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
118
119 std::string actual;
120 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
121 expected += name + "|12345";
122 ASSERT_STREQ(expected.c_str(), actual.c_str());
123
124 // Add a single character and verify we get the exact same value as before.
125 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
126 name += '*';
127 atrace_async_begin_body(name.c_str(), 12345);
128 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
129 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
130 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
131 ASSERT_STREQ(expected.c_str(), actual.c_str());
132}
133
134TEST_F(TraceDevTest, atrace_async_begin_body_truncated) {
135 std::string expected = android::base::StringPrintf("S|%d|", getpid());
136 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
137 atrace_async_begin_body(name.c_str(), 12345);
138
139 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
140 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
141
142 std::string actual;
143 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
144 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
145 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
146 ASSERT_STREQ(expected.c_str(), actual.c_str());
147}
148
149TEST_F(TraceDevTest, atrace_async_end_body_normal) {
150 atrace_async_end_body("fake_name", 12345);
151
152 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
153
154 std::string actual;
155 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
156 std::string expected = android::base::StringPrintf("F|%d|fake_name|12345", getpid());
157 ASSERT_STREQ(expected.c_str(), actual.c_str());
158}
159
160TEST_F(TraceDevTest, atrace_async_end_body_exact) {
161 std::string expected = android::base::StringPrintf("F|%d|", getpid());
162 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
163 atrace_async_end_body(name.c_str(), 12345);
164
165 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
166 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
167
168 std::string actual;
169 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
170 expected += name + "|12345";
171 ASSERT_STREQ(expected.c_str(), actual.c_str());
172
173 // Add a single character and verify we get the exact same value as before.
174 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
175 name += '*';
176 atrace_async_end_body(name.c_str(), 12345);
177 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
178 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
179 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
180 ASSERT_STREQ(expected.c_str(), actual.c_str());
181}
182
183TEST_F(TraceDevTest, atrace_async_end_body_truncated) {
184 std::string expected = android::base::StringPrintf("F|%d|", getpid());
185 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
186 atrace_async_end_body(name.c_str(), 12345);
187
188 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
189 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
190
191 std::string actual;
192 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
193 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
194 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
195 ASSERT_STREQ(expected.c_str(), actual.c_str());
196}
197
198TEST_F(TraceDevTest, atrace_int_body_normal) {
199 atrace_int_body("fake_name", 12345);
200
201 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
202
203 std::string actual;
204 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
205 std::string expected = android::base::StringPrintf("C|%d|fake_name|12345", getpid());
206 ASSERT_STREQ(expected.c_str(), actual.c_str());
207}
208
209TEST_F(TraceDevTest, atrace_int_body_exact) {
210 std::string expected = android::base::StringPrintf("C|%d|", getpid());
211 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 7);
212 atrace_int_body(name.c_str(), 12345);
213
214 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
215 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
216
217 std::string actual;
218 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
219 expected += name + "|12345";
220 ASSERT_STREQ(expected.c_str(), actual.c_str());
221
222 // Add a single character and verify we get the exact same value as before.
223 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
224 name += '*';
225 atrace_int_body(name.c_str(), 12345);
226 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
227 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
228 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
229 ASSERT_STREQ(expected.c_str(), actual.c_str());
230}
231
232TEST_F(TraceDevTest, atrace_int_body_truncated) {
233 std::string expected = android::base::StringPrintf("C|%d|", getpid());
234 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
235 atrace_int_body(name.c_str(), 12345);
236
237 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
238 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
239
240 std::string actual;
241 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
242 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 7;
243 expected += android::base::StringPrintf("%.*s|12345", expected_len, name.c_str());
244 ASSERT_STREQ(expected.c_str(), actual.c_str());
245}
246
247TEST_F(TraceDevTest, atrace_int64_body_normal) {
248 atrace_int64_body("fake_name", 17179869183L);
249
250 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
251
252 std::string actual;
253 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
254 std::string expected = android::base::StringPrintf("C|%d|fake_name|17179869183", getpid());
255 ASSERT_STREQ(expected.c_str(), actual.c_str());
256}
257
258TEST_F(TraceDevTest, atrace_int64_body_exact) {
259 std::string expected = android::base::StringPrintf("C|%d|", getpid());
260 std::string name = MakeName(ATRACE_MESSAGE_LENGTH - expected.length() - 13);
261 atrace_int64_body(name.c_str(), 17179869183L);
262
263 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
264 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
265
266 std::string actual;
267 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
268 expected += name + "|17179869183";
269 ASSERT_STREQ(expected.c_str(), actual.c_str());
270
271 // Add a single character and verify we get the exact same value as before.
272 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
273 name += '*';
274 atrace_int64_body(name.c_str(), 17179869183L);
275 EXPECT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
276 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
277 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
278 ASSERT_STREQ(expected.c_str(), actual.c_str());
279}
280
281TEST_F(TraceDevTest, atrace_int64_body_truncated) {
282 std::string expected = android::base::StringPrintf("C|%d|", getpid());
283 std::string name = MakeName(2 * ATRACE_MESSAGE_LENGTH);
284 atrace_int64_body(name.c_str(), 17179869183L);
285
286 ASSERT_EQ(ATRACE_MESSAGE_LENGTH - 1, lseek(atrace_marker_fd, 0, SEEK_CUR));
287 ASSERT_EQ(0, lseek(atrace_marker_fd, 0, SEEK_SET));
288
289 std::string actual;
290 ASSERT_TRUE(android::base::ReadFdToString(atrace_marker_fd, &actual));
291 int expected_len = ATRACE_MESSAGE_LENGTH - expected.length() - 13;
292 expected += android::base::StringPrintf("%.*s|17179869183", expected_len, name.c_str());
293 ASSERT_STREQ(expected.c_str(), actual.c_str());
294}