@@ -89,5 +89,73 @@ TEST_P(TestVm, Clock) {
8989 EXPECT_TRUE (context->isLogged (" realtime: " ));
9090}
9191
92+ TEST_P (TestVm, RandomZero) {
93+ auto source = readTestWasmFile (" random.wasm" );
94+ ASSERT_FALSE (source.empty ());
95+ auto wasm = TestWasm (std::move (vm_));
96+ ASSERT_TRUE (wasm.load (source, false ));
97+ ASSERT_TRUE (wasm.initialize ());
98+
99+ WasmCallVoid<1 > run;
100+ wasm.wasm_vm ()->getFunction (" run" , &run);
101+ ASSERT_TRUE (run != nullptr );
102+ run (wasm.vm_context (), Word{0 });
103+
104+ // Check application logs.
105+ auto *context = dynamic_cast <TestContext *>(wasm.vm_context ());
106+ EXPECT_TRUE (context->isLogged (" random_get(0) succeeded." ));
107+ }
108+
109+ TEST_P (TestVm, RandomSmall) {
110+ auto source = readTestWasmFile (" random.wasm" );
111+ ASSERT_FALSE (source.empty ());
112+ auto wasm = TestWasm (std::move (vm_));
113+ ASSERT_TRUE (wasm.load (source, false ));
114+ ASSERT_TRUE (wasm.initialize ());
115+
116+ WasmCallVoid<1 > run;
117+ wasm.wasm_vm ()->getFunction (" run" , &run);
118+ ASSERT_TRUE (run != nullptr );
119+ run (wasm.vm_context (), Word{32 });
120+
121+ // Check application logs.
122+ auto *context = dynamic_cast <TestContext *>(wasm.vm_context ());
123+ EXPECT_TRUE (context->isLogged (" random_get(32) succeeded." ));
124+ }
125+
126+ TEST_P (TestVm, RandomLarge) {
127+ auto source = readTestWasmFile (" random.wasm" );
128+ ASSERT_FALSE (source.empty ());
129+ auto wasm = TestWasm (std::move (vm_));
130+ ASSERT_TRUE (wasm.load (source, false ));
131+ ASSERT_TRUE (wasm.initialize ());
132+
133+ WasmCallVoid<1 > run;
134+ wasm.wasm_vm ()->getFunction (" run" , &run);
135+ ASSERT_TRUE (run != nullptr );
136+ run (wasm.vm_context (), Word{64 * 1024 });
137+
138+ // Check application logs.
139+ auto *context = dynamic_cast <TestContext *>(wasm.vm_context ());
140+ EXPECT_TRUE (context->isLogged (" random_get(65536) succeeded." ));
141+ }
142+
143+ TEST_P (TestVm, RandomTooLarge) {
144+ auto source = readTestWasmFile (" random.wasm" );
145+ ASSERT_FALSE (source.empty ());
146+ auto wasm = TestWasm (std::move (vm_));
147+ ASSERT_TRUE (wasm.load (source, false ));
148+ ASSERT_TRUE (wasm.initialize ());
149+
150+ WasmCallVoid<1 > run;
151+ wasm.wasm_vm ()->getFunction (" run" , &run);
152+ ASSERT_TRUE (run != nullptr );
153+ run (wasm.vm_context (), Word{65 * 1024 });
154+
155+ // Check application logs.
156+ auto *context = dynamic_cast <TestContext *>(wasm.vm_context ());
157+ EXPECT_TRUE (context->isLogged (" random_get(66560) failed." ));
158+ }
159+
92160} // namespace
93161} // namespace proxy_wasm
0 commit comments