##// END OF EJS Templates
test-lock: use synchronisation file instead of sleep...
test-lock: use synchronisation file instead of sleep This will prevent the test to be flaky on load.

File last commit:

r52390:9da3fcc5 stable
r52390:9da3fcc5 stable
Show More
test-lock-badness.t
178 lines | 4.9 KiB | text/troff | Tads3Lexer
/ tests / test-lock-badness.t
Matt Mackall
tests: change some #ifs to #requires
r22047 #require unix-permissions no-root no-windows
Mads Kiilerich
localrepo: give a sigh of relief when getting lock after waiting for it...
r20380
Prepare
Adrian Buehlmann
tests: unify test-lock-badness
r12071 $ hg init a
$ echo a > a/a
$ hg -R a ci -A -m a
adding a
$ hg clone a b
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 Test that raising an exception in the release function doesn't cause the lock to choke
$ cat > testlock.py << EOF
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > from mercurial import error, registrar
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 >
> cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 >
> def acquiretestlock(repo, releaseexc):
> def unlock():
> if releaseexc:
Yuya Nishihara
py3: add some b'' to make test-lock-badness.t happy
r36661 > raise error.Abort(b'expected release exception')
> l = repo._lock(repo.vfs, b'testlock', False, unlock, None, b'test lock')
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 > return l
>
Pulkit Goyal
py3: make sure commands name are bytes in tests
r33097 > @command(b'testlockexc')
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 > def testlockexc(ui, repo):
> testlock = acquiretestlock(repo, True)
> try:
> testlock.release()
> finally:
> try:
> testlock = acquiretestlock(repo, False)
> except error.LockHeld:
Yuya Nishihara
py3: add some b'' to make test-lock-badness.t happy
r36661 > raise error.Abort(b'lockfile on disk even after releasing!')
Siddharth Agarwal
lock: while releasing, unlink lockfile even if the release function throws...
r23032 > testlock.release()
> EOF
$ cat >> $HGRCPATH << EOF
> [extensions]
> testlock=$TESTTMP/testlock.py
> EOF
$ hg -R b testlockexc
abort: expected release exception
[255]
Mads Kiilerich
localrepo: give a sigh of relief when getting lock after waiting for it...
r20380 One process waiting for another
test-lock: use synchronisation file instead of sleep...
r52390 $ SYNC_FILE_LOCKED="$TESTTMP/sync-file-locked"
$ export SYNC_FILE_LOCKED
$ SYNC_FILE_TRYING_LOCK="$TESTTMP/sync-file-trying-lock"
$ export SYNC_FILE_TRYING_LOCK
$ cat << EOF > locker.sh
> $RUNTESTDIR/testlib/wait-on-file 10 $SYNC_FILE_TRYING_LOCK $SYNC_FILE_LOCKED;
> EOF
$ cat << EOF > waiter.sh
> $RUNTESTDIR/testlib/wait-on-file 10 $SYNC_FILE_LOCKED;
Mads Kiilerich
localrepo: give a sigh of relief when getting lock after waiting for it...
r20380 > EOF
test-lock: use synchronisation file instead of sleep...
r52390 $ clean_sync() {
> rm -f "$SYNC_FILE_LOCKED"
> rm -f "$SYNC_FILE_TRYING_LOCK"
> }
$ clean_sync
Adrian Buehlmann
tests: unify test-lock-badness
r12071 $ echo b > b/b
test-lock: use synchronisation file instead of sleep...
r52390 $ hg -R b ci -A -m b \
> --config hooks.precommit="sh $TESTTMP/locker.sh" \
> > stdout &
$ hg -R b up -q \
> --config ui.timeout.warn=0 \
> --config hooks.pre-update="sh $TESTTMP/waiter.sh" \
> --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \
> > preup-stdout 2> preup-stderr
timeless
tests: test-lock-badness.t message could come later...
r29008 $ wait
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ cat preup-stdout
$ cat preup-stderr
Mark Ignacio
lock: show more detail for new-style locks in lock waiting message (issue4752)...
r29883 waiting for lock on working directory of b held by process '*' on host '*' (glob)
timeless
tests: test-lock-badness.t message could come later...
r29008 got lock after * seconds (glob)
Mads Kiilerich
localrepo: give a sigh of relief when getting lock after waiting for it...
r20380 $ cat stdout
Adrian Buehlmann
tests: unify test-lock-badness
r12071 adding b
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 On processs waiting on another, warning after a long time.
test-lock: use synchronisation file instead of sleep...
r52390 $ clean_sync
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ echo b > b/c
test-lock: use synchronisation file instead of sleep...
r52390 $ hg -R b ci -A -m b \
> --config hooks.precommit="sh $TESTTMP/locker.sh" \
> > stdout &
$ hg -R b up -q \
> --config hooks.pre-update="sh $TESTTMP/waiter.sh" \
> --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \
> --config ui.timeout.warn=250 \
> > preup-stdout 2> preup-stderr
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ wait
$ cat preup-stdout
$ cat preup-stderr
$ cat stdout
adding c
On processs waiting on another, warning disabled.
test-lock: use synchronisation file instead of sleep...
r52390 $ clean_sync
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ echo b > b/d
test-lock: use synchronisation file instead of sleep...
r52390 $ hg -R b ci -A -m b \
> --config hooks.precommit="sh $TESTTMP/locker.sh" \
> > stdout &
$ hg -R b up -q \
> --config hooks.pre-update="sh $TESTTMP/waiter.sh" \
> --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \
> --config ui.timeout.warn=-1 \
> > preup-stdout 2>preup-stderr
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ wait
$ cat preup-stdout
$ cat preup-stderr
$ cat stdout
adding d
check we still print debug output
On processs waiting on another, warning after a long time (debug output on)
test-lock: use synchronisation file instead of sleep...
r52390 $ clean_sync
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ echo b > b/e
test-lock: use synchronisation file instead of sleep...
r52390 $ hg -R b ci -A -m b \
> --config hooks.precommit="sh $TESTTMP/locker.sh" \
> > stdout &
$ hg -R b up \
> --config hooks.pre-update="sh $TESTTMP/waiter.sh" \
> --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \
> --config ui.timeout.warn=250 --debug \
> > preup-stdout 2>preup-stderr
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ wait
$ cat preup-stdout
test-lock: use synchronisation file instead of sleep...
r52390 running hook pre-update: sh $TESTTMP/waiter.sh
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 waiting for lock on working directory of b held by process '*' on host '*' (glob)
got lock after * seconds (glob)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat preup-stderr
$ cat stdout
adding e
On processs waiting on another, warning disabled, (debug output on)
test-lock: use synchronisation file instead of sleep...
r52390 $ clean_sync
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ echo b > b/f
test-lock: use synchronisation file instead of sleep...
r52390 $ hg -R b ci -A -m b \
> --config hooks.precommit="sh $TESTTMP/locker.sh" \
> > stdout &
$ hg -R b up \
> --config hooks.pre-update="sh $TESTTMP/waiter.sh" \
> --config devel.lock-wait-sync-file="$SYNC_FILE_TRYING_LOCK" \
> --config ui.timeout.warn=-1 --debug\
> > preup-stdout 2>preup-stderr
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 $ wait
$ cat preup-stdout
test-lock: use synchronisation file instead of sleep...
r52390 running hook pre-update: sh $TESTTMP/waiter.sh
Boris Feld
lock: allow to configure when the lock messages are displayed...
r35210 waiting for lock on working directory of b held by process '*' on host '*' (glob)
got lock after * seconds (glob)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat preup-stderr
$ cat stdout
adding f
Mads Kiilerich
localrepo: give a sigh of relief when getting lock after waiting for it...
r20380 Pushing to a local read-only repo that can't be locked
Adrian Buehlmann
tests: unify test-lock-badness
r12071 $ chmod 100 a/.hg/store
$ hg -R b push a
pushing to a
Pierre-Yves David
localrepo: add unbundle support...
r20969 searching for changes
Arseniy Alekseyev
tests: add a rewriting step to detect EACCES errors
r51215 abort: could not lock repository a: $EACCES$
Martin von Zweigbergk
errors: set detailed exit code to 20 for locking errors...
r46432 [20]
Adrian Buehlmann
tests: unify test-lock-badness
r12071
$ chmod 700 a/.hg/store