My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
Litmus  
information about litmus
Updated Mar 21, 2012 by evert...@gmail.com

Litmus

Litmus is a WebDAV compliance testing tool. It tries to cover most features and problem areas. It currently only tests against the standard, so passing the litmus test does mean your server will also work for every client.

Our stance

Litmus is a strict tester, and passing it will also require the server to be strict. Our philosophy is "be liberal in what you accept, be strict in what you produce" and these two things don't always match.

Generally if a client would be misbehaving, but an accurate assumption can be made on what the intention of the request was it would be our choice to accept the requests. This may also depend on how popular the client is. For instance, NetDrive sends PROPFIND requests with an empty

<prop>
element. We can reasonably assume it meant to do an
<allprop>
request instead, so that's how it's interpreted.

That being said, we pass every test.

Test status

This is from a stable release (1.6.1), litmus 0.12.1 and Apache2 were used for testing.

The Sabre_DAV_FSExt_* classes were used for this server, as this implementation supports custom properties.

Currently all tests are passed.

When using Nginx a warning will be thrown for the delete_fragment test. This is because nginx automatically strips url-fragments (#). Nginx also never completes the expect100 http test. I presume this is a bug in my nginx version.

-> running `basic':
 0. init.................. pass
 1. begin................. pass
 2. options............... pass
 3. put_get............... pass
 4. put_get_utf8_segment.. pass
 5. put_no_parent......... pass
 6. mkcol_over_plain...... pass
 7. delete................ pass
 8. delete_null........... pass
 9. delete_fragment....... pass
10. mkcol................. pass
11. mkcol_again........... pass
12. delete_coll........... pass
13. mkcol_no_parent....... pass
14. mkcol_with_body....... pass
15. finish................ pass
<- summary for `basic': of 16 tests run: 16 passed, 0 failed. 100.0%
-> running `copymove':
 0. init.................. pass
 1. begin................. pass
 2. copy_init............. pass
 3. copy_simple........... pass
 4. copy_overwrite........ pass
 5. copy_nodestcoll....... pass
 6. copy_cleanup.......... pass
 7. copy_coll............. pass
 8. copy_shallow.......... pass
 9. move.................. pass
10. move_coll............. pass
11. move_cleanup.......... pass
12. finish................ pass
<- summary for `copymove': of 13 tests run: 13 passed, 0 failed. 100.0%
-> running `props':
 0. init.................. pass
 1. begin................. pass
 2. propfind_invalid...... pass
 3. propfind_invalid2..... pass
 4. propfind_d0........... pass
 5. propinit.............. pass
 6. propset............... pass
 7. propget............... pass
 8. propextended.......... pass
 9. propmove.............. pass
10. propget............... pass
11. propdeletes........... pass
12. propget............... pass
13. propreplace........... pass
14. propget............... pass
15. propnullns............ pass
16. propget............... pass
17. prophighunicode....... pass
18. propget............... pass
19. propremoveset......... pass
20. propget............... pass
21. propsetremove......... pass
22. propget............... pass
23. propvalnspace......... pass
24. propwformed........... pass
25. propinit.............. pass
26. propmanyns............ pass
27. propget............... pass
28. propcleanup........... pass
29. finish................ pass
<- summary for `props': of 30 tests run: 30 passed, 0 failed. 100.0%
-> running `locks':
 0. init.................. pass
 1. begin................. pass
 2. options............... pass
 3. precond............... pass
 4. init_locks............ pass
 5. put................... pass
 6. lock_excl............. pass
 7. discover.............. pass
 8. refresh............... pass
 9. notowner_modify....... pass
10. notowner_lock......... pass
11. owner_modify.......... pass
12. notowner_modify....... pass
13. notowner_lock......... pass
14. copy.................. pass
15. cond_put.............. pass
16. fail_cond_put......... pass
17. cond_put_with_not..... pass
18. cond_put_corrupt_token pass
19. complex_cond_put...... pass
20. fail_complex_cond_put. pass
21. unlock................ pass
22. fail_cond_put_unlocked pass
23. lock_shared........... pass
24. notowner_modify....... pass
25. notowner_lock......... pass
26. owner_modify.......... pass
27. double_sharedlock..... pass
28. notowner_modify....... pass
29. notowner_lock......... pass
30. unlock................ pass
31. prep_collection....... pass
32. lock_collection....... pass
33. owner_modify.......... pass
34. notowner_modify....... pass
35. refresh............... pass
36. indirect_refresh...... pass
37. unlock................ pass
38. unmapped_lock......... pass
39. unlock................ pass
40. finish................ pass
<- summary for `locks': of 41 tests run: 41 passed, 0 failed. 100.0%
-> running `http':
 0. init.................. pass
 1. begin................. pass
 2. expect100............. pass
 3. finish................ pass
<- summary for `http': of 4 tests run: 4 passed, 0 failed. 100.0%
Comment by filip.na...@gmail.com, Oct 4, 2010

"As an example, Windows clients might make a PROPPATCH request with no body. While this is non-standard, this is interpreted as a PROPPATCH request containing the <allprops /> instruction."

I believe PROPFIND was meant here and RFC 4918 explicitly allows that:

"A client may choose not to submit a request body. An empty PROPFIND request body MUST be treated as if it were an 'allprop' request."

Comment by project member evert...@gmail.com, Oct 4, 2010

You're right. I did mean PROPFIND. I don't think the old rfc allowed it, which is how I got there.

Comment by project member evert...@gmail.com, Oct 4, 2010

filip, I changed the example to a Netdrive incompatibility. Thankfully there's plenty of incompatibilities to choose from :)

Comment by filip.na...@gmail.com, Oct 4, 2010

Thanks. These pages are good reference for other implementors of the WebDAV/CalDAV protocols. :)

Comment by project member evert...@gmail.com, Oct 4, 2010

Thanks =) I was hoping for that. Keep the suggestions coming.

Comment by michael....@gmail.com, Mar 21, 2012

Hi Evert, is it possible to update this test and run it with 1.6 version? Only if it's not too much effort...

Comment by project member evert...@gmail.com, Mar 21, 2012

Updated!


Sign in to add a comment
Powered by Google Project Hosting