src/server/test/webdav.c

branch
webdav
changeset 245
a193c42fc809
parent 244
e59abb210584
child 249
3b302093945c
equal deleted inserted replaced
244:e59abb210584 245:a193c42fc809
122 backend2_propfind_do, 122 backend2_propfind_do,
123 backend2_propfind_finish, 123 backend2_propfind_finish,
124 backend2_proppatch_do, 124 backend2_proppatch_do,
125 backend2_proppatch_finish, 125 backend2_proppatch_finish,
126 NULL, // opt_mkcol 126 NULL, // opt_mkcol
127 NULL, // opt_mkcol_finish
127 NULL, // opt_delete 128 NULL, // opt_delete
129 NULL, // opt_delete_finish
128 0, 130 0,
129 NULL 131 NULL
130 }; 132 };
131 133
132 // backend1 134 // backend1
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) {
1100 pblock_nvinsert("uri", "/", rq->reqpb); 1104 pblock_nvinsert("uri", "/", rq->reqpb);
1101 1105
1102 st = testutil_iostream(2048, TRUE); 1106 st = testutil_iostream(2048, TRUE);
1103 sn->csd = st; 1107 sn->csd = st;
1104 1108
1105 testutil_request_body(sn, rq, request_body, strlen(request_body)); 1109 if(request_body) {
1110 testutil_request_body(sn, rq, request_body, strlen(request_body));
1111 }
1106 1112
1107 pb = pblock_create_pool(sn->pool, 4); 1113 pb = pblock_create_pool(sn->pool, 4);
1108 1114
1109 *out_sn = sn; 1115 *out_sn = sn;
1110 *out_rq = rq; 1116 *out_rq = rq;
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 }

mercurial