#!/bin/bash set -euo pipefail # A harness that runs SQLite with the parquet extension in an environment where malloc randomly # fails. "Success" is if the logs don't have any C++ exceptions that talk about std::bad_alloc ensure_failmalloc() { if [ ! -d libfailmalloc ]; then git clone https://github.com/cldellow/libfailmalloc.git fi if [ ! -e libfailmalloc/.libs/libfailmalloc.so ]; then cd libfailmalloc ./configure make fi } run_under_low_memory() { start=$(date +%s%3N) set +e env LD_PRELOAD="$here"/libfailmalloc/.libs/libfailmalloc.so FAILMALLOC_PROBABILITY=0.00001 ./test-random &> results.bad_alloc set -e now=$(date +%s%3N) echo "Bailed after $((now-start)) ms" ! grep std::bad_alloc results.bad_alloc } main() { here=$(dirname "${BASH_SOURCE[0]}") here=$(readlink -f "$here") cd "$here" ensure_failmalloc # Sometimes we'll exit due to a Python memory issue, so try a few times. for i in {0..10}; do run_under_low_memory done } main "$@"