src/server/test/webdav.c

branch
webdav
changeset 249
3b302093945c
parent 245
a193c42fc809
child 251
f727a21497bb
equal deleted inserted replaced
248:bc8f8ddbad2e 249:3b302093945c
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 }

mercurial