This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Neels Hofmeyr gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/3939 add jenkins-make-check-and-run.sh, fix lock_test fix util.py/FileLock and lock_test Do not pass os.O_TRUNC to open(), that immediately empties out the lock file. Fix lock_test to be able to catch this error. So far things were happening too fast to notice it. Caught by running 'make check' on a main unit APU that has different timing behavior. Change-Id: Iefc7fd5207c926fdeb3282d9d5b4708f1b56d20c --- A contrib/jenkins-make-check-and-run.sh M selftest/lock_test.ok M selftest/lock_test.sh M selftest/lock_test_help.py M src/osmo_gsm_tester/util.py 5 files changed, 56 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/39/3939/1 diff --git a/contrib/jenkins-make-check-and-run.sh b/contrib/jenkins-make-check-and-run.sh new file mode 100755 index 0000000..3017fd4 --- /dev/null +++ b/contrib/jenkins-make-check-and-run.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -e -x +base="$PWD" + +run_script="osmo-gsm-tester/contrib/jenkins-run.sh" +test -x "$run_script" + +cd osmo-gsm-tester +make deps +make check +cd "$base" + +PATH="$base/osmo-gsm-tester/src:$PATH" \ + "$run_script" diff --git a/selftest/lock_test.ok b/selftest/lock_test.ok index 604767b..011a89c 100644 --- a/selftest/lock_test.ok +++ b/selftest/lock_test.ok @@ -1,4 +1,14 @@ +creating files +launch a program that locks a given file, it will create $dir/lock_test +wait until this lock_test lock file was created by program +expecting the lock file to reflect "long name" launched first, locked by: 'long name' +launching second program, should find the lock intact and wait launched second, locked by: 'long name' +drop the first lock, $f1 removal signals the first process to stop locking +wait for first program to carry out the lock release +now expecting second program to lock waited, locked by: 'shorter' +release the second program also +expecting the lock to be gone waited more, locked by: '' diff --git a/selftest/lock_test.sh b/selftest/lock_test.sh index 049c4d9..4f3f7ad 100755 --- a/selftest/lock_test.sh +++ b/selftest/lock_test.sh @@ -1,4 +1,6 @@ #!/bin/sh + +echo 'creating files' dir="$(mktemp -d)" n1="long name" f1="$dir/$n1" @@ -7,21 +9,45 @@ f2="$dir/$n2" touch "$f2" sync + +echo 'launch a program that locks a given file, it will create $dir/lock_test' python3 ./lock_test_help.py "$dir" "$n1" & + +echo 'wait until this lock_test lock file was created by program' while [ ! -f "$dir/lock_test" ]; do sleep .1 done +sync + +echo 'expecting the lock file to reflect "long name"' echo "launched first, locked by: '$(cat "$dir/lock_test")'" + +echo 'launching second program, should find the lock intact and wait' python3 ./lock_test_help.py "$dir" "$n2" & +while [ ! -f "$f2.ready" ]; do + sleep .1 +done +sleep 1 +sync echo "launched second, locked by: '$(cat "$dir/lock_test")'" + +echo 'drop the first lock, $f1 removal signals the first process to stop locking' rm "$f1" + +echo 'wait for first program to carry out the lock release' while [ ! -f "$f1.done" ]; do sleep .1 done + +echo 'now expecting second program to lock' echo "waited, locked by: '$(cat "$dir/lock_test")'" + +echo 'release the second program also' rm "$f2" while [ ! -f "$f2.done" ]; do sleep .1 done + +echo 'expecting the lock to be gone' echo "waited more, locked by: '$(cat "$dir/lock_test")'" rm -rf "$dir" diff --git a/selftest/lock_test_help.py b/selftest/lock_test_help.py index bdf7c64..f4e1f9b 100644 --- a/selftest/lock_test_help.py +++ b/selftest/lock_test_help.py @@ -8,11 +8,15 @@ testdir, name = sys.argv[1:] stop_signalling_file = os.path.join(testdir, name) -assert os.path.isfile(stop_signalling_file) +if not os.path.isfile(stop_signalling_file): + print('expected a stop-file %r' % stop_signalling_file) + exit(1) lockfile_path = os.path.join(testdir, 'lock_test') fl = FileLock(lockfile_path, name) +touch_file(stop_signalling_file + '.ready') + with fl: while os.path.exists(stop_signalling_file): time.sleep(.1) diff --git a/src/osmo_gsm_tester/util.py b/src/osmo_gsm_tester/util.py index af6a2f0..197dc97 100644 --- a/src/osmo_gsm_tester/util.py +++ b/src/osmo_gsm_tester/util.py @@ -101,7 +101,7 @@ def __enter__(self): if self.f is not None: return - self.fd = os.open(self.path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC) + self.fd = os.open(self.path, os.O_CREAT | os.O_WRONLY) fcntl.flock(self.fd, fcntl.LOCK_EX) os.truncate(self.fd, 0) os.write(self.fd, str(self.owner).encode('utf-8')) -- To view, visit https://gerrit.osmocom.org/3939 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iefc7fd5207c926fdeb3282d9d5b4708f1b56d20c Gerrit-PatchSet: 1 Gerrit-Project: osmo-gsm-tester Gerrit-Branch: master Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>