Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: components/tracing/test/proto_zero_generation_unittest.cc

Issue 2240043004: Tracing V2: Fully-functional plugin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits>
6 #include <memory>
7 #include <vector>
8
9 #include "components/tracing/core/proto_zero_message_handle.h"
5 #include "components/tracing/test/example_proto/library.pbzero.h" 10 #include "components/tracing/test/example_proto/library.pbzero.h"
11 #include "components/tracing/test/example_proto/test_messages.pb.h"
6 #include "components/tracing/test/example_proto/test_messages.pbzero.h" 12 #include "components/tracing/test/example_proto/test_messages.pbzero.h"
13 #include "components/tracing/test/fake_scattered_buffer.h"
7 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
8 15
9 namespace tracing { 16 namespace tracing {
10 namespace proto { 17 namespace proto {
11 18
12 using foo::bar::CamelCaseFields; 19 namespace pbtest = pbzero::foo::bar;
20 namespace pbgold = foo::bar; // Official C++ protobuf compiler.
21
22 using tracing::v2::FakeScatteredBuffer;
23 using tracing::v2::ProtoZeroMessage;
24 using tracing::v2::ScatteredStreamWriter;
25 using tracing::v2::ProtoZeroMessageHandle;
26 using tracing::v2::ProtoZeroMessageHandleBase;
27
28 constexpr size_t kChunkSize = 42;
29
30 class ProtoZeroConformanceTest : public ::testing::Test {
31 public:
32 void SetUp() override {
33 buffer_.reset(new FakeScatteredBuffer(kChunkSize));
34 stream_writer_.reset(new ScatteredStreamWriter(buffer_.get()));
35 }
36
37 void TearDown() override {
38 root_messages_.clear();
39 stream_writer_.reset();
40 buffer_.reset();
41 google::protobuf::ShutdownProtobufLibrary();
42 }
43
44 protected:
45 template <class T>
46 T* CreateMessage() {
47 T* message = new T();
48 root_messages_.push_back(std::unique_ptr<T>(message));
49 message->Reset(stream_writer_.get());
50 return message;
51 }
52
53 size_t GetNumSerializedBytes() {
54 return buffer_->chunks().size() * kChunkSize -
55 stream_writer_->bytes_available();
56 }
57
58 void GetSerializedBytes(size_t start, size_t length, uint8_t* buffer) {
59 return buffer_->GetBytes(start, length, buffer);
60 }
61
62 private:
63 std::unique_ptr<FakeScatteredBuffer> buffer_;
64 std::unique_ptr<ScatteredStreamWriter> stream_writer_;
65 std::vector<std::unique_ptr<ProtoZeroMessage>> root_messages_;
66 };
67
68 TEST_F(ProtoZeroConformanceTest, SimpleFieldsNoNesting) {
69 auto msg = CreateMessage<pbtest::EveryField>();
70
71 msg->set_field_int32(-1);
72 msg->set_field_int64(-333123456789ll);
73 msg->set_field_uint32(600);
74 msg->set_field_uint64(333123456789ll);
75 msg->set_field_sint32(-5);
76 msg->set_field_sint64(-9000);
77 msg->set_field_fixed32(12345);
78 msg->set_field_fixed64(444123450000ll);
79 msg->set_field_sfixed32(-69999);
80 msg->set_field_sfixed64(-200);
81 msg->set_field_float(3.14f);
82 msg->set_field_double(0.5555);
83 msg->set_field_bool(true);
84 msg->set_small_enum(pbtest::SmallEnum::TO_BE);
85 msg->set_signed_enum(pbtest::SignedEnum::NEGATIVE);
86 msg->set_big_enum(pbtest::BigEnum::BEGIN);
87 msg->set_field_string("FizzBuzz");
88 msg->set_field_bytes(reinterpret_cast<const uint8_t*>("\x11\x00\xBE\xEF"), 4);
89 msg->add_repeated_int32(1);
90 msg->add_repeated_int32(-1);
91 msg->add_repeated_int32(100);
92 msg->add_repeated_int32(2000000);
93
94 size_t msg_size = GetNumSerializedBytes();
95 EXPECT_EQ(126u, msg_size);
96
97 std::unique_ptr<uint8_t[]> msg_binary(new uint8_t[msg_size]);
98 GetSerializedBytes(0, msg_size, msg_binary.get());
99
100 pbgold::EveryField gold_msg;
101 gold_msg.ParseFromArray(msg_binary.get(), msg_size);
102 EXPECT_EQ(-1, gold_msg.field_int32());
103 EXPECT_EQ(-333123456789ll, gold_msg.field_int64());
104 EXPECT_EQ(600u, gold_msg.field_uint32());
105 EXPECT_EQ(333123456789ull, gold_msg.field_uint64());
106 EXPECT_EQ(-5, gold_msg.field_sint32());
107 EXPECT_EQ(-9000, gold_msg.field_sint64());
108 EXPECT_EQ(12345u, gold_msg.field_fixed32());
109 EXPECT_EQ(444123450000ull, gold_msg.field_fixed64());
110 EXPECT_EQ(-69999, gold_msg.field_sfixed32());
111 EXPECT_EQ(-200, gold_msg.field_sfixed64());
112 EXPECT_EQ(3.14f, gold_msg.field_float());
113 EXPECT_EQ(0.5555, gold_msg.field_double());
114 EXPECT_EQ(true, gold_msg.field_bool());
115 EXPECT_EQ(pbgold::SmallEnum::TO_BE, gold_msg.small_enum());
116 EXPECT_EQ(pbgold::SignedEnum::NEGATIVE, gold_msg.signed_enum());
117 EXPECT_EQ(pbgold::BigEnum::BEGIN, gold_msg.big_enum());
118 EXPECT_EQ("FizzBuzz", gold_msg.field_string());
119 EXPECT_EQ(std::string("\x11\x00\xBE\xEF", 4), gold_msg.field_bytes());
120 EXPECT_EQ(4, gold_msg.repeated_int32_size());
121 EXPECT_EQ(1, gold_msg.repeated_int32(0));
122 EXPECT_EQ(-1, gold_msg.repeated_int32(1));
123 EXPECT_EQ(100, gold_msg.repeated_int32(2));
124 EXPECT_EQ(2000000, gold_msg.repeated_int32(3));
125 }
126
127 TEST_F(ProtoZeroConformanceTest, NestedMessages) {
128 auto msg_a = CreateMessage<pbtest::NestedA>();
129
130 pbtest::NestedA::NestedB* msg_b = msg_a->add_repeated_a();
131 pbtest::NestedA::NestedB::NestedC* msg_c = msg_b->set_value_b();
132 msg_c->set_value_c(321);
133 msg_b = msg_a->add_repeated_a();
134 msg_c = msg_a->set_super_nested();
135 msg_c->set_value_c(1000);
136 msg_a->Finalize();
137
138 size_t msg_size = GetNumSerializedBytes();
139 EXPECT_EQ(26u, msg_size);
140
141 std::unique_ptr<uint8_t[]> msg_binary(new uint8_t[msg_size]);
142 GetSerializedBytes(0, msg_size, msg_binary.get());
143
144 pbgold::NestedA gold_msg_a;
145 gold_msg_a.ParseFromArray(msg_binary.get(), msg_size);
146 EXPECT_EQ(2, gold_msg_a.repeated_a_size());
147 EXPECT_EQ(321, gold_msg_a.repeated_a(0).value_b().value_c());
148 EXPECT_FALSE(gold_msg_a.repeated_a(1).has_value_b());
149 EXPECT_EQ(1000, gold_msg_a.super_nested().value_c());
150 }
13 151
14 TEST(ProtoZeroTest, Simple) { 152 TEST(ProtoZeroTest, Simple) {
15 // TODO(kraynov) Put tests in the next CL (crbug.com/608721).
16
17 // Test the includes for indirect public import: library.pbzero.h -> 153 // Test the includes for indirect public import: library.pbzero.h ->
18 // library_internals/galaxies.pbzero.h -> upper_import.pbzero.h . 154 // library_internals/galaxies.pbzero.h -> upper_import.pbzero.h .
19 EXPECT_LE(0u, sizeof(foo::bar::TrickyPublicImport)); 155 EXPECT_LE(0u, sizeof(pbtest::TrickyPublicImport));
20 } 156 }
21 157
22 TEST(ProtoZeroTest, FieldNumbers) { 158 TEST(ProtoZeroTest, FieldNumbers) {
23 // Tests camel case conversion as well. 159 // Tests camel case conversion as well.
24 EXPECT_EQ(1, CamelCaseFields::kFooBarBazFieldNumber); 160 EXPECT_EQ(1, pbtest::CamelCaseFields::kFooBarBazFieldNumber);
25 EXPECT_EQ(2, CamelCaseFields::kBarBazFieldNumber); 161 EXPECT_EQ(2, pbtest::CamelCaseFields::kBarBazFieldNumber);
26 EXPECT_EQ(3, CamelCaseFields::kMooMooFieldNumber); 162 EXPECT_EQ(3, pbtest::CamelCaseFields::kMooMooFieldNumber);
27 EXPECT_EQ(4, CamelCaseFields::kURLEncoderFieldNumber); 163 EXPECT_EQ(4, pbtest::CamelCaseFields::kURLEncoderFieldNumber);
28 EXPECT_EQ(5, CamelCaseFields::kXMapFieldNumber); 164 EXPECT_EQ(5, pbtest::CamelCaseFields::kXMapFieldNumber);
29 EXPECT_EQ(6, CamelCaseFields::kUrLENcoDerFieldNumber); 165 EXPECT_EQ(6, pbtest::CamelCaseFields::kUrLENcoDerFieldNumber);
30 EXPECT_EQ(7, CamelCaseFields::kBigBangFieldNumber); 166 EXPECT_EQ(7, pbtest::CamelCaseFields::kBigBangFieldNumber);
31 EXPECT_EQ(8, CamelCaseFields::kU2FieldNumber); 167 EXPECT_EQ(8, pbtest::CamelCaseFields::kU2FieldNumber);
32 EXPECT_EQ(9, CamelCaseFields::kBangBigFieldNumber); 168 EXPECT_EQ(9, pbtest::CamelCaseFields::kBangBigFieldNumber);
33 } 169 }
34 170
35 } // namespace proto 171 } // namespace proto
36 } // namespace tracing 172 } // namespace tracing
OLDNEW
« no previous file with comments | « components/tracing/test/fake_scattered_buffer.cc ('k') | components/tracing/tools/proto_zero_plugin/proto_zero_generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698