Skip to content

Commit fe16bb3

Browse files
marcelamelaracmickeyb
authored andcommitted
Add wawaka memory stress test
Signed-off-by: Marcela Melara <[email protected]>
1 parent 9638c25 commit fe16bb3

File tree

8 files changed

+341
-3
lines changed

8 files changed

+341
-3
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ script:
2727
# - gipsy/scheme
2828
- PDO_INTERPRETER=gipsy make -C docker test
2929
# - wawaka/wasm
30-
- PDO_INTERPRETER=wawaka make -C docker test # replace with test once integration tests also work with wawaka
30+
- PDO_INTERPRETER=wawaka WASM_MODE=INTERP make -C docker test
31+
- PDO_INTERPRETER=wawaka WASM_MODE=INTERP_OPT make -C docker test

build/tests/wawaka/memory-test.json

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
[
2+
{
3+
"description" : "deep recursion test {KeywordParameters}",
4+
"MethodName": "deep_recursion_test",
5+
"KeywordParameters": {
6+
"levels" : 1000
7+
},
8+
"expected":"1000"
9+
},
10+
{
11+
"description" : "deep recursion test {KeywordParameters}",
12+
"MethodName": "deep_recursion_test",
13+
"KeywordParameters": {
14+
"levels" : 10000
15+
},
16+
"expected":"10000"
17+
},
18+
{
19+
"description" : "deep recursion test {KeywordParameters}",
20+
"MethodName": "deep_recursion_test",
21+
"KeywordParameters": {
22+
"levels" : 15000
23+
},
24+
"expected":"15000"
25+
},
26+
{
27+
"description" : "deep recursion test {KeywordParameters}",
28+
"MethodName": "deep_recursion_test",
29+
"KeywordParameters": {
30+
"levels" : 20000
31+
},
32+
"expected":"20000"
33+
},
34+
{
35+
"description" : "deep recursion test {KeywordParameters}",
36+
"MethodName": "deep_recursion_test",
37+
"KeywordParameters": {
38+
"levels" : 50000
39+
},
40+
"expected":"50000"
41+
},
42+
{
43+
"description" : "deep recursion test {KeywordParameters}",
44+
"MethodName": "deep_recursion_test",
45+
"KeywordParameters": {
46+
"levels" : 100000
47+
},
48+
"expected":"100000"
49+
},
50+
{
51+
"description" : "deep recursion test 2^31 levels",
52+
"MethodName": "deep_recursion_test",
53+
"KeywordParameters": { "levels" : 2147483647 },
54+
"expected":"2147483647"
55+
},
56+
{
57+
"description" : "deep recursion test 2^32 levels should {invert}",
58+
"MethodName": "deep_recursion_test",
59+
"KeywordParameters": { "levels" : 2147483648 },
60+
"invert": "fail",
61+
"expected": "method evaluation failed"
62+
},
63+
{
64+
"description" : "deep recursion test 10G levels should {invert}",
65+
"MethodName": "deep_recursion_test",
66+
"KeywordParameters": { "levels" : 10000000000 },
67+
"invert": "fail",
68+
"expected": "method evaluation failed"
69+
},
70+
{
71+
"description" : "deep recursion test {KeywordParameters}",
72+
"MethodName": "deep_recursion_test",
73+
"KeywordParameters": {
74+
"levels" : 1000
75+
},
76+
"expected":"1000"
77+
},
78+
{
79+
"description" : "big value test {KeywordParameters}",
80+
"MethodName": "big_value_test",
81+
"KeywordParameters": {
82+
"num_chars" : 2000
83+
},
84+
"expected": "2000"
85+
},
86+
{
87+
"description" : "big value test {KeywordParameters}",
88+
"MethodName": "big_value_test",
89+
"KeywordParameters": {
90+
"num_chars" : 4000
91+
},
92+
"expected": "4000"
93+
},
94+
{
95+
"description" : "big value test {KeywordParameters}",
96+
"MethodName": "big_value_test",
97+
"KeywordParameters": {
98+
"num_chars" : 8000
99+
},
100+
"expected": "8000"
101+
},
102+
{
103+
"description" : "big value test {KeywordParameters}",
104+
"MethodName": "big_value_test",
105+
"KeywordParameters": {
106+
"num_chars" : 16000
107+
},
108+
"expected": "16000"
109+
},
110+
{
111+
"description" : "big value test 64 KB should {invert} with \"out of memory\" exception",
112+
"MethodName": "big_value_test",
113+
"KeywordParameters": {
114+
"num_chars" : 64000
115+
},
116+
"invert": "fail",
117+
"expected": "internal pdo error"
118+
},
119+
{
120+
"description" : "deep recursion test {KeywordParameters}",
121+
"MethodName": "deep_recursion_test",
122+
"KeywordParameters": {
123+
"levels" : 1000
124+
},
125+
"expected":"1000"
126+
},
127+
{
128+
"description" : "big key test {KeywordParameters}",
129+
"MethodName": "big_key_test",
130+
"KeywordParameters": {
131+
"num_chars" : 2000
132+
},
133+
"expected": "2000"
134+
},
135+
{
136+
"description" : "big key test {KeywordParameters}",
137+
"MethodName": "big_key_test",
138+
"KeywordParameters": {
139+
"num_chars" : 4000
140+
},
141+
"expected": "4000"
142+
},
143+
{
144+
"description" : "big key test 32 KB should {invert} with \"out of memory\" exception",
145+
"MethodName": "big_key_test",
146+
"KeywordParameters": {
147+
"num_chars" : 32000
148+
},
149+
"invert": "fail",
150+
"expected": "internal pdo error"
151+
},
152+
{
153+
"description" : "big key test 64 KB should {invert} with \"out of memory\" exception",
154+
"MethodName": "big_key_test",
155+
"KeywordParameters": {
156+
"num_chars" : 64000
157+
},
158+
"invert": "fail",
159+
"expected": "internal pdo error"
160+
},
161+
{
162+
"description" : "deep recursion test {KeywordParameters}",
163+
"MethodName": "deep_recursion_test",
164+
"KeywordParameters": {
165+
"levels" : 1000
166+
},
167+
"expected":"1000"
168+
},
169+
{
170+
"description" : "many keys test 1K",
171+
"MethodName": "many_keys_test",
172+
"KeywordParameters": {
173+
"num_keys" : 1000
174+
},
175+
"expected": "1000"
176+
},
177+
{
178+
"description" : "many keys test 2K",
179+
"MethodName": "many_keys_test",
180+
"KeywordParameters": {
181+
"num_keys" : 2000
182+
},
183+
"expected": "2000"
184+
},
185+
{
186+
"description" : "many keys test 4K",
187+
"MethodName": "many_keys_test",
188+
"KeywordParameters": {
189+
"num_keys" : 4000
190+
},
191+
"expected": "4000"
192+
},
193+
{
194+
"description" : "deep recursion test {KeywordParameters}",
195+
"MethodName": "deep_recursion_test",
196+
"KeywordParameters": {
197+
"levels" : 1000
198+
},
199+
"expected":"1000"
200+
},
201+
{
202+
"description" : "many KV pairs test 100 * 100",
203+
"MethodName": "many_kv_pairs_test",
204+
"KeywordParameters": {
205+
"num_keys" : 100,
206+
"num_chars" : 100
207+
},
208+
"expected": "10000"
209+
},
210+
{
211+
"description" : "many KV pairs test 64 * 1K",
212+
"MethodName": "many_kv_pairs_test",
213+
"KeywordParameters": {
214+
"num_keys" : 64,
215+
"num_chars" : 1000
216+
},
217+
"expected": "64000"
218+
},
219+
{
220+
"description" : "many KV pairs test 100 * 1K",
221+
"MethodName": "many_kv_pairs_test",
222+
"KeywordParameters": {
223+
"num_keys" : 100,
224+
"num_chars" : 1000
225+
},
226+
"expected": "100000"
227+
},
228+
{
229+
"description" : "deep recursion test {KeywordParameters}",
230+
"MethodName": "deep_recursion_test",
231+
"KeywordParameters": {
232+
"levels" : 1000
233+
},
234+
"expected":"1000"
235+
}
236+
]
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
[
2+
{
3+
"description" : "big key test 8 KB",
4+
"MethodName": "big_key_test",
5+
"KeywordParameters": {
6+
"num_chars" : 8000
7+
},
8+
"expected": "8000"
9+
},
10+
{
11+
"description" : "big key test 16 KB",
12+
"MethodName": "big_key_test",
13+
"KeywordParameters": {
14+
"num_chars" : 16000
15+
},
16+
"expected": "16000"
17+
},
18+
{
19+
"description" : "many keys test 8K",
20+
"MethodName": "many_keys_test",
21+
"KeywordParameters": {
22+
"num_keys" : 8000
23+
},
24+
"expected": "8000"
25+
},
26+
{
27+
"description" : "many keys test 16K",
28+
"MethodName": "many_keys_test",
29+
"KeywordParameters": {
30+
"num_keys" : 16000
31+
},
32+
"expected": "16000"
33+
},
34+
{
35+
"description" : "many keys test 32K",
36+
"MethodName": "many_keys_test",
37+
"KeywordParameters": {
38+
"num_keys" : 32000
39+
},
40+
"expected": "32000"
41+
},
42+
{
43+
"description" : "many keys test 64K",
44+
"MethodName": "many_keys_test",
45+
"KeywordParameters": {
46+
"num_keys" : 64000
47+
},
48+
"expected": "64000"
49+
},
50+
{
51+
"description" : "many KV pairs test 1K * 1K",
52+
"MethodName": "many_kv_pairs_test",
53+
"KeywordParameters": {
54+
"num_keys" : 1000,
55+
"num_chars" : 1000
56+
},
57+
"expected": "1000000"
58+
}
59+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"description" : "FIXME: big value test 32 KB causes stack corruption in INTERP mode",
4+
"MethodName": "big_value_test",
5+
"KeywordParameters": {
6+
"num_chars" : 32000
7+
},
8+
"expected": "32000"
9+
}
10+
]

contracts/wawaka/memory-test/memory-test.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,38 @@ bool big_value_test(const Message& msg, const Environment& env, Response& rsp)
104104
return rsp.value(v, true);
105105
}
106106

107+
// -----------------------------------------------------------------
108+
// NAME: many_kv_pair_test
109+
// -----------------------------------------------------------------
110+
bool many_kv_pairs_test(const Message& msg, const Environment& env, Response& rsp)
111+
{
112+
int num_chars((int)msg.get_number("num_chars"));
113+
int num_keys((int)msg.get_number("num_keys"));
114+
115+
int i = 0;
116+
StringArray value(num_chars);
117+
for (i = 0; i < num_chars; i++) {
118+
value.set((char)*default_val.value_, i);
119+
}
120+
121+
for (i = 0; i < num_keys; i++) {
122+
StringArray key(12);
123+
sprintf((char *)key.value_, "%d", i);
124+
if (!meta_store.set(key, value))
125+
return rsp.error("failed to store value");
126+
}
127+
128+
ww::value::Number v((double)(i*value.size()));
129+
return rsp.value(v, true);
130+
}
131+
107132
static int simple_recursive_function(int n) {
108133
if (n > 0) {
109134
return simple_recursive_function(n-1) + 1;
110135
}
111136
return 0;
112137
}
113138

114-
115139
bool deep_recursion_test(const Message& msg, const Environment& env, Response& rsp) {
116140

117141
int levels((int)msg.get_number("levels"));
@@ -129,6 +153,7 @@ contract_method_reference_t contract_method_dispatch_table[] = {
129153
CONTRACT_METHOD(many_keys_test),
130154
CONTRACT_METHOD(big_key_test),
131155
CONTRACT_METHOD(big_value_test),
156+
CONTRACT_METHOD(many_kv_pairs_test),
132157
CONTRACT_METHOD(deep_recursion_test),
133158
{ NULL, NULL }
134159
};

contracts/wawaka/memory-test/test-short.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@
66
{ "MethodName" : "big_value_test", "KeywordParameters": { "num_chars" : 5 }, "expected": "5" },
77
{ "MethodName" : "big_value_test", "KeywordParameters": { "num_chars" : 500 }, "expected": "500" },
88
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 5 }, "expected": "5" },
9-
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 500 }, "expected": "500" }
9+
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 500 }, "expected": "500" },
10+
{ "MethodName" : "many_kv_pairs_test", "KeywordParameters": { "num_keys" : 5, "num_chars" : 100 }, "expected": "500" },
11+
{ "MethodName" : "many_kv_pairs_test", "KeywordParameters": { "num_keys" : 500, "num_chars" : 100 }, "expected": "50000" }
1012
]

docker/Dockerfile.pdo-build

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
# - pdo repo branch to use: PDO_REPO_BRANCH (default: master)
2626
# - build in debug mode: PDO_DEBUG_BUILD (default: 0)
2727
# - contract interpreter (gipsy or wawaka): PDO_INTERPRETER (default: gipsy)
28+
# - Wawaka runtime mode: WASM_MODE (default: INTERP)
2829
# - wamr version: WAMR (default: WAMR-03-30-2020)
2930

3031
# Build:
@@ -102,6 +103,9 @@ ENV PDO_DEBUG_BUILD=${PDO_DEBUG_BUILD}
102103
ARG PDO_INTERPRETER=gipsy
103104
ENV PDO_INTERPRETER=${PDO_INTERPRETER}
104105

106+
ARG WASM_MODE=INTERP
107+
ENV WASM_MODE=${WASM_MODE}
108+
105109
# - web-assembly/wasm/wawaka
106110
# - Configure WAMR source
107111
ARG WAMR=WAMR-03-30-2020

docker/sawtooth-pdo.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ services:
5555
PDO_REPO_BRANCH: ${PDO_REPO_BRANCH:-master}
5656
SGX_MODE: SIM
5757
PDO_INTERPRETER: ${PDO_INTERPRETER:-gipsy}
58+
WASM_MODE: ${WASM_MODE:-INTERP}
5859
container_name: sawtooth-pdo-sim-build
5960
hostname: sawtooth-pdo-build
6061
depends_on:

0 commit comments

Comments
 (0)