150 lines
4.8 KiB
Markdown
150 lines
4.8 KiB
Markdown
|
|
# Webdav protocol compliance.
|
|
|
|
The standard for webdav compliance testing is [`litmus`](http://www.webdav.org/neon/litmus/),
|
|
which is available at [http://www.webdav.org/neon/litmus/](http://www.webdav.org/neon/litmus/).
|
|
|
|
Building it:
|
|
```
|
|
curl -O http://www.webdav.org/neon/litmus/litmus-0.13.tar.gz
|
|
tar xf litmus-0.13.tar.gz
|
|
cd litmus-0.13
|
|
./configure
|
|
make
|
|
```
|
|
|
|
Then run the test server (`sample-litmus-server`). For some tests, `litmus`
|
|
assumes that it is using basic authentication, so you must run the server
|
|
with the `--auth` flag.
|
|
```
|
|
cd webdav-handler-rs
|
|
cargo run --example sample-litmus-server -- --memfs --auth
|
|
```
|
|
|
|
You do not have to install the litmus binary, it's possible to run the tests
|
|
straight from the unpacked & compiled litmus directory (`someuser` and
|
|
`somepass` are literal, you do not have to put a real username/password there):
|
|
|
|
```
|
|
$ cd litmus-0.13
|
|
$ TESTS="http basic copymove locks props" HTDOCS=htdocs TESTROOT=. ./litmus http://localhost:4918/ someuser somepass
|
|
|
|
-> 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%
|
|
-> 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....... WARNING: DELETE removed collection resource with Request-URI including fragment; unsafe
|
|
...................... pass (with 1 warning)
|
|
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%
|
|
-> 1 warning was issued.
|
|
-> 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 `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 `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%
|
|
```
|
|
|