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

Side by Side Diff: mojo/public/cpp/bindings/tests/union_unittest.cc

Issue 2660733002: Mojo C++ bindings: introduce an optional array to store transferred interface IDs in messages. (Closed)
Patch Set: . Created 3 years, 10 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 2014 The Chromium Authors. All rights reserved. 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 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 size_t size = 166 size_t size =
167 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); 167 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr);
168 EXPECT_EQ(16U, size); 168 EXPECT_EQ(16U, size);
169 169
170 mojo::internal::FixedBufferForTesting buf(size); 170 mojo::internal::FixedBufferForTesting buf(size);
171 internal::PodUnion_Data* data = nullptr; 171 internal::PodUnion_Data* data = nullptr;
172 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); 172 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr);
173 173
174 void* raw_buf = buf.Leak(); 174 void* raw_buf = buf.Leak();
175 mojo::internal::ValidationContext validation_context( 175 mojo::internal::ValidationContext validation_context(
176 data, static_cast<uint32_t>(size), 0); 176 data, static_cast<uint32_t>(size), 0, 0);
177 EXPECT_TRUE( 177 EXPECT_TRUE(
178 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); 178 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
179 free(raw_buf); 179 free(raw_buf);
180 } 180 }
181 181
182 TEST(UnionTest, SerializeNotNull) { 182 TEST(UnionTest, SerializeNotNull) {
183 PodUnionPtr pod(PodUnion::New()); 183 PodUnionPtr pod(PodUnion::New());
184 pod->set_f_int8(0); 184 pod->set_f_int8(0);
185 size_t size = 185 size_t size =
186 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); 186 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr);
(...skipping 30 matching lines...) Expand all
217 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); 217 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr);
218 EXPECT_EQ(16U, size); 218 EXPECT_EQ(16U, size);
219 mojo::internal::FixedBufferForTesting buf(size); 219 mojo::internal::FixedBufferForTesting buf(size);
220 internal::PodUnion_Data* data = nullptr; 220 internal::PodUnion_Data* data = nullptr;
221 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); 221 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr);
222 EXPECT_EQ(nullptr, data); 222 EXPECT_EQ(nullptr, data);
223 } 223 }
224 224
225 TEST(UnionTest, NullValidation) { 225 TEST(UnionTest, NullValidation) {
226 void* buf = nullptr; 226 void* buf = nullptr;
227 mojo::internal::ValidationContext validation_context(buf, 0, 0); 227 mojo::internal::ValidationContext validation_context(buf, 0, 0, 0);
228 EXPECT_TRUE(internal::PodUnion_Data::Validate( 228 EXPECT_TRUE(internal::PodUnion_Data::Validate(
229 buf, &validation_context, false)); 229 buf, &validation_context, false));
230 } 230 }
231 231
232 TEST(UnionTest, OutOfAlignmentValidation) { 232 TEST(UnionTest, OutOfAlignmentValidation) {
233 size_t size = sizeof(internal::PodUnion_Data); 233 size_t size = sizeof(internal::PodUnion_Data);
234 // Get an aligned object and shift the alignment. 234 // Get an aligned object and shift the alignment.
235 mojo::internal::FixedBufferForTesting aligned_buf(size + 1); 235 mojo::internal::FixedBufferForTesting aligned_buf(size + 1);
236 void* raw_buf = aligned_buf.Leak(); 236 void* raw_buf = aligned_buf.Leak();
237 char* buf = reinterpret_cast<char*>(raw_buf) + 1; 237 char* buf = reinterpret_cast<char*>(raw_buf) + 1;
238 238
239 internal::PodUnion_Data* data = 239 internal::PodUnion_Data* data =
240 reinterpret_cast<internal::PodUnion_Data*>(buf); 240 reinterpret_cast<internal::PodUnion_Data*>(buf);
241 mojo::internal::ValidationContext validation_context( 241 mojo::internal::ValidationContext validation_context(
242 data, static_cast<uint32_t>(size), 0); 242 data, static_cast<uint32_t>(size), 0, 0);
243 EXPECT_FALSE(internal::PodUnion_Data::Validate( 243 EXPECT_FALSE(internal::PodUnion_Data::Validate(
244 buf, &validation_context, false)); 244 buf, &validation_context, false));
245 free(raw_buf); 245 free(raw_buf);
246 } 246 }
247 247
248 TEST(UnionTest, OOBValidation) { 248 TEST(UnionTest, OOBValidation) {
249 size_t size = sizeof(internal::PodUnion_Data) - 1; 249 size_t size = sizeof(internal::PodUnion_Data) - 1;
250 mojo::internal::FixedBufferForTesting buf(size); 250 mojo::internal::FixedBufferForTesting buf(size);
251 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 251 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
252 mojo::internal::ValidationContext validation_context( 252 mojo::internal::ValidationContext validation_context(
253 data, static_cast<uint32_t>(size), 0); 253 data, static_cast<uint32_t>(size), 0, 0);
254 void* raw_buf = buf.Leak(); 254 void* raw_buf = buf.Leak();
255 EXPECT_FALSE( 255 EXPECT_FALSE(
256 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); 256 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
257 free(raw_buf); 257 free(raw_buf);
258 } 258 }
259 259
260 TEST(UnionTest, UnknownTagValidation) { 260 TEST(UnionTest, UnknownTagValidation) {
261 size_t size = sizeof(internal::PodUnion_Data); 261 size_t size = sizeof(internal::PodUnion_Data);
262 mojo::internal::FixedBufferForTesting buf(size); 262 mojo::internal::FixedBufferForTesting buf(size);
263 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 263 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
264 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); 264 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF);
265 mojo::internal::ValidationContext validation_context( 265 mojo::internal::ValidationContext validation_context(
266 data, static_cast<uint32_t>(size), 0); 266 data, static_cast<uint32_t>(size), 0, 0);
267 void* raw_buf = buf.Leak(); 267 void* raw_buf = buf.Leak();
268 EXPECT_FALSE( 268 EXPECT_FALSE(
269 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); 269 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
270 free(raw_buf); 270 free(raw_buf);
271 } 271 }
272 272
273 TEST(UnionTest, UnknownEnumValueValidation) { 273 TEST(UnionTest, UnknownEnumValueValidation) {
274 PodUnionPtr pod(PodUnion::New()); 274 PodUnionPtr pod(PodUnion::New());
275 pod->set_f_enum(static_cast<AnEnum>(0xFFFF)); 275 pod->set_f_enum(static_cast<AnEnum>(0xFFFF));
276 276
277 size_t size = 277 size_t size =
278 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); 278 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr);
279 EXPECT_EQ(16U, size); 279 EXPECT_EQ(16U, size);
280 280
281 mojo::internal::FixedBufferForTesting buf(size); 281 mojo::internal::FixedBufferForTesting buf(size);
282 internal::PodUnion_Data* data = nullptr; 282 internal::PodUnion_Data* data = nullptr;
283 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); 283 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr);
284 284
285 void* raw_buf = buf.Leak(); 285 void* raw_buf = buf.Leak();
286 mojo::internal::ValidationContext validation_context( 286 mojo::internal::ValidationContext validation_context(
287 data, static_cast<uint32_t>(size), 0); 287 data, static_cast<uint32_t>(size), 0, 0);
288 EXPECT_FALSE( 288 EXPECT_FALSE(
289 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); 289 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
290 free(raw_buf); 290 free(raw_buf);
291 } 291 }
292 292
293 TEST(UnionTest, UnknownExtensibleEnumValueValidation) { 293 TEST(UnionTest, UnknownExtensibleEnumValueValidation) {
294 PodUnionPtr pod(PodUnion::New()); 294 PodUnionPtr pod(PodUnion::New());
295 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF)); 295 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF));
296 296
297 size_t size = 297 size_t size =
298 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); 298 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr);
299 EXPECT_EQ(16U, size); 299 EXPECT_EQ(16U, size);
300 300
301 mojo::internal::FixedBufferForTesting buf(size); 301 mojo::internal::FixedBufferForTesting buf(size);
302 internal::PodUnion_Data* data = nullptr; 302 internal::PodUnion_Data* data = nullptr;
303 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); 303 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr);
304 304
305 void* raw_buf = buf.Leak(); 305 void* raw_buf = buf.Leak();
306 mojo::internal::ValidationContext validation_context( 306 mojo::internal::ValidationContext validation_context(
307 data, static_cast<uint32_t>(size), 0); 307 data, static_cast<uint32_t>(size), 0, 0);
308 EXPECT_TRUE( 308 EXPECT_TRUE(
309 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); 309 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
310 free(raw_buf); 310 free(raw_buf);
311 } 311 }
312 312
313 TEST(UnionTest, StringGetterSetter) { 313 TEST(UnionTest, StringGetterSetter) {
314 ObjectUnionPtr pod(ObjectUnion::New()); 314 ObjectUnionPtr pod(ObjectUnion::New());
315 315
316 std::string hello("hello world"); 316 std::string hello("hello world");
317 pod->set_f_string(hello); 317 pod->set_f_string(hello);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); 363 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING);
364 } 364 }
365 365
366 TEST(UnionTest, NullStringValidation) { 366 TEST(UnionTest, NullStringValidation) {
367 size_t size = sizeof(internal::ObjectUnion_Data); 367 size_t size = sizeof(internal::ObjectUnion_Data);
368 mojo::internal::FixedBufferForTesting buf(size); 368 mojo::internal::FixedBufferForTesting buf(size);
369 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 369 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
370 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 370 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
371 data->data.unknown = 0x0; 371 data->data.unknown = 0x0;
372 mojo::internal::ValidationContext validation_context( 372 mojo::internal::ValidationContext validation_context(
373 data, static_cast<uint32_t>(size), 0); 373 data, static_cast<uint32_t>(size), 0, 0);
374 void* raw_buf = buf.Leak(); 374 void* raw_buf = buf.Leak();
375 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( 375 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
376 raw_buf, &validation_context, false)); 376 raw_buf, &validation_context, false));
377 free(raw_buf); 377 free(raw_buf);
378 } 378 }
379 379
380 TEST(UnionTest, StringPointerOverflowValidation) { 380 TEST(UnionTest, StringPointerOverflowValidation) {
381 size_t size = sizeof(internal::ObjectUnion_Data); 381 size_t size = sizeof(internal::ObjectUnion_Data);
382 mojo::internal::FixedBufferForTesting buf(size); 382 mojo::internal::FixedBufferForTesting buf(size);
383 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 383 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
384 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 384 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
385 data->data.unknown = 0xFFFFFFFFFFFFFFFF; 385 data->data.unknown = 0xFFFFFFFFFFFFFFFF;
386 mojo::internal::ValidationContext validation_context( 386 mojo::internal::ValidationContext validation_context(
387 data, static_cast<uint32_t>(size), 0); 387 data, static_cast<uint32_t>(size), 0, 0);
388 void* raw_buf = buf.Leak(); 388 void* raw_buf = buf.Leak();
389 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( 389 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
390 raw_buf, &validation_context, false)); 390 raw_buf, &validation_context, false));
391 free(raw_buf); 391 free(raw_buf);
392 } 392 }
393 393
394 TEST(UnionTest, StringValidateOOB) { 394 TEST(UnionTest, StringValidateOOB) {
395 size_t size = 32; 395 size_t size = 32;
396 mojo::internal::FixedBufferForTesting buf(size); 396 mojo::internal::FixedBufferForTesting buf(size);
397 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 397 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
398 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 398 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
399 399
400 data->data.f_f_string.offset = 8; 400 data->data.f_f_string.offset = 8;
401 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); 401 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string);
402 mojo::internal::ArrayHeader* array_header = 402 mojo::internal::ArrayHeader* array_header =
403 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); 403 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr);
404 array_header->num_bytes = 20; // This should go out of bounds. 404 array_header->num_bytes = 20; // This should go out of bounds.
405 array_header->num_elements = 20; 405 array_header->num_elements = 20;
406 mojo::internal::ValidationContext validation_context(data, 32, 0); 406 mojo::internal::ValidationContext validation_context(data, 32, 0, 0);
407 void* raw_buf = buf.Leak(); 407 void* raw_buf = buf.Leak();
408 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( 408 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
409 raw_buf, &validation_context, false)); 409 raw_buf, &validation_context, false));
410 free(raw_buf); 410 free(raw_buf);
411 } 411 }
412 412
413 // TODO(azani): Move back in array_unittest.cc when possible. 413 // TODO(azani): Move back in array_unittest.cc when possible.
414 // Array tests 414 // Array tests
415 TEST(UnionTest, PodUnionInArray) { 415 TEST(UnionTest, PodUnionInArray) {
416 SmallStructPtr small_struct(SmallStruct::New()); 416 SmallStructPtr small_struct(SmallStruct::New());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 new_buf.resize(size); 508 new_buf.resize(size);
509 509
510 void* raw_buf = buf.Leak(); 510 void* raw_buf = buf.Leak();
511 memcpy(new_buf.data(), raw_buf, size); 511 memcpy(new_buf.data(), raw_buf, size);
512 free(raw_buf); 512 free(raw_buf);
513 513
514 data = 514 data =
515 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( 515 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>(
516 new_buf.data()); 516 new_buf.data());
517 mojo::internal::ValidationContext validation_context( 517 mojo::internal::ValidationContext validation_context(
518 data, static_cast<uint32_t>(size), 0); 518 data, static_cast<uint32_t>(size), 0, 0);
519 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( 519 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate(
520 data, &validation_context, &validate_params)); 520 data, &validation_context, &validate_params));
521 521
522 std::vector<ObjectUnionPtr> array2; 522 std::vector<ObjectUnionPtr> array2;
523 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2, 523 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2,
524 nullptr); 524 nullptr);
525 525
526 EXPECT_EQ(2U, array2.size()); 526 EXPECT_EQ(2U, array2.size());
527 527
528 EXPECT_EQ("hello", array2[0]->get_f_string()); 528 EXPECT_EQ("hello", array2[0]->get_f_string());
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( 594 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>(
595 small_struct, &context); 595 small_struct, &context);
596 596
597 mojo::internal::FixedBufferForTesting buf(size); 597 mojo::internal::FixedBufferForTesting buf(size);
598 internal::SmallStruct_Data* data = nullptr; 598 internal::SmallStruct_Data* data = nullptr;
599 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, 599 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data,
600 &context); 600 &context);
601 601
602 void* raw_buf = buf.Leak(); 602 void* raw_buf = buf.Leak();
603 mojo::internal::ValidationContext validation_context( 603 mojo::internal::ValidationContext validation_context(
604 data, static_cast<uint32_t>(size), 0); 604 data, static_cast<uint32_t>(size), 0, 0);
605 EXPECT_TRUE(internal::SmallStruct_Data::Validate( 605 EXPECT_TRUE(internal::SmallStruct_Data::Validate(
606 raw_buf, &validation_context)); 606 raw_buf, &validation_context));
607 free(raw_buf); 607 free(raw_buf);
608 } 608 }
609 609
610 // Validation test of a struct union fails due to unknown union tag. 610 // Validation test of a struct union fails due to unknown union tag.
611 TEST(UnionTest, Validation_PodUnionInStruct_Failure) { 611 TEST(UnionTest, Validation_PodUnionInStruct_Failure) {
612 SmallStructPtr small_struct(SmallStruct::New()); 612 SmallStructPtr small_struct(SmallStruct::New());
613 small_struct->pod_union = PodUnion::New(); 613 small_struct->pod_union = PodUnion::New();
614 small_struct->pod_union->set_f_int32(10); 614 small_struct->pod_union->set_f_int32(10);
615 615
616 mojo::internal::SerializationContext context; 616 mojo::internal::SerializationContext context;
617 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( 617 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>(
618 small_struct, &context); 618 small_struct, &context);
619 619
620 mojo::internal::FixedBufferForTesting buf(size); 620 mojo::internal::FixedBufferForTesting buf(size);
621 internal::SmallStruct_Data* data = nullptr; 621 internal::SmallStruct_Data* data = nullptr;
622 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, 622 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data,
623 &context); 623 &context);
624 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100); 624 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100);
625 625
626 void* raw_buf = buf.Leak(); 626 void* raw_buf = buf.Leak();
627 mojo::internal::ValidationContext validation_context( 627 mojo::internal::ValidationContext validation_context(
628 data, static_cast<uint32_t>(size), 0); 628 data, static_cast<uint32_t>(size), 0, 0);
629 EXPECT_FALSE(internal::SmallStruct_Data::Validate( 629 EXPECT_FALSE(internal::SmallStruct_Data::Validate(
630 raw_buf, &validation_context)); 630 raw_buf, &validation_context));
631 free(raw_buf); 631 free(raw_buf);
632 } 632 }
633 633
634 // Validation fails due to non-nullable null union in struct. 634 // Validation fails due to non-nullable null union in struct.
635 TEST(UnionTest, Validation_NullUnion_Failure) { 635 TEST(UnionTest, Validation_NullUnion_Failure) {
636 SmallStructNonNullableUnionPtr small_struct( 636 SmallStructNonNullableUnionPtr small_struct(
637 SmallStructNonNullableUnion::New()); 637 SmallStructNonNullableUnion::New());
638 638
639 size_t size = 639 size_t size =
640 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionDataView>( 640 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionDataView>(
641 small_struct, nullptr); 641 small_struct, nullptr);
642 642
643 mojo::internal::FixedBufferForTesting buf(size); 643 mojo::internal::FixedBufferForTesting buf(size);
644 internal::SmallStructNonNullableUnion_Data* data = 644 internal::SmallStructNonNullableUnion_Data* data =
645 internal::SmallStructNonNullableUnion_Data::New(&buf); 645 internal::SmallStructNonNullableUnion_Data::New(&buf);
646 646
647 void* raw_buf = buf.Leak(); 647 void* raw_buf = buf.Leak();
648 mojo::internal::ValidationContext validation_context( 648 mojo::internal::ValidationContext validation_context(
649 data, static_cast<uint32_t>(size), 0); 649 data, static_cast<uint32_t>(size), 0, 0);
650 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate( 650 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate(
651 raw_buf, &validation_context)); 651 raw_buf, &validation_context));
652 free(raw_buf); 652 free(raw_buf);
653 } 653 }
654 654
655 // Validation passes with nullable null union. 655 // Validation passes with nullable null union.
656 TEST(UnionTest, Validation_NullableUnion) { 656 TEST(UnionTest, Validation_NullableUnion) {
657 SmallStructPtr small_struct(SmallStruct::New()); 657 SmallStructPtr small_struct(SmallStruct::New());
658 658
659 mojo::internal::SerializationContext context; 659 mojo::internal::SerializationContext context;
660 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( 660 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>(
661 small_struct, &context); 661 small_struct, &context);
662 662
663 mojo::internal::FixedBufferForTesting buf(size); 663 mojo::internal::FixedBufferForTesting buf(size);
664 internal::SmallStruct_Data* data = nullptr; 664 internal::SmallStruct_Data* data = nullptr;
665 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, 665 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data,
666 &context); 666 &context);
667 667
668 void* raw_buf = buf.Leak(); 668 void* raw_buf = buf.Leak();
669 mojo::internal::ValidationContext validation_context( 669 mojo::internal::ValidationContext validation_context(
670 data, static_cast<uint32_t>(size), 0); 670 data, static_cast<uint32_t>(size), 0, 0);
671 EXPECT_TRUE(internal::SmallStruct_Data::Validate( 671 EXPECT_TRUE(internal::SmallStruct_Data::Validate(
672 raw_buf, &validation_context)); 672 raw_buf, &validation_context));
673 free(raw_buf); 673 free(raw_buf);
674 } 674 }
675 675
676 // TODO(azani): Move back in map_unittest.cc when possible. 676 // TODO(azani): Move back in map_unittest.cc when possible.
677 // Map Tests 677 // Map Tests
678 TEST(UnionTest, PodUnionInMap) { 678 TEST(UnionTest, PodUnionInMap) {
679 SmallStructPtr small_struct(SmallStruct::New()); 679 SmallStructPtr small_struct(SmallStruct::New());
680 small_struct->pod_union_map.emplace(); 680 small_struct->pod_union_map.emplace();
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( 787 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>(
788 obj, false, nullptr); 788 obj, false, nullptr);
789 789
790 mojo::internal::FixedBufferForTesting buf(size); 790 mojo::internal::FixedBufferForTesting buf(size);
791 internal::ObjectUnion_Data* data = nullptr; 791 internal::ObjectUnion_Data* data = nullptr;
792 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 792 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
793 nullptr); 793 nullptr);
794 794
795 void* raw_buf = buf.Leak(); 795 void* raw_buf = buf.Leak();
796 mojo::internal::ValidationContext validation_context( 796 mojo::internal::ValidationContext validation_context(
797 data, static_cast<uint32_t>(size), 0); 797 data, static_cast<uint32_t>(size), 0, 0);
798 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( 798 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
799 raw_buf, &validation_context, false)); 799 raw_buf, &validation_context, false));
800 free(raw_buf); 800 free(raw_buf);
801 } 801 }
802 802
803 TEST(UnionTest, StructInUnionValidationNonNullable) { 803 TEST(UnionTest, StructInUnionValidationNonNullable) {
804 mojo::internal::SerializationWarningObserverForTesting suppress_warning; 804 mojo::internal::SerializationWarningObserverForTesting suppress_warning;
805 805
806 DummyStructPtr dummy(nullptr); 806 DummyStructPtr dummy(nullptr);
807 807
808 ObjectUnionPtr obj(ObjectUnion::New()); 808 ObjectUnionPtr obj(ObjectUnion::New());
809 obj->set_f_dummy(std::move(dummy)); 809 obj->set_f_dummy(std::move(dummy));
810 810
811 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( 811 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>(
812 obj, false, nullptr); 812 obj, false, nullptr);
813 813
814 mojo::internal::FixedBufferForTesting buf(size); 814 mojo::internal::FixedBufferForTesting buf(size);
815 internal::ObjectUnion_Data* data = nullptr; 815 internal::ObjectUnion_Data* data = nullptr;
816 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 816 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
817 nullptr); 817 nullptr);
818 818
819 void* raw_buf = buf.Leak(); 819 void* raw_buf = buf.Leak();
820 mojo::internal::ValidationContext validation_context( 820 mojo::internal::ValidationContext validation_context(
821 data, static_cast<uint32_t>(size), 0); 821 data, static_cast<uint32_t>(size), 0, 0);
822 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( 822 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
823 raw_buf, &validation_context, false)); 823 raw_buf, &validation_context, false));
824 free(raw_buf); 824 free(raw_buf);
825 } 825 }
826 826
827 TEST(UnionTest, StructInUnionValidationNullable) { 827 TEST(UnionTest, StructInUnionValidationNullable) {
828 DummyStructPtr dummy(nullptr); 828 DummyStructPtr dummy(nullptr);
829 829
830 ObjectUnionPtr obj(ObjectUnion::New()); 830 ObjectUnionPtr obj(ObjectUnion::New());
831 obj->set_f_nullable(std::move(dummy)); 831 obj->set_f_nullable(std::move(dummy));
832 832
833 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( 833 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>(
834 obj, false, nullptr); 834 obj, false, nullptr);
835 835
836 mojo::internal::FixedBufferForTesting buf(size); 836 mojo::internal::FixedBufferForTesting buf(size);
837 internal::ObjectUnion_Data* data = nullptr; 837 internal::ObjectUnion_Data* data = nullptr;
838 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 838 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
839 nullptr); 839 nullptr);
840 840
841 void* raw_buf = buf.Leak(); 841 void* raw_buf = buf.Leak();
842 mojo::internal::ValidationContext validation_context( 842 mojo::internal::ValidationContext validation_context(
843 data, static_cast<uint32_t>(size), 0); 843 data, static_cast<uint32_t>(size), 0, 0);
844 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( 844 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
845 raw_buf, &validation_context, false)); 845 raw_buf, &validation_context, false));
846 free(raw_buf); 846 free(raw_buf);
847 } 847 }
848 848
849 TEST(UnionTest, ArrayInUnionGetterSetter) { 849 TEST(UnionTest, ArrayInUnionGetterSetter) {
850 std::vector<int8_t> array(2); 850 std::vector<int8_t> array(2);
851 array[0] = 8; 851 array[0] = 8;
852 array[1] = 9; 852 array[1] = 9;
853 853
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 892
893 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( 893 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>(
894 obj, false, nullptr); 894 obj, false, nullptr);
895 mojo::internal::FixedBufferForTesting buf(size); 895 mojo::internal::FixedBufferForTesting buf(size);
896 internal::ObjectUnion_Data* data = nullptr; 896 internal::ObjectUnion_Data* data = nullptr;
897 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 897 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
898 nullptr); 898 nullptr);
899 899
900 void* raw_buf = buf.Leak(); 900 void* raw_buf = buf.Leak();
901 mojo::internal::ValidationContext validation_context( 901 mojo::internal::ValidationContext validation_context(
902 data, static_cast<uint32_t>(size), 0); 902 data, static_cast<uint32_t>(size), 0, 0);
903 903
904 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( 904 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
905 raw_buf, &validation_context, false)); 905 raw_buf, &validation_context, false));
906 free(raw_buf); 906 free(raw_buf);
907 } 907 }
908 908
909 TEST(UnionTest, MapInUnionGetterSetter) { 909 TEST(UnionTest, MapInUnionGetterSetter) {
910 std::unordered_map<std::string, int8_t> map; 910 std::unordered_map<std::string, int8_t> map;
911 map.insert({"one", 1}); 911 map.insert({"one", 1});
912 map.insert({"two", 2}); 912 map.insert({"two", 2});
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 obj, false, &context); 956 obj, false, &context);
957 EXPECT_EQ(112U, size); 957 EXPECT_EQ(112U, size);
958 958
959 mojo::internal::FixedBufferForTesting buf(size); 959 mojo::internal::FixedBufferForTesting buf(size);
960 internal::ObjectUnion_Data* data = nullptr; 960 internal::ObjectUnion_Data* data = nullptr;
961 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 961 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
962 &context); 962 &context);
963 963
964 void* raw_buf = buf.Leak(); 964 void* raw_buf = buf.Leak();
965 mojo::internal::ValidationContext validation_context( 965 mojo::internal::ValidationContext validation_context(
966 data, static_cast<uint32_t>(size), 0); 966 data, static_cast<uint32_t>(size), 0, 0);
967 967
968 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( 968 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
969 raw_buf, &validation_context, false)); 969 raw_buf, &validation_context, false));
970 free(raw_buf); 970 free(raw_buf);
971 } 971 }
972 972
973 TEST(UnionTest, UnionInUnionGetterSetter) { 973 TEST(UnionTest, UnionInUnionGetterSetter) {
974 PodUnionPtr pod(PodUnion::New()); 974 PodUnionPtr pod(PodUnion::New());
975 pod->set_f_int8(10); 975 pod->set_f_int8(10);
976 976
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 obj, false, nullptr); 1012 obj, false, nullptr);
1013 EXPECT_EQ(32U, size); 1013 EXPECT_EQ(32U, size);
1014 1014
1015 mojo::internal::FixedBufferForTesting buf(size); 1015 mojo::internal::FixedBufferForTesting buf(size);
1016 internal::ObjectUnion_Data* data = nullptr; 1016 internal::ObjectUnion_Data* data = nullptr;
1017 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 1017 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
1018 nullptr); 1018 nullptr);
1019 1019
1020 void* raw_buf = buf.Leak(); 1020 void* raw_buf = buf.Leak();
1021 mojo::internal::ValidationContext validation_context( 1021 mojo::internal::ValidationContext validation_context(
1022 data, static_cast<uint32_t>(size), 0); 1022 data, static_cast<uint32_t>(size), 0, 0);
1023 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( 1023 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
1024 raw_buf, &validation_context, false)); 1024 raw_buf, &validation_context, false));
1025 free(raw_buf); 1025 free(raw_buf);
1026 } 1026 }
1027 1027
1028 TEST(UnionTest, UnionInUnionValidationNonNullable) { 1028 TEST(UnionTest, UnionInUnionValidationNonNullable) {
1029 mojo::internal::SerializationWarningObserverForTesting suppress_warning; 1029 mojo::internal::SerializationWarningObserverForTesting suppress_warning;
1030 1030
1031 PodUnionPtr pod(nullptr); 1031 PodUnionPtr pod(nullptr);
1032 1032
1033 ObjectUnionPtr obj(ObjectUnion::New()); 1033 ObjectUnionPtr obj(ObjectUnion::New());
1034 obj->set_f_pod_union(std::move(pod)); 1034 obj->set_f_pod_union(std::move(pod));
1035 1035
1036 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( 1036 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>(
1037 obj, false, nullptr); 1037 obj, false, nullptr);
1038 1038
1039 mojo::internal::FixedBufferForTesting buf(size); 1039 mojo::internal::FixedBufferForTesting buf(size);
1040 internal::ObjectUnion_Data* data = nullptr; 1040 internal::ObjectUnion_Data* data = nullptr;
1041 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, 1041 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false,
1042 nullptr); 1042 nullptr);
1043 1043
1044 void* raw_buf = buf.Leak(); 1044 void* raw_buf = buf.Leak();
1045 mojo::internal::ValidationContext validation_context( 1045 mojo::internal::ValidationContext validation_context(
1046 data, static_cast<uint32_t>(size), 0); 1046 data, static_cast<uint32_t>(size), 0, 0);
1047 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( 1047 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
1048 raw_buf, &validation_context, false)); 1048 raw_buf, &validation_context, false));
1049 free(raw_buf); 1049 free(raw_buf);
1050 } 1050 }
1051 1051
1052 TEST(UnionTest, HandleInUnionGetterSetter) { 1052 TEST(UnionTest, HandleInUnionGetterSetter) {
1053 ScopedMessagePipeHandle pipe0; 1053 ScopedMessagePipeHandle pipe0;
1054 ScopedMessagePipeHandle pipe1; 1054 ScopedMessagePipeHandle pipe1;
1055 1055
1056 CreateMessagePipe(nullptr, &pipe0, &pipe1); 1056 CreateMessagePipe(nullptr, &pipe0, &pipe1);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 handle, false, &context); 1113 handle, false, &context);
1114 EXPECT_EQ(16U, size); 1114 EXPECT_EQ(16U, size);
1115 1115
1116 mojo::internal::FixedBufferForTesting buf(size); 1116 mojo::internal::FixedBufferForTesting buf(size);
1117 internal::HandleUnion_Data* data = nullptr; 1117 internal::HandleUnion_Data* data = nullptr;
1118 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, 1118 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false,
1119 &context); 1119 &context);
1120 1120
1121 void* raw_buf = buf.Leak(); 1121 void* raw_buf = buf.Leak();
1122 mojo::internal::ValidationContext validation_context( 1122 mojo::internal::ValidationContext validation_context(
1123 data, static_cast<uint32_t>(size), 1); 1123 data, static_cast<uint32_t>(size), 1, 0);
1124 EXPECT_TRUE(internal::HandleUnion_Data::Validate( 1124 EXPECT_TRUE(internal::HandleUnion_Data::Validate(
1125 raw_buf, &validation_context, false)); 1125 raw_buf, &validation_context, false));
1126 free(raw_buf); 1126 free(raw_buf);
1127 } 1127 }
1128 1128
1129 TEST(UnionTest, HandleInUnionValidationNull) { 1129 TEST(UnionTest, HandleInUnionValidationNull) {
1130 mojo::internal::SerializationWarningObserverForTesting suppress_warning; 1130 mojo::internal::SerializationWarningObserverForTesting suppress_warning;
1131 1131
1132 ScopedMessagePipeHandle pipe; 1132 ScopedMessagePipeHandle pipe;
1133 HandleUnionPtr handle(HandleUnion::New()); 1133 HandleUnionPtr handle(HandleUnion::New());
1134 handle->set_f_message_pipe(std::move(pipe)); 1134 handle->set_f_message_pipe(std::move(pipe));
1135 1135
1136 mojo::internal::SerializationContext context; 1136 mojo::internal::SerializationContext context;
1137 size_t size = mojo::internal::PrepareToSerialize<HandleUnionDataView>( 1137 size_t size = mojo::internal::PrepareToSerialize<HandleUnionDataView>(
1138 handle, false, &context); 1138 handle, false, &context);
1139 EXPECT_EQ(16U, size); 1139 EXPECT_EQ(16U, size);
1140 1140
1141 mojo::internal::FixedBufferForTesting buf(size); 1141 mojo::internal::FixedBufferForTesting buf(size);
1142 internal::HandleUnion_Data* data = nullptr; 1142 internal::HandleUnion_Data* data = nullptr;
1143 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, 1143 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false,
1144 &context); 1144 &context);
1145 1145
1146 void* raw_buf = buf.Leak(); 1146 void* raw_buf = buf.Leak();
1147 mojo::internal::ValidationContext validation_context( 1147 mojo::internal::ValidationContext validation_context(
1148 data, static_cast<uint32_t>(size), 1); 1148 data, static_cast<uint32_t>(size), 1, 0);
1149 EXPECT_FALSE(internal::HandleUnion_Data::Validate( 1149 EXPECT_FALSE(internal::HandleUnion_Data::Validate(
1150 raw_buf, &validation_context, false)); 1150 raw_buf, &validation_context, false));
1151 free(raw_buf); 1151 free(raw_buf);
1152 } 1152 }
1153 1153
1154 class SmallCacheImpl : public SmallCache { 1154 class SmallCacheImpl : public SmallCache {
1155 public: 1155 public:
1156 explicit SmallCacheImpl(const base::Closure& closure) 1156 explicit SmallCacheImpl(const base::Closure& closure)
1157 : int_value_(0), closure_(closure) {} 1157 : int_value_(0), closure_(closure) {}
1158 ~SmallCacheImpl() override {} 1158 ~SmallCacheImpl() override {}
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 1237
1238 PodUnionPtr pod(PodUnion::New()); 1238 PodUnionPtr pod(PodUnion::New());
1239 pod->set_f_int16(16); 1239 pod->set_f_int16(16);
1240 1240
1241 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16)); 1241 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16));
1242 base::RunLoop().RunUntilIdle(); 1242 base::RunLoop().RunUntilIdle();
1243 } 1243 }
1244 1244
1245 } // namespace test 1245 } // namespace test
1246 } // namespace mojo 1246 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/tests/router_test_util.cc ('k') | mojo/public/cpp/bindings/tests/validation_context_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698