1 #![cfg(arc_try_new)]
2 
3 use wasmtime::{Config, Engine, Result, Store, StoreLimitsBuilder};
4 use wasmtime_fuzzing::oom::OomTest;
5 
6 #[test]
store_try_new() -> Result<()>7 fn store_try_new() -> Result<()> {
8     let mut config = Config::new();
9     config.enable_compiler(false);
10     config.concurrency_support(false);
11     let engine = Engine::new(&config)?;
12     OomTest::new().test(|| {
13         let _ = Store::try_new(&engine, ())?;
14         Ok(())
15     })
16 }
17 
18 #[test]
store_data() -> Result<()>19 fn store_data() -> Result<()> {
20     let mut config = Config::new();
21     config.enable_compiler(false);
22     config.concurrency_support(false);
23     let engine = Engine::new(&config)?;
24     OomTest::new().test(|| {
25         let store = Store::try_new(&engine, 42u32)?;
26         assert_eq!(*store.data(), 42);
27         Ok(())
28     })
29 }
30 
31 #[test]
store_data_mut() -> Result<()>32 fn store_data_mut() -> Result<()> {
33     let mut config = Config::new();
34     config.enable_compiler(false);
35     config.concurrency_support(false);
36     let engine = Engine::new(&config)?;
37     OomTest::new().test(|| {
38         let mut store = Store::try_new(&engine, 42u32)?;
39         *store.data_mut() = 99;
40         assert_eq!(*store.data(), 99);
41         Ok(())
42     })
43 }
44 
45 #[test]
store_engine() -> Result<()>46 fn store_engine() -> Result<()> {
47     let mut config = Config::new();
48     config.enable_compiler(false);
49     config.concurrency_support(false);
50     let engine = Engine::new(&config)?;
51     OomTest::new().test(|| {
52         let store = Store::try_new(&engine, ())?;
53         let _engine = store.engine();
54         Ok(())
55     })
56 }
57 
58 #[test]
store_limiter() -> Result<()>59 fn store_limiter() -> Result<()> {
60     let mut config = Config::new();
61     config.enable_compiler(false);
62     config.concurrency_support(false);
63     let engine = Engine::new(&config)?;
64     OomTest::new().test(|| {
65         let mut store = Store::try_new(&engine, StoreLimitsBuilder::new().build())?;
66         store.limiter(|limits| limits);
67         Ok(())
68     })
69 }
70 
71 #[test]
store_fuel() -> Result<()>72 fn store_fuel() -> Result<()> {
73     let mut config = Config::new();
74     config.enable_compiler(false);
75     config.concurrency_support(false);
76     config.consume_fuel(true);
77     let engine = Engine::new(&config)?;
78     OomTest::new().test(|| {
79         let mut store = Store::try_new(&engine, ())?;
80         store.set_fuel(100)?;
81         let fuel = store.get_fuel()?;
82         assert_eq!(fuel, 100);
83         Ok(())
84     })
85 }
86 
87 #[test]
store_epoch_deadline() -> Result<()>88 fn store_epoch_deadline() -> Result<()> {
89     let mut config = Config::new();
90     config.enable_compiler(false);
91     config.concurrency_support(false);
92     config.epoch_interruption(true);
93     let engine = Engine::new(&config)?;
94     OomTest::new().test(|| {
95         let mut store = Store::try_new(&engine, ())?;
96         store.set_epoch_deadline(10);
97         Ok(())
98     })
99 }
100