- From: Jim Whitehead <ejw@ics.uci.edu>
- Date: Thu, 19 Feb 1998 09:46:14 -0800
- To: "'WEBDAV WG'" <w3c-dist-auth@w3.org>
As part of my process of reviewing the specification, I have developed a
set of lock usage scenarios which at least Yaron and I agree upon. I'm
posting them to the list so that people can use them to refine their
understanding of the specification, possibly detect errors in the
specification, and potentially use these scenarios as test cases for
testing WebDAV servers.
Also, if anyone on the list has some interesting test cases in addition to
these, please send them along.
First, some setup.
For the scenarios, I'll be using the following tree ("tree A"):
/A/
/A/X/
/A/X/foo.html
/A/Y/
/A/Y/bar.html
Another tree is also used in some examples ("tree B"):
/B/
/B/K/
/B/K/dav.html
The initial state of each scenario is tree A as listed above, with no locks
on any members, and tree B as listed above, with no locks on any members.
Expected outcomes of operations are in parenthesis.
LOCK INTERACTIONS:
1) Exclusive write lock tree A, depth infinity (success). Exclusive write
lock bar.html (fails). Shared write lock bar.html (fails).
2) Exclusive write lock bar.html (success). Exclusive write lock tree A,
depth infinity (fails, no locks granted at all)
ADD NEW MEMBER TO A LOCK
3) Exclusive write lock tree A, depth infinity (success). PUT /A/Y/blah.gif
without Lock-Token header (fails). PUT /A/Y/blah.gif with correct
Lock-Token header (success, /A/Y/blah.gif is now part of the lock).
4) Exclusive write lock tree A, depth infinity (success). COPY
/B/K/dav.html to /A/X/dav.html without Lock-Token header (fails). COPY
/B/K/dav.html to /A/X/dav.html with correct Lock-Token header (success,
/A/X/dav.html is now part of the lock).
5) Exclusive write lock tree A, depth infinity (success). MOVE
/B/K/dav.html to /A/X/dav.html without Lock-Token header (fails). MOVE
/B/K/dav.html to /A/X/dav.html with correct Lock-Token header (success,
/A/X/dav.html is now part of the lock).
6) Exclusive write lock tree A, depth infinity (success). MKCOL /A/Z/
without Lock-Token header (fails). MKCOL /A/Z/ with correct Lock-Token
header (success, and /A/Z/ is now part of the lock).
MOVE, COPY OUT OF THE LOCK
7) Exclusive write lock tree A, depth infinity (success). COPY
/A/X/foo.html to /B/K/foo.html without Lock-Token header (success --
doesn't modify state of /A/X/foo.html, and /B/K/foo.html is not locked).
8) Exclusive write lock tree A, depth infinity (success). MOVE
/A/X/foo.html to /B/K/foo.html without Lock-Token header (fails). MOVE
/A/X/foo.html to /B/K/foo.html with correct Lock-Token header (success,
/B/K/foo.html is not locked).
9) Collection /F/ does not exist, i.e., is null. Exclusive write lock tree
A, depth infinity (success). MOVE /A/ with depth infinity to /F/, with no
Lock-Token header (fails). MOVE /A/ with depth infinity to /F/ with Lock
Token for tree A lock (success, collection at /F/ is not locked.)
MOVE, COPY BETWEEN TWO LOCKED COLLECTIONS
10) Exclusive write lock tree A, depth infinity (success). Exclusive write
lock tree B, depth infinity (success). COPY /A/X/foo.html to
/B/K/foo.html, with no Lock-Token header (fails). COPY /A/X/foo.html to
/B/K/foo.html with Lock-Token header with lock token for tree A lock, but
not tree B lock (fails). COPY /A/X/foo.html to /B/K/foo.html with
Lock-Token header with lock token for tree B lock but not tree A lock
(success, /B/K/foo.html now belongs to tree B lock).
11) Exclusive write lock tree A, depth infinity (success). Exclusive write
lock tree B, depth infinity (success). MOVE /A/X/foo.html to
/B/K/foo.html, with no Lock-Token header (fails). MOVE /A/X/foo.html to
/B/K/foo.html with Lock-Token header with lock token for tree A lock, but
not tree B lock (fails). MOVE /A/X/foo.html to /B/K/foo.html with
Lock-Token header with lock token for tree B lock but not tree A lock
(fails). MOVE /A/X/foo.html to /B/K/foo.html with lock token for tree A
and tree B (success, /B/K/foo.html now belongs to tree B lock).
12) Exclusive write lock tree A, depth infinity (success). Exclusive write
lock tree B, depth infinity (success). MOVE /B/, depth infinity, to /A/G/,
with no Lock Token (fails). MOVE /B/, depth infinity, to /A/G/, with Lock
Token for tree A lock and tree B lock (success, subtree /A/G/ now belongs
to tree A lock).
13) Exclusive write lock tree A, depth infinity (success). Exclusive write
lock tree B, depth infinity (success). COPY /B/, depth infinity, to /A/G/,
with no Lock Token (fails). COPY /B/, depth infinity, to /A/G/, with Lock
Token for tree A lock (success, subtree /A/G/ now belongs to tree A lock).
- Jim
Received on Thursday, 19 February 1998 13:16:33 UTC