diff options
author | Lars Wirzenius <liw@liw.fi> | 2012-02-27 05:06:05 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2012-02-27 05:06:05 +0000 |
commit | 0ebf14422651e5d7460de5747516a280f647c6ea (patch) | |
tree | 19a02843895224b458206435984f17cbf7713fb6 | |
parent | 833f0196e94c74afff34433a2734d39521e2f3da (diff) | |
download | obnam-0ebf14422651e5d7460de5747516a280f647c6ea.tar.gz |
Add test tools for testing individual lock files
-rwxr-xr-x | lock-and-increment | 41 | ||||
-rwxr-xr-x | test-lock-files | 59 |
2 files changed, 100 insertions, 0 deletions
diff --git a/lock-and-increment b/lock-and-increment new file mode 100755 index 00000000..d7b945c1 --- /dev/null +++ b/lock-and-increment @@ -0,0 +1,41 @@ +#!/usr/bin/python +# Copyright 2012 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +import os +import sys + +import obnamlib + + +dirname = sys.argv[1] +count_to = int(sys.argv[2]) +filename = os.path.join(dirname, 'counter') + +fs = obnamlib.LocalFS('/') +lm = obnamlib.LockManager(fs, 60) + +for i in range(count_to): + lm.lock([dirname]) + if fs.exists(filename): + data = fs.cat(filename) + counter = int(data) + counter += 1 + fs.overwrite_file(filename, str(counter)) + else: + fs.write_file(filename, str(1)) + lm.unlock([dirname]) + diff --git a/test-lock-files b/test-lock-files new file mode 100755 index 00000000..7358181c --- /dev/null +++ b/test-lock-files @@ -0,0 +1,59 @@ +#!/bin/sh +# +# Obnam test: test lock files. +# +# Copyright 2012 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +die() +{ + echo "$@" 1>&2 + exit 1 +} + +[ "$#" = 2 ] || die "Bad usage, read source!" + +NCLIENTS="$1" +COUNTER="$2" +directory="$(mktemp -d)" +pids="$(mktemp)" + +for i in $(seq "$NCLIENTS") +do + ./lock-and-increment "$directory" "$COUNTER" & + echo "$!" >> "$pids" +done + +errors=0 +for pid in $(cat "$pids") +do + if ! wait "$pid" + then + echo "at least one client failed" 1>&2 + errors=1 + fi +done + +n=$(cat "$directory/counter") +wanted=$(expr "$COUNTER" '*' "$NCLIENTS") +if [ "$n" != "$wanted" ] +then + echo "counted to $n should be $wanted" 1>&2 + errors=1 +fi + +rm -rf "$directory" "$pids" +exit $errors + |