1919#include < thread>
2020
2121#include " include/proxy-wasm/context.h"
22+ #include " include/proxy-wasm/limits.h"
2223#include " include/proxy-wasm/wasm.h"
2324
2425#include " test/utility.h"
@@ -86,7 +87,7 @@ TEST_P(TestVm, TerminateExecution) {
8687 if (engine_ != " v8" ) {
8788 return ;
8889 }
89- auto source = readTestWasmFile (" infinite_loop .wasm" );
90+ auto source = readTestWasmFile (" resource_limits .wasm" );
9091 ASSERT_FALSE (source.empty ());
9192 auto wasm = TestWasm (std::move (vm_));
9293 ASSERT_TRUE (wasm.load (source, false ));
@@ -112,6 +113,35 @@ TEST_P(TestVm, TerminateExecution) {
112113 }
113114}
114115
116+ TEST_P (TestVm, WasmMemoryLimit) {
117+ // TODO(PiotrSikora): enforce memory limits in other engines.
118+ if (engine_ != " v8" ) {
119+ return ;
120+ }
121+ auto source = readTestWasmFile (" resource_limits.wasm" );
122+ ASSERT_FALSE (source.empty ());
123+ auto wasm = TestWasm (std::move (vm_));
124+ ASSERT_TRUE (wasm.load (source, false ));
125+ ASSERT_TRUE (wasm.initialize ());
126+
127+ WasmCallVoid<0 > infinite_memory;
128+ wasm.wasm_vm ()->getFunction (" infinite_memory" , &infinite_memory);
129+ ASSERT_TRUE (infinite_memory != nullptr );
130+ infinite_memory (wasm.vm_context ());
131+
132+ EXPECT_GE (wasm.wasm_vm ()->getMemorySize (), PROXY_WASM_HOST_MAX_WASM_MEMORY_SIZE_BYTES * 0.95 );
133+ EXPECT_LE (wasm.wasm_vm ()->getMemorySize (), PROXY_WASM_HOST_MAX_WASM_MEMORY_SIZE_BYTES);
134+
135+ // Check integration logs.
136+ auto *host = dynamic_cast <TestIntegration *>(wasm.wasm_vm ()->integration ().get ());
137+ EXPECT_TRUE (host->isErrorLogged (" Function: infinite_memory failed" ));
138+ if (engine_ == " v8" ) {
139+ EXPECT_TRUE (host->isErrorLogged (" Uncaught RuntimeError: unreachable" ));
140+ EXPECT_TRUE (host->isErrorLogged (" Proxy-Wasm plugin in-VM backtrace:" ));
141+ EXPECT_TRUE (host->isErrorLogged (" - rust_oom" ));
142+ }
143+ }
144+
115145TEST_P (TestVm, Trap) {
116146 auto source = readTestWasmFile (" trap.wasm" );
117147 ASSERT_FALSE (source.empty ());
0 commit comments