From fab4ea622e59627a0571ba4b546e32cd979b5982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 30 Jun 2021 20:57:06 +0200 Subject: [PATCH] Add test for hitting max open files --- tests/{10_basic.tst => 10_mount_dmg.tst} | 0 tests/20_basic_read.tst | 25 +++++++++++ tests/30_noreadbuf.tst | 22 ---------- tests/{20_mount.tst => 30_zerocopy_read.tst} | 13 +++--- tests/testhelpers.sh | 46 +++++++++++++++++++- 5 files changed, 77 insertions(+), 29 deletions(-) rename tests/{10_basic.tst => 10_mount_dmg.tst} (100%) create mode 100644 tests/20_basic_read.tst delete mode 100644 tests/30_noreadbuf.tst rename tests/{20_mount.tst => 30_zerocopy_read.tst} (61%) diff --git a/tests/10_basic.tst b/tests/10_mount_dmg.tst similarity index 100% rename from tests/10_basic.tst rename to tests/10_mount_dmg.tst diff --git a/tests/20_basic_read.tst b/tests/20_basic_read.tst new file mode 100644 index 0000000..3b02bc4 --- /dev/null +++ b/tests/20_basic_read.tst @@ -0,0 +1,25 @@ +#!/usr/bin/env testrunner.sh + +source "$(dirname "$0")/testhelpers.sh" + +mount_options="-o noreadbuf" + +function setup() { + read -r mount_dir dmg_file < <(mount_sparsebundle $mount_options) +} + +function test_dmg_has_correct_number_of_blocks() { + _test_dmg_has_correct_number_of_blocks +} + +function test_dmg_contents_is_same_as_testdata() { + _test_dmg_contents_is_same_as_testdata +} + +function test_can_handle_ulimit() { + _test_can_handle_ulimit +} + +function teardown() { + umount $mount_dir && rm -Rf $mount_dir +} diff --git a/tests/30_noreadbuf.tst b/tests/30_noreadbuf.tst deleted file mode 100644 index bb8ef5b..0000000 --- a/tests/30_noreadbuf.tst +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env testrunner.sh - -source "$(dirname "$0")/testhelpers.sh" - -function setup() { - read -r mount_dir dmg_file < <(mount_sparsebundle -o noreadbuf) -} - -function test_dmg_has_correct_number_of_blocks() { - hfsdump $dmg_file | grep "total_blocks: 268435456" -} - -function test_dmg_contents_is_same_as_testdata() { - for f in $(ls $HFSFUSE_DIR/src); do - echo "Diffing $HFSFUSE_DIR/src/$f" - diff $HFSFUSE_DIR/src/$f <(hfsdump $dmg_file read "/src/$f") - done -} - -function teardown() { - umount $mount_dir && rm -Rf $mount_dir -} \ No newline at end of file diff --git a/tests/20_mount.tst b/tests/30_zerocopy_read.tst similarity index 61% rename from tests/20_mount.tst rename to tests/30_zerocopy_read.tst index 3c9b349..aa82fba 100644 --- a/tests/20_mount.tst +++ b/tests/30_zerocopy_read.tst @@ -7,16 +7,17 @@ function setup() { } function test_dmg_has_correct_number_of_blocks() { - hfsdump $dmg_file | grep "total_blocks: 268435456" + _test_dmg_has_correct_number_of_blocks } function test_dmg_contents_is_same_as_testdata() { - for f in $(ls $HFSFUSE_DIR/src); do - echo "Diffing $HFSFUSE_DIR/src/$f" - diff $HFSFUSE_DIR/src/$f <(hfsdump $dmg_file read "/src/$f") - done + _test_dmg_contents_is_same_as_testdata +} + +function test_can_handle_ulimit() { + _test_can_handle_ulimit } function teardown() { umount $mount_dir && rm -Rf $mount_dir -} +} \ No newline at end of file diff --git a/tests/testhelpers.sh b/tests/testhelpers.sh index a2363ab..80afc31 100644 --- a/tests/testhelpers.sh +++ b/tests/testhelpers.sh @@ -1,9 +1,16 @@ +sparsebundlefs_ulimit= + function mount_sparsebundle() { test ! -z "$TEST_BUNDLE" local mount_dir=$(mktemp -d) local dmg_file="$mount_dir/sparsebundle.dmg" - sparsebundlefs -s -f -D $* $TEST_BUNDLE $mount_dir & + ( + if [[ ! -z "${sparsebundlefs_ulimit}" ]]; then + ulimit -n $sparsebundlefs_ulimit + fi + sparsebundlefs -s -f -D $* $TEST_BUNDLE $mount_dir + ) & local pid=$! for i in {0..50}; do kill -0 $pid >/dev/null 2>&1 @@ -12,3 +19,40 @@ function mount_sparsebundle() { echo $mount_dir "$mount_dir/sparsebundle.dmg" } + +function _test_dmg_has_correct_number_of_blocks() { + hfsdump $dmg_file | grep "total_blocks: 268435456" +} + +function _test_dmg_contents_is_same_as_testdata() { + for f in $(ls $HFSFUSE_DIR/src); do + echo "Diffing $HFSFUSE_DIR/src/$f" + diff $HFSFUSE_DIR/src/$f <(hfsdump $dmg_file read "/src/$f") + done +} + +function _test_can_handle_ulimit() { + local mount_dir + local dmg_file + + + sparsebundlefs_ulimit=12 + read -r mount_dir dmg_file < <(mount_sparsebundle $mount_options) + sparsebundlefs_ulimit= + + hfs_dir=$(mktemp -d) + hfsfuse -f $dmg_file $hfs_dir & + local hfs_pid=$! + for i in {0..50}; do + kill -0 $hfs_pid >/dev/null 2>&1 + test -f $hfs_dir/Makefile && break || sleep 0.1 + done + + for f in $(find $hfs_dir -type f); do + echo "Reading $f" + cat $f > /dev/null + done + + umount $hfs_dir && rm -Rf $hfs_dir + umount $mount_dir && rm -Rf $mount_dir +}