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

Unified Diff: mojo/public/rust/tests/validation.rs

Issue 2220183003: Rust: Add validation to decode (Closed) Base URL: git@github.com:domokit/mojo.git@coder-testing
Patch Set: Pass all tests Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: mojo/public/rust/tests/validation.rs
diff --git a/mojo/public/rust/tests/validation.rs b/mojo/public/rust/tests/validation.rs
new file mode 100644
index 0000000000000000000000000000000000000000..2362dbd97edcab3ac33e387c6c7d847c79df5cc4
--- /dev/null
+++ b/mojo/public/rust/tests/validation.rs
@@ -0,0 +1,127 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+//! Tests encoding and decoding functionality in the bindings package
+//!
+//! Test failure is defined as the function returning via panicking
+//! and the result being caught in the test! macro. If a test function
+//! returns without panicking, it is assumed to pass.
+
+#[macro_use]
+extern crate mojo;
+
+use mojo::bindings::mojom::MojomMessageOption;
+use mojo::system;
+
+#[macro_use]
+mod util;
+
+use util::mojom_validation::*;
+
+/// This macro is a wrapper for the tests! macro as it takes advantage of the
+/// shared code between tests.
+///
+/// Given a test name, it will generate a test function. In this test function
+/// we perform the following steps:
+/// 1. Decode the header of the validation input.
+/// 3. Decode the payload of the validation input.
+///
+macro_rules! validation_tests {
+ ($($name:ident => $req_type:ident;)*) => {
+ tests! {
+ $(
+ fn $name() {
+ let data = include_str!(concat!("../../interfaces/bindings/tests/data/validation/",
+ stringify!($name),
+ ".data"));
+ let expected = include_str!(concat!("../../interfaces/bindings/tests/data/validation/",
+ stringify!($name),
+ ".expected")).trim();
+ match util::parse_validation_test(data) {
+ Ok((data, num_handles)) => {
+ let mut mock_handles = Vec::with_capacity(num_handles);
+ for _ in 0..num_handles {
+ mock_handles.push(unsafe { system::acquire(0) });
+ }
+ match $req_type::decode_message(data, mock_handles) {
+ Ok(_) => panic!("Should not be valid!"),
+ Err(err) => assert_eq!(err.as_str(), expected),
+ }
+ },
+ Err(msg) => panic!("Error: {}", msg),
+ }
+ }
+ )*
+ }
+ }
+}
+
+validation_tests! {
+ conformance_empty => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_incomplete_struct => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_incomplete_struct_header => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_invalid_request_flags => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_invalid_request_flags2 => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_struct_num_bytes_huge => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_struct_num_bytes_less_than_min_requirement => ConformanceTestInterfaceRequestOption;
+ conformance_mthd0_struct_num_bytes_less_than_struct_header => ConformanceTestInterfaceRequestOption;
+ conformance_mthd10_null_keys => ConformanceTestInterfaceRequestOption;
+ conformance_mthd10_null_values => ConformanceTestInterfaceRequestOption;
+ conformance_mthd10_one_null_key => ConformanceTestInterfaceRequestOption;
+ conformance_mthd10_unequal_array_size => ConformanceTestInterfaceRequestOption;
+ conformance_mthd11_num_bytes_version_mismatch_1 => ConformanceTestInterfaceRequestOption;
+ conformance_mthd11_num_bytes_version_mismatch_2 => ConformanceTestInterfaceRequestOption;
+ conformance_mthd12_invalid_request_flags => ConformanceTestInterfaceRequestOption;
+ conformance_mthd14_unexpected_null_array_in_union => ConformanceTestInterfaceRequestOption;
+ conformance_mthd14_unexpected_null_map_in_union => ConformanceTestInterfaceRequestOption;
+ conformance_mthd14_unexpected_null_struct_in_union => ConformanceTestInterfaceRequestOption;
+ conformance_mthd14_unexpected_null_union_in_union => ConformanceTestInterfaceRequestOption;
+ conformance_mthd15_unexpected_null_union_in_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd1_misaligned_struct => ConformanceTestInterfaceRequestOption;
+ conformance_mthd1_struct_pointer_overflow => ConformanceTestInterfaceRequestOption;
+ conformance_mthd1_unexpected_null_struct => ConformanceTestInterfaceRequestOption;
+ conformance_mthd2_multiple_pointers_to_same_struct => ConformanceTestInterfaceRequestOption;
+ conformance_mthd2_overlapped_objects => ConformanceTestInterfaceRequestOption;
+ conformance_mthd2_wrong_layout_order => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_array_num_bytes_huge => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_array_num_bytes_less_than_array_header => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_array_num_bytes_less_than_necessary_size => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_array_pointer_overflow => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_incomplete_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_incomplete_array_header => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_misaligned_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd3_unexpected_null_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd4_multiple_pointers_to_same_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd4_overlapped_objects => ConformanceTestInterfaceRequestOption;
+ conformance_mthd4_wrong_layout_order => ConformanceTestInterfaceRequestOption;
+ conformance_mthd5_handle_out_of_range => ConformanceTestInterfaceRequestOption;
+ conformance_mthd5_multiple_handles_with_same_value_1 => ConformanceTestInterfaceRequestOption;
+ conformance_mthd5_multiple_handles_with_same_value_2 => ConformanceTestInterfaceRequestOption;
+ conformance_mthd5_unexpected_invalid_handle => ConformanceTestInterfaceRequestOption;
+ conformance_mthd5_wrong_handle_order => ConformanceTestInterfaceRequestOption;
+ conformance_mthd6_nested_array_num_bytes_less_than_necessary_size => ConformanceTestInterfaceRequestOption;
+ conformance_mthd7_unexpected_null_fixed_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd7_unmatched_array_elements => ConformanceTestInterfaceRequestOption;
+ conformance_mthd7_unmatched_array_elements_nested => ConformanceTestInterfaceRequestOption;
+ conformance_mthd8_array_num_bytes_overflow => ConformanceTestInterfaceRequestOption;
+ conformance_mthd8_unexpected_null_array => ConformanceTestInterfaceRequestOption;
+ conformance_mthd8_unexpected_null_string => ConformanceTestInterfaceRequestOption;
+ conformance_mthd9_unexpected_null_array => ConformanceTestInterfaceRequestOption;
+ boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceRequestOption;
+ conformance_msghdr_incomplete_struct => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_incomplete_struct_header => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_invalid_flag_combo => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_missing_request_id => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_no_such_method => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_huge => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_less_than_min_requirement => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_less_than_struct_header => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_version_mismatch_1 => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_version_mismatch_2 => ConformanceTestInterfaceRequestOption;
+ conformance_msghdr_num_bytes_version_mismatch_3 => ConformanceTestInterfaceRequestOption;
+ resp_boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceResponseOption;
+ resp_conformance_msghdr_invalid_response_flags1 => ConformanceTestInterfaceResponseOption;
+ resp_conformance_msghdr_invalid_response_flags2 => ConformanceTestInterfaceResponseOption;
+ resp_conformance_msghdr_no_such_method => ConformanceTestInterfaceResponseOption;
+}

Powered by Google App Engine
This is Rietveld 408576698