Skip to content

Commit

Permalink
Add wawaka memory stress test
Browse files Browse the repository at this point in the history
Signed-off-by: Marcela Melara <[email protected]>
  • Loading branch information
marcelamelara authored and cmickeyb committed Apr 7, 2020
1 parent 9638c25 commit fe16bb3
Show file tree
Hide file tree
Showing 8 changed files with 341 additions and 3 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ script:
# - gipsy/scheme
- PDO_INTERPRETER=gipsy make -C docker test
# - wawaka/wasm
- PDO_INTERPRETER=wawaka make -C docker test # replace with test once integration tests also work with wawaka
- PDO_INTERPRETER=wawaka WASM_MODE=INTERP make -C docker test
- PDO_INTERPRETER=wawaka WASM_MODE=INTERP_OPT make -C docker test
236 changes: 236 additions & 0 deletions build/tests/wawaka/memory-test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
[
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 10000
},
"expected":"10000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 15000
},
"expected":"15000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 20000
},
"expected":"20000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 50000
},
"expected":"50000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 100000
},
"expected":"100000"
},
{
"description" : "deep recursion test 2^31 levels",
"MethodName": "deep_recursion_test",
"KeywordParameters": { "levels" : 2147483647 },
"expected":"2147483647"
},
{
"description" : "deep recursion test 2^32 levels should {invert}",
"MethodName": "deep_recursion_test",
"KeywordParameters": { "levels" : 2147483648 },
"invert": "fail",
"expected": "method evaluation failed"
},
{
"description" : "deep recursion test 10G levels should {invert}",
"MethodName": "deep_recursion_test",
"KeywordParameters": { "levels" : 10000000000 },
"invert": "fail",
"expected": "method evaluation failed"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
},
{
"description" : "big value test {KeywordParameters}",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 2000
},
"expected": "2000"
},
{
"description" : "big value test {KeywordParameters}",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 4000
},
"expected": "4000"
},
{
"description" : "big value test {KeywordParameters}",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 8000
},
"expected": "8000"
},
{
"description" : "big value test {KeywordParameters}",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 16000
},
"expected": "16000"
},
{
"description" : "big value test 64 KB should {invert} with \"out of memory\" exception",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 64000
},
"invert": "fail",
"expected": "internal pdo error"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
},
{
"description" : "big key test {KeywordParameters}",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 2000
},
"expected": "2000"
},
{
"description" : "big key test {KeywordParameters}",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 4000
},
"expected": "4000"
},
{
"description" : "big key test 32 KB should {invert} with \"out of memory\" exception",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 32000
},
"invert": "fail",
"expected": "internal pdo error"
},
{
"description" : "big key test 64 KB should {invert} with \"out of memory\" exception",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 64000
},
"invert": "fail",
"expected": "internal pdo error"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
},
{
"description" : "many keys test 1K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 1000
},
"expected": "1000"
},
{
"description" : "many keys test 2K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 2000
},
"expected": "2000"
},
{
"description" : "many keys test 4K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 4000
},
"expected": "4000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
},
{
"description" : "many KV pairs test 100 * 100",
"MethodName": "many_kv_pairs_test",
"KeywordParameters": {
"num_keys" : 100,
"num_chars" : 100
},
"expected": "10000"
},
{
"description" : "many KV pairs test 64 * 1K",
"MethodName": "many_kv_pairs_test",
"KeywordParameters": {
"num_keys" : 64,
"num_chars" : 1000
},
"expected": "64000"
},
{
"description" : "many KV pairs test 100 * 1K",
"MethodName": "many_kv_pairs_test",
"KeywordParameters": {
"num_keys" : 100,
"num_chars" : 1000
},
"expected": "100000"
},
{
"description" : "deep recursion test {KeywordParameters}",
"MethodName": "deep_recursion_test",
"KeywordParameters": {
"levels" : 1000
},
"expected":"1000"
}
]
59 changes: 59 additions & 0 deletions contracts/wawaka/memory-test/fast-interp-memory-test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
[
{
"description" : "big key test 8 KB",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 8000
},
"expected": "8000"
},
{
"description" : "big key test 16 KB",
"MethodName": "big_key_test",
"KeywordParameters": {
"num_chars" : 16000
},
"expected": "16000"
},
{
"description" : "many keys test 8K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 8000
},
"expected": "8000"
},
{
"description" : "many keys test 16K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 16000
},
"expected": "16000"
},
{
"description" : "many keys test 32K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 32000
},
"expected": "32000"
},
{
"description" : "many keys test 64K",
"MethodName": "many_keys_test",
"KeywordParameters": {
"num_keys" : 64000
},
"expected": "64000"
},
{
"description" : "many KV pairs test 1K * 1K",
"MethodName": "many_kv_pairs_test",
"KeywordParameters": {
"num_keys" : 1000,
"num_chars" : 1000
},
"expected": "1000000"
}
]
10 changes: 10 additions & 0 deletions contracts/wawaka/memory-test/interp-stack-corruption.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[
{
"description" : "FIXME: big value test 32 KB causes stack corruption in INTERP mode",
"MethodName": "big_value_test",
"KeywordParameters": {
"num_chars" : 32000
},
"expected": "32000"
}
]
27 changes: 26 additions & 1 deletion contracts/wawaka/memory-test/memory-test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,38 @@ bool big_value_test(const Message& msg, const Environment& env, Response& rsp)
return rsp.value(v, true);
}

// -----------------------------------------------------------------
// NAME: many_kv_pair_test
// -----------------------------------------------------------------
bool many_kv_pairs_test(const Message& msg, const Environment& env, Response& rsp)
{
int num_chars((int)msg.get_number("num_chars"));
int num_keys((int)msg.get_number("num_keys"));

int i = 0;
StringArray value(num_chars);
for (i = 0; i < num_chars; i++) {
value.set((char)*default_val.value_, i);
}

for (i = 0; i < num_keys; i++) {
StringArray key(12);
sprintf((char *)key.value_, "%d", i);
if (!meta_store.set(key, value))
return rsp.error("failed to store value");
}

ww::value::Number v((double)(i*value.size()));
return rsp.value(v, true);
}

static int simple_recursive_function(int n) {
if (n > 0) {
return simple_recursive_function(n-1) + 1;
}
return 0;
}


bool deep_recursion_test(const Message& msg, const Environment& env, Response& rsp) {

int levels((int)msg.get_number("levels"));
Expand All @@ -129,6 +153,7 @@ contract_method_reference_t contract_method_dispatch_table[] = {
CONTRACT_METHOD(many_keys_test),
CONTRACT_METHOD(big_key_test),
CONTRACT_METHOD(big_value_test),
CONTRACT_METHOD(many_kv_pairs_test),
CONTRACT_METHOD(deep_recursion_test),
{ NULL, NULL }
};
4 changes: 3 additions & 1 deletion contracts/wawaka/memory-test/test-short.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
{ "MethodName" : "big_value_test", "KeywordParameters": { "num_chars" : 5 }, "expected": "5" },
{ "MethodName" : "big_value_test", "KeywordParameters": { "num_chars" : 500 }, "expected": "500" },
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 5 }, "expected": "5" },
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 500 }, "expected": "500" }
{ "MethodName" : "deep_recursion_test", "KeywordParameters": { "levels" : 500 }, "expected": "500" },
{ "MethodName" : "many_kv_pairs_test", "KeywordParameters": { "num_keys" : 5, "num_chars" : 100 }, "expected": "500" },
{ "MethodName" : "many_kv_pairs_test", "KeywordParameters": { "num_keys" : 500, "num_chars" : 100 }, "expected": "50000" }
]
4 changes: 4 additions & 0 deletions docker/Dockerfile.pdo-build
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
# - pdo repo branch to use: PDO_REPO_BRANCH (default: master)
# - build in debug mode: PDO_DEBUG_BUILD (default: 0)
# - contract interpreter (gipsy or wawaka): PDO_INTERPRETER (default: gipsy)
# - Wawaka runtime mode: WASM_MODE (default: INTERP)
# - wamr version: WAMR (default: WAMR-03-30-2020)

# Build:
Expand Down Expand Up @@ -102,6 +103,9 @@ ENV PDO_DEBUG_BUILD=${PDO_DEBUG_BUILD}
ARG PDO_INTERPRETER=gipsy
ENV PDO_INTERPRETER=${PDO_INTERPRETER}

ARG WASM_MODE=INTERP
ENV WASM_MODE=${WASM_MODE}

# - web-assembly/wasm/wawaka
# - Configure WAMR source
ARG WAMR=WAMR-03-30-2020
Expand Down
1 change: 1 addition & 0 deletions docker/sawtooth-pdo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ services:
PDO_REPO_BRANCH: ${PDO_REPO_BRANCH:-master}
SGX_MODE: SIM
PDO_INTERPRETER: ${PDO_INTERPRETER:-gipsy}
WASM_MODE: ${WASM_MODE:-INTERP}
container_name: sawtooth-pdo-sim-build
hostname: sawtooth-pdo-build
depends_on:
Expand Down

0 comments on commit fe16bb3

Please sign in to comment.