| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 //! Tests encoding and decoding functionality in the bindings package |
| 6 //! |
| 7 //! Test failure is defined as the function returning via panicking |
| 8 //! and the result being caught in the test! macro. If a test function |
| 9 //! returns without panicking, it is assumed to pass. |
| 10 |
| 11 #[macro_use] |
| 12 extern crate mojo; |
| 13 |
| 14 use mojo::bindings::mojom::MojomMessageOption; |
| 15 use mojo::system; |
| 16 |
| 17 #[macro_use] |
| 18 mod util; |
| 19 |
| 20 use util::mojom_validation::*; |
| 21 |
| 22 /// This macro is a wrapper for the tests! macro as it takes advantage of the |
| 23 /// shared code between tests. |
| 24 /// |
| 25 /// Given a test name, it will generate a test function. In this test function |
| 26 /// we perform the following steps: |
| 27 /// 1. Decode the header of the validation input. |
| 28 /// 3. Decode the payload of the validation input. |
| 29 /// |
| 30 macro_rules! validation_tests { |
| 31 ($($name:ident => $req_type:ident;)*) => { |
| 32 tests! { |
| 33 $( |
| 34 fn $name() { |
| 35 let data = include_str!(concat!("../../interfaces/bindings/tests
/data/validation/", |
| 36 stringify!($name), |
| 37 ".data")); |
| 38 let expected = include_str!(concat!("../../interfaces/bindings/t
ests/data/validation/", |
| 39 stringify!($name), |
| 40 ".expected")).trim(); |
| 41 match util::parse_validation_test(data) { |
| 42 Ok((data, num_handles)) => { |
| 43 let mut mock_handles = Vec::with_capacity(num_handles); |
| 44 for _ in 0..num_handles { |
| 45 mock_handles.push(unsafe { system::acquire(0) }); |
| 46 } |
| 47 match $req_type::decode_message(data, mock_handles) { |
| 48 Ok(_) => panic!("Should not be valid!"), |
| 49 Err(err) => assert_eq!(err.as_str(), expected), |
| 50 } |
| 51 }, |
| 52 Err(msg) => panic!("Error: {}", msg), |
| 53 } |
| 54 } |
| 55 )* |
| 56 } |
| 57 } |
| 58 } |
| 59 |
| 60 validation_tests! { |
| 61 conformance_empty => ConformanceTestInterfaceRequestOption; |
| 62 conformance_mthd0_incomplete_struct => ConformanceTestInterfaceRequestOption
; |
| 63 conformance_mthd0_incomplete_struct_header => ConformanceTestInterfaceReques
tOption; |
| 64 conformance_mthd0_invalid_request_flags => ConformanceTestInterfaceRequestOp
tion; |
| 65 conformance_mthd0_invalid_request_flags2 => ConformanceTestInterfaceRequestO
ption; |
| 66 conformance_mthd0_struct_num_bytes_huge => ConformanceTestInterfaceRequestOp
tion; |
| 67 conformance_mthd0_struct_num_bytes_less_than_min_requirement => ConformanceT
estInterfaceRequestOption; |
| 68 conformance_mthd0_struct_num_bytes_less_than_struct_header => ConformanceTes
tInterfaceRequestOption; |
| 69 conformance_mthd10_null_keys => ConformanceTestInterfaceRequestOption; |
| 70 conformance_mthd10_null_values => ConformanceTestInterfaceRequestOption; |
| 71 conformance_mthd10_one_null_key => ConformanceTestInterfaceRequestOption; |
| 72 conformance_mthd10_unequal_array_size => ConformanceTestInterfaceRequestOpti
on; |
| 73 conformance_mthd11_num_bytes_version_mismatch_1 => ConformanceTestInterfaceR
equestOption; |
| 74 conformance_mthd11_num_bytes_version_mismatch_2 => ConformanceTestInterfaceR
equestOption; |
| 75 conformance_mthd12_invalid_request_flags => ConformanceTestInterfaceRequestO
ption; |
| 76 conformance_mthd14_unexpected_null_array_in_union => ConformanceTestInterfac
eRequestOption; |
| 77 conformance_mthd14_unexpected_null_map_in_union => ConformanceTestInterfaceR
equestOption; |
| 78 conformance_mthd14_unexpected_null_struct_in_union => ConformanceTestInterfa
ceRequestOption; |
| 79 conformance_mthd14_unexpected_null_union_in_union => ConformanceTestInterfac
eRequestOption; |
| 80 conformance_mthd15_unexpected_null_union_in_array => ConformanceTestInterfac
eRequestOption; |
| 81 conformance_mthd1_misaligned_struct => ConformanceTestInterfaceRequestOption
; |
| 82 conformance_mthd1_struct_pointer_overflow => ConformanceTestInterfaceRequest
Option; |
| 83 conformance_mthd1_unexpected_null_struct => ConformanceTestInterfaceRequestO
ption; |
| 84 conformance_mthd2_multiple_pointers_to_same_struct => ConformanceTestInterfa
ceRequestOption; |
| 85 conformance_mthd2_overlapped_objects => ConformanceTestInterfaceRequestOptio
n; |
| 86 conformance_mthd2_wrong_layout_order => ConformanceTestInterfaceRequestOptio
n; |
| 87 conformance_mthd3_array_num_bytes_huge => ConformanceTestInterfaceRequestOpt
ion; |
| 88 conformance_mthd3_array_num_bytes_less_than_array_header => ConformanceTestI
nterfaceRequestOption; |
| 89 conformance_mthd3_array_num_bytes_less_than_necessary_size => ConformanceTes
tInterfaceRequestOption; |
| 90 conformance_mthd3_array_pointer_overflow => ConformanceTestInterfaceRequestO
ption; |
| 91 conformance_mthd3_incomplete_array => ConformanceTestInterfaceRequestOption; |
| 92 conformance_mthd3_incomplete_array_header => ConformanceTestInterfaceRequest
Option; |
| 93 conformance_mthd3_misaligned_array => ConformanceTestInterfaceRequestOption; |
| 94 conformance_mthd3_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; |
| 95 conformance_mthd4_multiple_pointers_to_same_array => ConformanceTestInterfac
eRequestOption; |
| 96 conformance_mthd4_overlapped_objects => ConformanceTestInterfaceRequestOptio
n; |
| 97 conformance_mthd4_wrong_layout_order => ConformanceTestInterfaceRequestOptio
n; |
| 98 conformance_mthd5_handle_out_of_range => ConformanceTestInterfaceRequestOpti
on; |
| 99 conformance_mthd5_multiple_handles_with_same_value_1 => ConformanceTestInter
faceRequestOption; |
| 100 conformance_mthd5_multiple_handles_with_same_value_2 => ConformanceTestInter
faceRequestOption; |
| 101 conformance_mthd5_unexpected_invalid_handle => ConformanceTestInterfaceReque
stOption; |
| 102 conformance_mthd5_wrong_handle_order => ConformanceTestInterfaceRequestOptio
n; |
| 103 conformance_mthd6_nested_array_num_bytes_less_than_necessary_size => Conform
anceTestInterfaceRequestOption; |
| 104 conformance_mthd7_unexpected_null_fixed_array => ConformanceTestInterfaceReq
uestOption; |
| 105 conformance_mthd7_unmatched_array_elements => ConformanceTestInterfaceReques
tOption; |
| 106 conformance_mthd7_unmatched_array_elements_nested => ConformanceTestInterfac
eRequestOption; |
| 107 conformance_mthd8_array_num_bytes_overflow => ConformanceTestInterfaceReques
tOption; |
| 108 conformance_mthd8_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; |
| 109 conformance_mthd8_unexpected_null_string => ConformanceTestInterfaceRequestO
ption; |
| 110 conformance_mthd9_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; |
| 111 boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceRequestOption; |
| 112 conformance_msghdr_incomplete_struct => ConformanceTestInterfaceRequestOptio
n; |
| 113 conformance_msghdr_incomplete_struct_header => ConformanceTestInterfaceReque
stOption; |
| 114 conformance_msghdr_invalid_flag_combo => ConformanceTestInterfaceRequestOpti
on; |
| 115 conformance_msghdr_missing_request_id => ConformanceTestInterfaceRequestOpti
on; |
| 116 conformance_msghdr_no_such_method => ConformanceTestInterfaceRequestOption; |
| 117 conformance_msghdr_num_bytes_huge => ConformanceTestInterfaceRequestOption; |
| 118 conformance_msghdr_num_bytes_less_than_min_requirement => ConformanceTestInt
erfaceRequestOption; |
| 119 conformance_msghdr_num_bytes_less_than_struct_header => ConformanceTestInter
faceRequestOption; |
| 120 conformance_msghdr_num_bytes_version_mismatch_1 => ConformanceTestInterfaceR
equestOption; |
| 121 conformance_msghdr_num_bytes_version_mismatch_2 => ConformanceTestInterfaceR
equestOption; |
| 122 conformance_msghdr_num_bytes_version_mismatch_3 => ConformanceTestInterfaceR
equestOption; |
| 123 resp_boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceResponseOp
tion; |
| 124 resp_conformance_msghdr_invalid_response_flags1 => ConformanceTestInterfaceR
esponseOption; |
| 125 resp_conformance_msghdr_invalid_response_flags2 => ConformanceTestInterfaceR
esponseOption; |
| 126 resp_conformance_msghdr_no_such_method => ConformanceTestInterfaceResponseOp
tion; |
| 127 } |
| OLD | NEW |