Subject: FW: results of interoperability testing: tdav.py (client) vs five servers

From: Jim Whitehead <[email-masked]>
Date: Sun, 14 Nov 1999 12:52:59 -0800

Accidentally caught by the spam filter.

- Jim

-----Original Message-----
From: Jim Davis [mailto:[email-masked]]
Sent: Tuesday, November 09, 1999 2:01 PM
To: [email-masked]
Subject: [Moderator Action] results of interoperability testing: tdav.py
(client) vs five servers

I tried this evening to use tdav.py to test five webdav servers for
compliance with RFC 2518.

www.hisdad.org.nz:80
webdav.zope.org:2518
kurgan.lyra.org:8080
www.sharemation.com:80
pydav (running locally)

These represent every server that I believe to be accesible via the Internet
I do not know of anyone running the MS server on an open machine, alas.

1. hisdad

I am not sure what kind of server this is, except it's clearly using Apache.

I was not able to authenticate.  The server claims to support basic
authentication.  It may be an error in the authentication code of
davlib, or perhaps the server's authentication is not configured
correctly.  I will try this after the server administrator gets back
to me.

2. Zope

This is a class 1 server.

The DAV:getcontenttype appears to not be supported.  A PROPFIND for
this property returned no data.

It appears that the server does not support any of the DAV properties.
An attempt to get all properties of foo.html (which I created)
produced exactly one result, for
http://www.zope.org/propsets/defaulttitle.

RFC 2518 13.1 and following list several properties that MUST be
supported, among them DAV:getcontentlanguage, DAV:getcontentlength,
DAV:getcontenttype, DAV:getetag and DAV:getresourcetype, so it
appears to me this server is not fully compliant.

3. Lyra

*** basic tests
Server claims to support locking
Resource type of  /dav/ is DAV:collection:  PASS

*** Testing error cases for MakeCollection
Attempt to create collection that already exists should fail:  PASS
Attempt to create collection with no parent should fail:  PASS

*** Testing Delete
Attempt to delete a non-existant resource should complain:  PASS

*** Testing Put /dav/foo.html
PUT of a new resource is possible:  PASS
The media type used in PUT's Content-Type is returned by a PROPFIND FAIL
GetProp of /dav/foo.html DAV:getcontenttype returned ['text/html'] not
text/plain

*** Testing Get
Mime type in Header of GET is same as that used in PUT:  FAIL, it was
text/html but should have been text/plain
Number of bytes returned by GET is same as the number PUT:  PASS

*** Testing Head
HEAD header for content-type has same value as GET header:  PASS
HEAD header for content-length has same value as GET header:  PASS

*** Testing Properties
The DAV:getcontenttype property is the same as that in the GET header:
FAIL it was text/html not text/plain
The getcontentlength property is the same as the value in the GET header:
PASS
PROPPATCH of dead property (http://parc.xerox.com/standards/burlap/foo) is
possible:  PASS
PROPFIND retrieves same value : PASS

Attempt to PROPPATCH a readonly property should fail  PASS

*** Testing LOCK with /dav/foo.html
locked. Got token: opaquelocktoken:39a268f8-1dd2-11b2-959e-fb4938e57af8

Attempt to Lock resource already locked should fail: FAIL (it worked)

It was not possible to continue beyond this point.

4. sharemation (aka Xythos)

bash.exe-2.02$ python tdav.py -h www.sharemation.com -p 80 -collection
/~jrd/ -verbose

*** basic tests
Server claims to support locking
Resource type of  /~jrd/ is DAV:collection:  PASS

*** Testing error cases for MakeCollection
Attempt to create collection that already exists should fail:  PASS
Attempt to create collection with no parent should fail:  PASS

*** Testing Delete
Attempt to delete a non-existant resource should complain:  PASS

*** Testing Put /~jrd/foo.html
PUT of a new resource is possible:  PASS
The media type used in PUT's Content-Type is returned by a PROPFIND PASS

*** Testing Get
Mime type in Header of GET is same as that used in PUT:  PASS
Number of bytes returned by GET is same as the number PUT:  PASS

*** Testing Head
HEAD header for content-type has same value as GET header:  PASS
HEAD header for content-length has same value as GET header:  PASS

*** Testing Properties
The DAV:getcontenttype property is the same as that in the GET header:  PASS
The getcontentlength property is the same as the value in the GET header:
PASS
PROPPATCH of dead property (http://parc.xerox.com/standards/burlap/foo) is
possible:  PASS
PROPFIND retrieves same value : PASS

Attempt to PROPPATCH a readonly property (DAV:creationdate) should fail
PASS

dead property http://example.com/author was preserved across deletion of
/~jrd/foo.html

PropPatch failed with tagged-list production

PUT could not create resource in a locked collection even with token
Traceback (innermost last):
  File "tdav.py", line 679, in ?
    newcoll = test_coll + "newcoll/"
  File "davlib.py", line 157, in MakeCollection
    self.Invoke ('MKCOL', uri, h)
  File "davlib.py", line 369, in Invoke
    raise Locked
Locked

(it was not possible to continue automated testing beyond this point.)

5. Pydav

The tests worked completely, but that is not surprising since I wrote
both the test script and the server, so it does not show any true
interoperation.

Note that the list of tests run is only partial.  (beyond a certain point,
the automatic test script only reports problems, not successes, so you
aren't seeing any indication of the more obscure and complex tests)

bash.exe-2.02$ python tdav.py -h localhost -verbose

*** basic tests
Server claims to support locking
Resource type of  / is DAV:collection:  PASS

*** Testing error cases for MakeCollection
Attempt to create collection that already exists should fail:  PASS
Attempt to create collection with no parent should fail:  PASS

*** Testing Delete
Attempt to delete a non-existant resource should complain:  PASS

*** Testing Put /foo.html
PUT of a new resource is possible:  PASS
The media type used in PUT's Content-Type is returned by a PROPFIND PASS

*** Testing Get
Mime type in Header of GET is same as that used in PUT:  PASS
Number of bytes returned by GET is same as the number PUT:  PASS

*** Testing Head
HEAD header for content-type has same value as GET header:  PASS
HEAD header for content-length has same value as GET header:  PASS

*** Testing Properties
The DAV:getcontenttype property is the same as that in the GET header:  PASS
The getcontentlength property is the same as the value in the GET header:
PASS
PROPPATCH of dead property (http://parc.xerox.com/standards/burlap/foo) is
possible:  PASS
PROPFIND retrieves same value : PASS

*** Getting all properties of /foo.html
<A:getcontenttype xmlns:A="DAV:">text/plain</A:getcontenttype>
<A:foo xmlns:A="http://parc.xerox.com/standards/burlap/">fish</A:foo>
<A:lockdiscovery xmlns:A="DAV:"/>
<A:creationdate xmlns:A="DAV:">1999-11-09T21:41:09Z</A:creationdate>
<A:getcontentlength xmlns:A="DAV:">51</A:getcontentlength>
<A:resourcetype xmlns:A="DAV:"/>
<A:supportedlock
xmlns:A="DAV:"><A:lockentry><A:locktype><A:write/></A:locktype><A:lockscope>
<A:exclusive/></A:lockscope></A:lockentry></A:supportedlock>
<A:getlastmodified xmlns:A="DAV:">Tue, 09 Nov 1999 21:41:09
GMT</A:getlastmodified>

Attempt to PROPPATCH a readonly property (DAV:creationdate) should fail
PASS

*** Testing LOCK with /foo.html

*** Trying Unlock opaquelocktoken:942183673.149

*** More lock tests

*** Trying creation and deletion

*** Trying misc. tests

*** Testing locks on null resource