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