222 backend1_propfind_do, |
224 backend1_propfind_do, |
223 backend1_propfind_finish, |
225 backend1_propfind_finish, |
224 backend1_proppatch_do, |
226 backend1_proppatch_do, |
225 backend1_proppatch_finish, |
227 backend1_proppatch_finish, |
226 NULL, // opt_mkcol |
228 NULL, // opt_mkcol |
|
229 NULL, // opt_mkcol_finish |
227 NULL, // opt_delete |
230 NULL, // opt_delete |
|
231 NULL, // opt_delete_finish |
228 0, |
232 0, |
229 &backend2 |
233 &backend2 |
230 }; |
234 }; |
231 |
235 |
232 static void reset_backends(void) { |
236 static void reset_backends(void) { |
1470 testutil_iostream_destroy(st); |
1476 testutil_iostream_destroy(st); |
1471 |
1477 |
1472 |
1478 |
1473 UCX_TEST_END; |
1479 UCX_TEST_END; |
1474 } |
1480 } |
|
1481 |
|
1482 |
|
1483 /* ------------------------------------------------------------------------- |
|
1484 * |
|
1485 * WEBDAV VFS TESTS |
|
1486 * |
|
1487 * ------------------------------------------------------------------------ */ |
|
1488 |
|
1489 static int mkcol_data1 = 10; |
|
1490 static int mkcol_data2 = 20; |
|
1491 static int mkcol_data3 = 30; |
|
1492 static int mkcol_data4 = 40; |
|
1493 |
|
1494 static int mkcol_count = 0; |
|
1495 static int mkcol_finish_count = 0; |
|
1496 |
|
1497 static int mkcol_err = 0; |
|
1498 |
|
1499 static int set_created = 0; |
|
1500 |
|
1501 static int test_webdav_mkcol(WebdavVFSRequest *req, WSBool *created) { |
|
1502 mkcol_count++; |
|
1503 |
|
1504 switch(mkcol_count) { |
|
1505 case 1: { |
|
1506 req->userdata = &mkcol_data1; |
|
1507 break; |
|
1508 } |
|
1509 case 2: { |
|
1510 req->userdata = &mkcol_data2; |
|
1511 break; |
|
1512 } |
|
1513 case 3: { |
|
1514 req->userdata = &mkcol_data3; |
|
1515 break; |
|
1516 } |
|
1517 case 4: { |
|
1518 req->userdata = &mkcol_data4; |
|
1519 break; |
|
1520 } |
|
1521 default: break; |
|
1522 } |
|
1523 |
|
1524 if(set_created) { |
|
1525 *created = TRUE; |
|
1526 set_created = 0; |
|
1527 } |
|
1528 |
|
1529 return 0; |
|
1530 } |
|
1531 |
|
1532 static int test_webdav_mkcol_finish(WebdavVFSRequest *req, WSBool success) { |
|
1533 mkcol_finish_count++; |
|
1534 |
|
1535 if(mkcol_finish_count == 1) { |
|
1536 int *data = req->userdata; |
|
1537 if(data != &mkcol_data1) { |
|
1538 mkcol_err = 1; |
|
1539 } |
|
1540 } else if(mkcol_finish_count == 3) { |
|
1541 int *data = req->userdata; |
|
1542 if(data != &mkcol_data3) { |
|
1543 mkcol_err = 1; |
|
1544 } |
|
1545 } else { |
|
1546 int *data = req->userdata; |
|
1547 // data4 should never be used |
|
1548 if(data == &mkcol_data4) { |
|
1549 mkcol_err = 1; |
|
1550 } |
|
1551 } |
|
1552 |
|
1553 return 0; |
|
1554 } |
|
1555 |
|
1556 static int test_webdav_mkcol_fail(WebdavVFSRequest *req, WSBool *created) { |
|
1557 mkcol_count++; |
|
1558 return 1; |
|
1559 } |
|
1560 |
|
1561 |
|
1562 |
|
1563 UCX_TEST(test_webdav_vfs_op_do) { |
|
1564 Session *sn; |
|
1565 Request *rq; |
|
1566 TestIOStream *st; |
|
1567 pblock *pb; |
|
1568 |
|
1569 init_test_webdav_method(&sn, &rq, &st, &pb, "MKCOL", NULL); |
|
1570 rq->vfs = testvfs_create(sn); |
|
1571 |
|
1572 WebdavBackend dav1; |
|
1573 ZERO(&dav1, sizeof(WebdavBackend)); |
|
1574 dav1.opt_mkcol = test_webdav_mkcol; |
|
1575 dav1.opt_mkcol_finish = test_webdav_mkcol_finish; |
|
1576 |
|
1577 WebdavBackend dav2; |
|
1578 ZERO(&dav2, sizeof(WebdavBackend)); |
|
1579 dav2.opt_mkcol_finish = test_webdav_mkcol_finish; |
|
1580 |
|
1581 WebdavBackend dav3; |
|
1582 ZERO(&dav3, sizeof(WebdavBackend)); |
|
1583 dav3.opt_mkcol = test_webdav_mkcol; |
|
1584 |
|
1585 WebdavBackend dav4; |
|
1586 ZERO(&dav4, sizeof(WebdavBackend)); |
|
1587 dav4.opt_mkcol = test_webdav_mkcol; |
|
1588 dav4.opt_mkcol_finish = test_webdav_mkcol_finish; |
|
1589 |
|
1590 dav1.next = &dav2; |
|
1591 dav2.next = &dav3; |
|
1592 dav3.next = &dav4; |
|
1593 |
|
1594 rq->davCollection = &dav1; |
|
1595 |
|
1596 UCX_TEST_BEGIN; |
|
1597 |
|
1598 WebdavVFSOperation *op1 = webdav_vfs_op(sn, rq, &dav1, FALSE); |
|
1599 |
|
1600 int ret = webdav_vfs_op_do(op1, WEBDAV_VFS_MKDIR); |
|
1601 |
|
1602 UCX_TEST_ASSERT(!ret, "webdav_vfs_op_do failed"); |
|
1603 UCX_TEST_ASSERT(mkcol_count == 3, "wrong mkcol_count"); |
|
1604 UCX_TEST_ASSERT(mkcol_finish_count == 3, "wrong mkcol_finish_count"); |
|
1605 UCX_TEST_ASSERT(mkcol_err == 0, "mkcol_err"); |
|
1606 |
|
1607 // test without VFS, but set *created to TRUE to skip VFS usage |
|
1608 rq->vfs = NULL; |
|
1609 set_created = 1; |
|
1610 |
|
1611 WebdavVFSOperation *op2 = webdav_vfs_op(sn, rq, &dav1, FALSE); |
|
1612 ret = webdav_vfs_op_do(op2, WEBDAV_VFS_MKDIR); |
|
1613 |
|
1614 UCX_TEST_ASSERT(!ret, "op2 failed"); |
|
1615 |
|
1616 // test 3: abort after first backend |
|
1617 mkcol_count = 0; |
|
1618 mkcol_finish_count = 0; |
|
1619 dav1.opt_mkcol = test_webdav_mkcol_fail; |
|
1620 |
|
1621 WebdavVFSOperation *op3 = webdav_vfs_op(sn, rq, &dav1, FALSE); |
|
1622 ret = webdav_vfs_op_do(op3, WEBDAV_VFS_MKDIR); |
|
1623 |
|
1624 UCX_TEST_ASSERT(ret, "op3 should fail"); |
|
1625 UCX_TEST_ASSERT(mkcol_count == 1, "op3: wrong mkcol_count"); |
|
1626 UCX_TEST_ASSERT(mkcol_finish_count == 1, "op3: wrong mkcol_finish_count"); |
|
1627 |
|
1628 |
|
1629 UCX_TEST_END; |
|
1630 } |