Unify fuzzing and testing code
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
corpus
|
||||
artifacts
|
||||
+22
-12
@@ -2,24 +2,34 @@
|
||||
name = "dev-test"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
[package.metadata]
|
||||
cargo-fuzz = true
|
||||
|
||||
[dependencies.test-generator]
|
||||
version = "0.3.0"
|
||||
|
||||
[dependencies.wast]
|
||||
version = "41.0.0"
|
||||
[dependencies]
|
||||
libfuzzer-sys = "0.4"
|
||||
wasm-smith = "0.8.0"
|
||||
wasm-ast = { path = "../wasm-ast" }
|
||||
codegen-luajit = { path = "../codegen-luajit" }
|
||||
codegen-luau = { path = "../codegen-luau" }
|
||||
|
||||
[dependencies.parity-wasm]
|
||||
git = "https://github.com/paritytech/parity-wasm.git"
|
||||
features = ["multi_value", "sign_ext"]
|
||||
|
||||
[dependencies.wasm-ast]
|
||||
path = "../wasm-ast"
|
||||
[dev-dependencies]
|
||||
test-generator = "0.3.0"
|
||||
wast = "41.0.0"
|
||||
|
||||
[dependencies.codegen-luajit]
|
||||
path = "../codegen-luajit"
|
||||
[[bin]]
|
||||
name = "luajit_translate"
|
||||
path = "fuzz_targets/luajit_translate.rs"
|
||||
test = false
|
||||
doc = false
|
||||
|
||||
[dependencies.codegen-luau]
|
||||
path = "../codegen-luau"
|
||||
[[bin]]
|
||||
name = "luau_translate"
|
||||
path = "fuzz_targets/luau_translate.rs"
|
||||
test = false
|
||||
doc = false
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#![no_main]
|
||||
|
||||
use wasm_ast::builder::TypeInfo;
|
||||
use wasm_smith::Module;
|
||||
|
||||
// We are not interested in parity_wasm errors.
|
||||
libfuzzer_sys::fuzz_target!(|module: Module| {
|
||||
let data = module.to_bytes();
|
||||
let wasm = match parity_wasm::deserialize_buffer(&data) {
|
||||
Ok(v) => v,
|
||||
Err(_) => return,
|
||||
};
|
||||
|
||||
let type_info = TypeInfo::from_module(&wasm);
|
||||
let sink = &mut std::io::sink();
|
||||
|
||||
codegen_luajit::translate(&wasm, &type_info, sink).expect("LuaJIT should succeed");
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
#![no_main]
|
||||
|
||||
use wasm_ast::builder::TypeInfo;
|
||||
use wasm_smith::Module;
|
||||
|
||||
// We are not interested in parity_wasm errors.
|
||||
libfuzzer_sys::fuzz_target!(|module: Module| {
|
||||
let data = module.to_bytes();
|
||||
let wasm = match parity_wasm::deserialize_buffer(&data) {
|
||||
Ok(v) => v,
|
||||
Err(_) => return,
|
||||
};
|
||||
|
||||
let type_info = TypeInfo::from_module(&wasm);
|
||||
let sink = &mut std::io::sink();
|
||||
|
||||
codegen_luau::translate(&wasm, &type_info, sink).expect("Luau should succeed");
|
||||
});
|
||||
@@ -117,6 +117,8 @@ fn parse_and_validate<'a>(buffer: &'a ParseBuffer) -> Option<Wast<'a>> {
|
||||
observer.then(|| loaded)
|
||||
}
|
||||
|
||||
static TEMP_DIR: &str = env!("CARGO_TARGET_TMPDIR");
|
||||
|
||||
struct Tester<T> {
|
||||
_marker: PhantomData<T>,
|
||||
}
|
||||
@@ -124,7 +126,7 @@ struct Tester<T> {
|
||||
impl<T: Target> Tester<T> {
|
||||
fn test(name: &str, source: &str) -> IResult<()> {
|
||||
if let Some(data) = Self::run_generation(source)? {
|
||||
let temp = std::env::temp_dir().join("wasm-test-".to_string() + name);
|
||||
let temp = PathBuf::from(TEMP_DIR).join("west-".to_string() + name);
|
||||
|
||||
std::fs::write(&temp, &data)?;
|
||||
Self::run_command(&temp)?;
|
||||
Reference in New Issue
Block a user