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

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: nit 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 using namespace pbzero::foo::bar;
Primiano Tucci (use gerrit) 2016/08/25 10:31:51 probably a bit more readable if you wrap this into
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 void CreateMessage(T** message_ptr) {
Primiano Tucci (use gerrit) 2016/08/25 10:31:51 This signature is a bit odd. Why don't you return
47 *message_ptr = new T();
48 root_messages_.push_back(std::unique_ptr<T>(*message_ptr));
49 (*message_ptr)->Reset(stream_writer_.get());
50 }
51
52 size_t GetNumSerializedBytes() {
53 return buffer_->chunks().size() * kChunkSize -
54 stream_writer_->bytes_available();
55 }
56
57 void GetSerializedBytes(size_t start, size_t length, uint8_t* buffer) {
58 return buffer_->GetBytes(start, length, buffer);
59 }
60
61 private:
62 std::unique_ptr<FakeScatteredBuffer> buffer_;
63 std::unique_ptr<ScatteredStreamWriter> stream_writer_;
64 std::vector<std::unique_ptr<ProtoZeroMessage>> root_messages_;
65 };
66
67 TEST_F(ProtoZeroConformanceTest, SimpleFieldsNoNesting) {
68 EveryField* msg;
69 CreateMessage(&msg);
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(SmallEnum::TO_BE);
85 msg->set_signed_enum(SignedEnum::NEGATIVE);
86 msg->set_big_enum(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;
Primiano Tucci (use gerrit) 2016/08/25 10:31:51 maybe s/gold/gold_msg/ to make it clear this is an
101 gold.ParseFromArray(msg_binary.get(), msg_size);
102 EXPECT_EQ(-1, gold.field_int32());
103 EXPECT_EQ(-333123456789ll, gold.field_int64());
104 EXPECT_EQ(600u, gold.field_uint32());
105 EXPECT_EQ(333123456789ull, gold.field_uint64());
106 EXPECT_EQ(-5, gold.field_sint32());
107 EXPECT_EQ(-9000, gold.field_sint64());
108 EXPECT_EQ(12345u, gold.field_fixed32());
109 EXPECT_EQ(444123450000ull, gold.field_fixed64());
110 EXPECT_EQ(-69999, gold.field_sfixed32());
111 EXPECT_EQ(-200, gold.field_sfixed64());
112 EXPECT_EQ(3.14f, gold.field_float());
113 EXPECT_EQ(0.5555, gold.field_double());
114 EXPECT_EQ(true, gold.field_bool());
115 EXPECT_EQ(pbgold::SmallEnum::TO_BE, gold.small_enum());
116 EXPECT_EQ(pbgold::SignedEnum::NEGATIVE, gold.signed_enum());
117 EXPECT_EQ(pbgold::BigEnum::BEGIN, gold.big_enum());
118 EXPECT_EQ("FizzBuzz", gold.field_string());
119 EXPECT_EQ(std::string("\x11\x00\xBE\xEF", 4), gold.field_bytes());
120 EXPECT_EQ(4, gold.repeated_int32_size());
121 EXPECT_EQ(1, gold.repeated_int32(0));
122 EXPECT_EQ(-1, gold.repeated_int32(1));
123 EXPECT_EQ(100, gold.repeated_int32(2));
124 EXPECT_EQ(2000000, gold.repeated_int32(3));
125 }
126
127 TEST_F(ProtoZeroConformanceTest, NestedMessages) {
128 NestedA* msg_a;
129 CreateMessage(&msg_a);
130
131 NestedA::NestedB* msg_b = msg_a->add_repeated_a();
132 NestedA::NestedB::NestedC* msg_c = msg_b->set_value_b();
133 msg_c->set_value_c(321);
134 msg_b = msg_a->add_repeated_a();
135 msg_c = msg_a->set_super_nested();
136 msg_c->set_value_c(1000);
137 msg_a->Finalize();
138
139 size_t msg_size = GetNumSerializedBytes();
140 EXPECT_EQ(26u, msg_size);
141
142 std::unique_ptr<uint8_t[]> msg_binary(new uint8_t[msg_size]);
143 GetSerializedBytes(0, msg_size, msg_binary.get());
144
145 pbgold::NestedA gold_a;
146 gold_a.ParseFromArray(msg_binary.get(), msg_size);
147 EXPECT_EQ(2, gold_a.repeated_a_size());
148 EXPECT_EQ(321, gold_a.repeated_a(0).value_b().value_c());
149 EXPECT_FALSE(gold_a.repeated_a(1).has_value_b());
150 EXPECT_EQ(1000, gold_a.super_nested().value_c());
151 }
13 152
14 TEST(ProtoZeroTest, Simple) { 153 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 -> 154 // Test the includes for indirect public import: library.pbzero.h ->
18 // library_internals/galaxies.pbzero.h -> upper_import.pbzero.h . 155 // library_internals/galaxies.pbzero.h -> upper_import.pbzero.h .
19 EXPECT_LE(0u, sizeof(foo::bar::TrickyPublicImport)); 156 EXPECT_LE(0u, sizeof(TrickyPublicImport));
20 } 157 }
21 158
22 TEST(ProtoZeroTest, FieldNumbers) { 159 TEST(ProtoZeroTest, FieldNumbers) {
23 // Tests camel case conversion as well. 160 // Tests camel case conversion as well.
24 EXPECT_EQ(1, CamelCaseFields::kFooBarBazFieldNumber); 161 EXPECT_EQ(1, CamelCaseFields::kFooBarBazFieldNumber);
25 EXPECT_EQ(2, CamelCaseFields::kBarBazFieldNumber); 162 EXPECT_EQ(2, CamelCaseFields::kBarBazFieldNumber);
26 EXPECT_EQ(3, CamelCaseFields::kMooMooFieldNumber); 163 EXPECT_EQ(3, CamelCaseFields::kMooMooFieldNumber);
27 EXPECT_EQ(4, CamelCaseFields::kURLEncoderFieldNumber); 164 EXPECT_EQ(4, CamelCaseFields::kURLEncoderFieldNumber);
28 EXPECT_EQ(5, CamelCaseFields::kXMapFieldNumber); 165 EXPECT_EQ(5, CamelCaseFields::kXMapFieldNumber);
29 EXPECT_EQ(6, CamelCaseFields::kUrLENcoDerFieldNumber); 166 EXPECT_EQ(6, CamelCaseFields::kUrLENcoDerFieldNumber);
30 EXPECT_EQ(7, CamelCaseFields::kBigBangFieldNumber); 167 EXPECT_EQ(7, CamelCaseFields::kBigBangFieldNumber);
31 EXPECT_EQ(8, CamelCaseFields::kU2FieldNumber); 168 EXPECT_EQ(8, CamelCaseFields::kU2FieldNumber);
32 EXPECT_EQ(9, CamelCaseFields::kBangBigFieldNumber); 169 EXPECT_EQ(9, CamelCaseFields::kBangBigFieldNumber);
33 } 170 }
34 171
35 } // namespace proto 172 } // namespace proto
36 } // namespace tracing 173 } // namespace tracing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698