1 #![cfg(arc_try_new)]
2 
3 use wasmtime::{Config, Engine, Module, Result};
4 use wasmtime_fuzzing::oom::OomTest;
5 
6 #[test]
module_name() -> Result<()>7 fn module_name() -> Result<()> {
8     let module_bytes = {
9         let mut config = Config::new();
10         config.concurrency_support(false);
11         let engine = Engine::new(&config)?;
12         Module::new(&engine, r#"(module $my_module (func (export "f")))"#)?.serialize()?
13     };
14     let mut config = Config::new();
15     config.enable_compiler(false);
16     config.concurrency_support(false);
17     let engine = Engine::new(&config)?;
18     let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
19 
20     OomTest::new().test(|| {
21         let _name = module.name();
22         Ok(())
23     })
24 }
25 
26 #[test]
module_imports() -> Result<()>27 fn module_imports() -> Result<()> {
28     let module_bytes = {
29         let mut config = Config::new();
30         config.concurrency_support(false);
31         let engine = Engine::new(&config)?;
32         Module::new(
33             &engine,
34             r#"(module (import "mod" "func" (func)) (func (export "f")))"#,
35         )?
36         .serialize()?
37     };
38     let mut config = Config::new();
39     config.enable_compiler(false);
40     config.concurrency_support(false);
41     let engine = Engine::new(&config)?;
42     let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
43 
44     OomTest::new().test(|| {
45         let count = module.imports().count();
46         assert_eq!(count, 1);
47         Ok(())
48     })
49 }
50 
51 #[test]
module_exports() -> Result<()>52 fn module_exports() -> Result<()> {
53     let module_bytes = {
54         let mut config = Config::new();
55         config.concurrency_support(false);
56         let engine = Engine::new(&config)?;
57         Module::new(
58             &engine,
59             r#"(module (func (export "f")) (memory (export "m") 1))"#,
60         )?
61         .serialize()?
62     };
63     let mut config = Config::new();
64     config.enable_compiler(false);
65     config.concurrency_support(false);
66     let engine = Engine::new(&config)?;
67     let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
68 
69     OomTest::new().test(|| {
70         let count = module.exports().count();
71         assert_eq!(count, 2);
72         Ok(())
73     })
74 }
75 
76 #[test]
module_get_export() -> Result<()>77 fn module_get_export() -> Result<()> {
78     let module_bytes = {
79         let mut config = Config::new();
80         config.concurrency_support(false);
81         let engine = Engine::new(&config)?;
82         Module::new(&engine, r#"(module (func (export "f")))"#)?.serialize()?
83     };
84     let mut config = Config::new();
85     config.enable_compiler(false);
86     config.concurrency_support(false);
87     let engine = Engine::new(&config)?;
88     let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
89 
90     OomTest::new().test(|| {
91         let export = module.get_export("f");
92         assert!(export.is_some());
93         let missing = module.get_export("nonexistent");
94         assert!(missing.is_none());
95         Ok(())
96     })
97 }
98 
99 #[test]
module_engine() -> Result<()>100 fn module_engine() -> Result<()> {
101     let module_bytes = {
102         let mut config = Config::new();
103         config.concurrency_support(false);
104         let engine = Engine::new(&config)?;
105         Module::new(&engine, "(module)")?.serialize()?
106     };
107     let mut config = Config::new();
108     config.enable_compiler(false);
109     config.concurrency_support(false);
110     let engine = Engine::new(&config)?;
111     let module = unsafe { Module::deserialize(&engine, &module_bytes)? };
112 
113     OomTest::new().test(|| {
114         let _engine = module.engine();
115         Ok(())
116     })
117 }
118