This addresses #4307. For the static API we generate 100 arbitrary test cases at build time, each of which includes 0-5 parameter types, a result type, and a WAT fragment containing an imported function and an exported function. The exported function calls the imported function, which is implemented by the host. At runtime, the fuzz test selects a test case at random and feeds it zero or more sets of arbitrary parameters and results, checking that values which flow host-to-guest and guest-to-host make the transition unchanged. The fuzz test for the dynamic API follows a similar pattern, the only difference being that test cases are generated at runtime. Signed-off-by: Joel Dice <joel.dice@fermyon.com>
33 lines
1.0 KiB
Rust
33 lines
1.0 KiB
Rust
//! Test case generators.
|
|
//!
|
|
//! Test case generators take raw, unstructured input from a fuzzer
|
|
//! (e.g. libFuzzer) and translate that into a structured test case (e.g. a
|
|
//! valid Wasm binary).
|
|
//!
|
|
//! These are generally implementations of the `Arbitrary` trait, or some
|
|
//! wrapper over an external tool, such that the wrapper implements the
|
|
//! `Arbitrary` trait for the wrapped external tool.
|
|
|
|
pub mod api;
|
|
mod codegen_settings;
|
|
pub mod component_types;
|
|
mod config;
|
|
mod instance_allocation_strategy;
|
|
mod instance_limits;
|
|
mod memory;
|
|
mod module_config;
|
|
mod single_inst_module;
|
|
mod spec_test;
|
|
mod stacks;
|
|
pub mod table_ops;
|
|
|
|
pub use codegen_settings::CodegenSettings;
|
|
pub use config::{Config, WasmtimeConfig};
|
|
pub use instance_allocation_strategy::InstanceAllocationStrategy;
|
|
pub use instance_limits::InstanceLimits;
|
|
pub use memory::{MemoryConfig, NormalMemoryConfig, UnalignedMemory, UnalignedMemoryCreator};
|
|
pub use module_config::ModuleConfig;
|
|
pub use single_inst_module::SingleInstModule;
|
|
pub use spec_test::SpecTest;
|
|
pub use stacks::Stacks;
|