8 top="$(WVPASS pwd)" || exit $?
9 tmpdir="$(WVPASS wvmktempdir)" || exit $?
10 export BUP_DIR="$tmpdir/bup"
12 bup() { "$top/bup" "$@"; }
14 # Inject code to coordinate test
16 WVPASS rm -rf "$tmpdir/mod"
17 WVPASS mkdir -p "$tmpdir/mod"
18 cat > "$tmpdir/mod/pause_file_save.py" << EOF
23 def test_save_data_race_pause_save(name):
24 if name == b'$tmpdir/save/data':
25 with open('$tmpdir/waiting-to-save', 'w') as f:
27 while os.path.exists('$tmpdir/block-save'):
30 bup.cmd.save.before_saving_regular_file = test_save_data_race_pause_save
36 PYTHONPATH="$tmpdir/mod" bup --import-py-module pause_file_save "$@"
41 WVPASS mkdir "$tmpdir/save"
42 WVPASS echo "some random file content" > "$tmpdir/save/data"
43 WVPASS bup index "$tmpdir/save"
44 WVPASS touch "$tmpdir/block-save"
48 while ! test -e "$tmpdir/waiting-to-save"; do
49 "$top/dev/python" -c 'import time; time.sleep(0.01)'
51 echo 'truncated' > "$tmpdir/save/data"
52 rm "$tmpdir/block-save"
55 trap "kill $truncator" EXIT
57 WVPASS instrumented-bup save -n test "$tmpdir/save"
59 meta_size=$(WVPASS bup ls -nl "test/latest/$tmpdir/save/data" |
60 sed 's/[^ ]* [^ ]* *\([^ ]*\).*/\1/')
61 data_size=$(git -C "$BUP_DIR" show $(WVPASS bup ls -ls "test/latest/$tmpdir/save/data" |
62 sed 's/ .*//') | wc -c)
63 WVPASSEQ 10 $meta_size
64 WVPASSEQ 10 $data_size
66 WVPASS rm -rf "$tmpdir"