1556 static int test_webdav_mkcol_fail(WebdavVFSRequest *req, WSBool *created) { |
1556 static int test_webdav_mkcol_fail(WebdavVFSRequest *req, WSBool *created) { |
1557 mkcol_count++; |
1557 mkcol_count++; |
1558 return 1; |
1558 return 1; |
1559 } |
1559 } |
1560 |
1560 |
|
1561 static int delete_count = 0; |
|
1562 static int delete_finish_count = 0; |
|
1563 |
|
1564 static int test_backend_webdav_delete(WebdavVFSRequest *req, WSBool *created) { |
|
1565 delete_count++; |
|
1566 return 0; |
|
1567 } |
|
1568 |
|
1569 static int test_backend_webdav_delete_finish(WebdavVFSRequest *req, WSBool success) { |
|
1570 delete_finish_count++; |
|
1571 return 0; |
|
1572 } |
1561 |
1573 |
1562 |
1574 |
1563 UCX_TEST(test_webdav_vfs_op_do) { |
1575 UCX_TEST(test_webdav_vfs_op_do) { |
1564 Session *sn; |
1576 Session *sn; |
1565 Request *rq; |
1577 Request *rq; |
1566 TestIOStream *st; |
1578 TestIOStream *st; |
1567 pblock *pb; |
1579 pblock *pb; |
1568 |
1580 |
|
1581 // Tests performed primarily with MKCOL, because webdav_vfs_op_do |
|
1582 // behaves the same for both operations |
|
1583 // the only difference are the callbacks |
|
1584 |
1569 init_test_webdav_method(&sn, &rq, &st, &pb, "MKCOL", NULL); |
1585 init_test_webdav_method(&sn, &rq, &st, &pb, "MKCOL", NULL); |
1570 rq->vfs = testvfs_create(sn); |
1586 VFS *testvfs = testvfs_create(sn); |
|
1587 rq->vfs = testvfs; |
1571 |
1588 |
1572 WebdavBackend dav1; |
1589 WebdavBackend dav1; |
1573 ZERO(&dav1, sizeof(WebdavBackend)); |
1590 ZERO(&dav1, sizeof(WebdavBackend)); |
1574 dav1.opt_mkcol = test_webdav_mkcol; |
1591 dav1.opt_mkcol = test_webdav_mkcol; |
1575 dav1.opt_mkcol_finish = test_webdav_mkcol_finish; |
1592 dav1.opt_mkcol_finish = test_webdav_mkcol_finish; |
|
1593 dav1.opt_delete = test_backend_webdav_delete; |
|
1594 dav1.opt_delete_finish = test_backend_webdav_delete_finish; |
1576 |
1595 |
1577 WebdavBackend dav2; |
1596 WebdavBackend dav2; |
1578 ZERO(&dav2, sizeof(WebdavBackend)); |
1597 ZERO(&dav2, sizeof(WebdavBackend)); |
1579 dav2.opt_mkcol_finish = test_webdav_mkcol_finish; |
1598 dav2.opt_mkcol_finish = test_webdav_mkcol_finish; |
1580 |
1599 |
1623 |
1642 |
1624 UCX_TEST_ASSERT(ret, "op3 should fail"); |
1643 UCX_TEST_ASSERT(ret, "op3 should fail"); |
1625 UCX_TEST_ASSERT(mkcol_count == 1, "op3: wrong mkcol_count"); |
1644 UCX_TEST_ASSERT(mkcol_count == 1, "op3: wrong mkcol_count"); |
1626 UCX_TEST_ASSERT(mkcol_finish_count == 1, "op3: wrong mkcol_finish_count"); |
1645 UCX_TEST_ASSERT(mkcol_finish_count == 1, "op3: wrong mkcol_finish_count"); |
1627 |
1646 |
|
1647 // test DELETE to make sure, delete callbacks will be used |
|
1648 pblock_replace("path", "/deltest", rq->vars); |
|
1649 rq->vfs = testvfs; |
|
1650 WebdavVFSOperation *op_del = webdav_vfs_op(sn, rq, &dav1, FALSE); |
|
1651 vfs_open(op_del->vfs, "/deltest", O_CREAT); |
|
1652 ret = webdav_vfs_op_do(op_del, WEBDAV_VFS_DELETE); |
|
1653 |
|
1654 UCX_TEST_ASSERT(!ret, "op_del failed"); |
|
1655 UCX_TEST_ASSERT(delete_count == 1, "op_del: wrong delete_count"); |
|
1656 UCX_TEST_ASSERT(delete_finish_count == 1, "op_del: wrong delete_finish_count"); |
|
1657 |
1628 |
1658 |
1629 UCX_TEST_END; |
1659 UCX_TEST_END; |
1630 } |
1660 } |
|
1661 |
|
1662 UCX_TEST(test_webdav_delete){ |
|
1663 Session *sn; |
|
1664 Request *rq; |
|
1665 TestIOStream *st; |
|
1666 pblock *pb; |
|
1667 |
|
1668 init_test_webdav_method(&sn, &rq, &st, &pb, "DELETE", NULL); |
|
1669 rq->vfs = testvfs_create(sn); |
|
1670 |
|
1671 WebdavBackend dav1; |
|
1672 ZERO(&dav1, sizeof(WebdavBackend)); |
|
1673 dav1.opt_delete = test_backend_webdav_delete; |
|
1674 dav1.opt_delete_finish = test_backend_webdav_delete_finish; |
|
1675 delete_count = 0; |
|
1676 delete_finish_count = 0; |
|
1677 rq->davCollection = &dav1; |
|
1678 |
|
1679 UCX_TEST_BEGIN; |
|
1680 |
|
1681 // prepare |
|
1682 VFSContext *vfs = vfs_request_context(sn, rq); |
|
1683 int err; |
|
1684 err = vfs_mkdir(vfs, "/dir1"); |
|
1685 UCX_TEST_ASSERT(err == 0, "mkdir dir1 failed"); |
|
1686 err = vfs_mkdir(vfs, "/dir2"); |
|
1687 UCX_TEST_ASSERT(err == 0, "mkdir dir2 failed"); |
|
1688 err = vfs_mkdir(vfs, "/dir2/dir3"); |
|
1689 UCX_TEST_ASSERT(err == 0, "mkdir dir3 failed"); |
|
1690 err = vfs_mkdir(vfs, "/dir2/dir4"); |
|
1691 UCX_TEST_ASSERT(err == 0, "mkdir dir4 failed"); |
|
1692 err = vfs_mkdir(vfs, "/dir2/dir4/dir5"); |
|
1693 UCX_TEST_ASSERT(err == 0, "mkdir dir5 failed"); |
|
1694 |
|
1695 SYS_FILE f0 = vfs_open(vfs, "/file0", O_CREAT); |
|
1696 UCX_TEST_ASSERT(f0, "f0 create failed"); |
|
1697 // no f1 |
|
1698 SYS_FILE f2 = vfs_open(vfs, "/dir2/file2", O_CREAT); |
|
1699 UCX_TEST_ASSERT(f2, "f2 create failed"); |
|
1700 SYS_FILE f3 = vfs_open(vfs, "/dir2/dir3/file3", O_CREAT); |
|
1701 UCX_TEST_ASSERT(f3, "f3 create failed"); |
|
1702 SYS_FILE f4 = vfs_open(vfs, "/dir2/dir4/file4", O_CREAT); |
|
1703 UCX_TEST_ASSERT(f4, "f4 create failed"); |
|
1704 SYS_FILE f5 = vfs_open(vfs, "/dir2/dir4/dir5/file5", O_CREAT); |
|
1705 UCX_TEST_ASSERT(f5, "f5 create failed"); |
|
1706 |
|
1707 // delete single file |
|
1708 pblock_replace("path", "/file0", rq->vars); |
|
1709 err = webdav_delete(NULL, sn, rq); |
|
1710 UCX_TEST_ASSERT(err == 0, "DELETE /file0 failed"); |
|
1711 UCX_TEST_ASSERT(delete_count == 1, "del1: wrong delete count"); |
|
1712 |
|
1713 delete_count = 0; |
|
1714 pblock_replace("path", "/dir1", rq->vars); |
|
1715 err = webdav_delete(NULL, sn, rq); |
|
1716 UCX_TEST_ASSERT(err == 0, "DELETE /dir1 failed"); |
|
1717 UCX_TEST_ASSERT(delete_count == 1, "del1: wrong delete count"); |
|
1718 |
|
1719 delete_count = 0; |
|
1720 pblock_replace("path", "/dir2", rq->vars); |
|
1721 err = webdav_delete(NULL, sn, rq); |
|
1722 UCX_TEST_ASSERT(err == 0, "DELETE /dir2 failed"); |
|
1723 UCX_TEST_ASSERT(delete_count == 8, "del2: wrong delete count"); |
|
1724 |
|
1725 UCX_TEST_END; |
|
1726 } |