1 /*
2 * Copyright (C) 2018 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 "src/tracing/core/null_trace_writer.h"
18
19 #include "perfetto/ext/base/utils.h"
20 #include "perfetto/ext/tracing/core/trace_writer.h"
21 #include "perfetto/protozero/scattered_stream_writer.h"
22 #include "src/base/test/utils.h"
23 #include "test/gtest_and_gmock.h"
24
25 #include "protos/perfetto/trace/test_event.pbzero.h"
26 #include "protos/perfetto/trace/trace_packet.pbzero.h"
27
28 namespace perfetto {
29 namespace {
30
TEST(NullTraceWriterTest,WriterIdIsZero)31 TEST(NullTraceWriterTest, WriterIdIsZero) {
32 NullTraceWriter writer;
33 EXPECT_EQ(writer.writer_id(), 0);
34 }
35
TEST(NullTraceWriterTest,NewTracePacket)36 TEST(NullTraceWriterTest, NewTracePacket) {
37 NullTraceWriter writer;
38 for (size_t i = 0; i < 10000; i++) {
39 auto packet = writer.NewTracePacket();
40 packet->set_for_testing()->set_str("Hello, world!");
41 }
42 }
43
44 #if defined(GTEST_HAS_DEATH_TEST)
TEST(NullTraceWriterDeathTest,NewTracePacketTakeStreamWriterNoFinish)45 TEST(NullTraceWriterDeathTest, NewTracePacketTakeStreamWriterNoFinish) {
46 NullTraceWriter writer;
47 auto trace_packet_handle = writer.NewTracePacket();
48 protozero::ScatteredStreamWriter* ss = trace_packet_handle.TakeStreamWriter();
49 const uint8_t payload[] = {'I', 'g', 'n', 'o', 'r', 'e', 'd'};
50 ss->WriteBytes(payload, sizeof payload);
51
52 EXPECT_DCHECK_DEATH(writer.NewTracePacket(););
53 }
54 #endif // defined(GTEST_HAS_DEATH_TEST)
55
TEST(NullTraceWriterTest,NewTracePacketTakeStreamWriterWithFinish)56 TEST(NullTraceWriterTest, NewTracePacketTakeStreamWriterWithFinish) {
57 NullTraceWriter writer;
58 for (size_t i = 0; i < 10000; i++) {
59 auto trace_packet_handle = writer.NewTracePacket();
60 protozero::ScatteredStreamWriter* ss =
61 trace_packet_handle.TakeStreamWriter();
62 const uint8_t payload[] = {'I', 'g', 'n', 'o', 'r', 'e', 'd'};
63 ss->WriteBytes(payload, sizeof payload);
64 writer.FinishTracePacket();
65 }
66 }
67
TEST(NullTraceWriterTest,FlushCallbackIsCalled)68 TEST(NullTraceWriterTest, FlushCallbackIsCalled) {
69 NullTraceWriter writer;
70 writer.Flush();
71 bool was_called = false;
72 writer.Flush([&was_called] { was_called = true; });
73 EXPECT_TRUE(was_called);
74 }
75
76 } // namespace
77 } // namespace perfetto
78