Coverage for tests/test_store.py: 100%

73 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-02-20 16:25 +0000

1import unittest 

2 

3from wasmtime import * 

4 

5 

6class TestStore(unittest.TestCase): 

7 def test_smoke(self): 

8 Store() 

9 Store(Engine()) 

10 

11 with Store() as store: 

12 pass 

13 

14 store = Store() 

15 store.close() 

16 store.close() 

17 with self.assertRaises(ValueError): 

18 store.set_epoch_deadline(1) 

19 

20 def test_errors(self): 

21 with self.assertRaises(TypeError): 

22 Store(3) # type: ignore 

23 

24 def test_interrupt_handle(self): 

25 config = Config() 

26 config.epoch_interruption = True 

27 engine = Engine(config) 

28 engine.increment_epoch() 

29 store = Store(engine) 

30 store.set_epoch_deadline(1) 

31 

32 def test_interrupt_wasm(self): 

33 config = Config() 

34 config.epoch_interruption = True 

35 engine = Engine(config) 

36 store = Store(engine) 

37 store.set_epoch_deadline(1) 

38 

39 module = Module(store.engine, """ 

40 (import "" "hit" (func $hit)) 

41 (import "" "interrupt" (func $interrupt)) 

42 (func $start 

43 call $hit 

44 call $interrupt 

45 (loop br 0)) 

46 (start $start) 

47 """) 

48 interrupt = Func(store, FuncType([], []), lambda: engine.increment_epoch()) 

49 

50 was_hit = False 

51 

52 def hit_callback(): 

53 nonlocal was_hit 

54 was_hit = True 

55 hit = Func(store, FuncType([], []), hit_callback) 

56 

57 with self.assertRaises(Trap): 

58 Instance(store, module, [hit, interrupt]) 

59 self.assertTrue(was_hit) 

60 

61 def test_fuel(self): 

62 store = Store() 

63 

64 with self.assertRaises(WasmtimeError): 

65 store.set_fuel(1) 

66 with self.assertRaises(WasmtimeError): 

67 store.get_fuel() 

68 

69 config = Config() 

70 config.consume_fuel = True 

71 store = Store(Engine(config)) 

72 store.set_fuel(1) 

73 assert(store.get_fuel() == 1) 

74 store.set_fuel(2) 

75 assert(store.get_fuel() == 2) 

76 store.set_fuel(0) 

77 assert(store.get_fuel() == 0) 

78 

79 def test_limits(self): 

80 store = Store() 

81 Memory(store, MemoryType(Limits(1, None))) 

82 

83 store = Store() 

84 store.set_limits(memory_size=0) 

85 with self.assertRaises(WasmtimeError): 

86 Memory(store, MemoryType(Limits(1, None))) 

87 store.set_limits(memory_size=100000) 

88 Memory(store, MemoryType(Limits(1, None))) 

89 

90 store = Store() 

91 store.set_limits(table_elements=1) 

92 Table(store, TableType(ValType.funcref(), Limits(1, None)), None) 

93 with self.assertRaises(WasmtimeError): 

94 Table(store, TableType(ValType.funcref(), Limits(2, None)), None) 

95 

96 store = Store() 

97 store.set_limits(memory_size=200000) 

98 mem = Memory(store, MemoryType(Limits(1, None))) 

99 mem.grow(store, 1) 

100 with self.assertRaises(WasmtimeError): 

101 mem.grow(store, 100)