--- a/src/server/plugins/postgresql/pgtest.c Mon Apr 18 11:49:37 2022 +0200 +++ b/src/server/plugins/postgresql/pgtest.c Mon Apr 18 13:17:50 2022 +0200 @@ -46,6 +46,21 @@ static PGconn *test_connection; static ResourceData resdata; +void debug_print_resources(void) { + PGresult *result = PQexec(test_connection, "select * from Resource;"); + int n = PQntuples(result); + printf("\nntuples: %d\n-----------------------------------------------\n", n); + printf("%10s %10s %s\n", "resource_id", "parent_id", "nodename"); + for(int i=0;i<n;i++) { + char *res_id = PQgetvalue(result, i, 0); + char *parent_id = PQgetvalue(result, i, 1); + char *nodename = PQgetvalue(result, i, 2); + printf("%10s %10s %s\n", res_id, parent_id, nodename); + } + printf("\n"); +} + + void register_pg_tests(int argc, char **argv, UcxTestSuite *suite) { test_connection = PQconnectdb(pg_connstr); @@ -66,6 +81,7 @@ ucx_test_register(suite, test_pg_vfs_stat); ucx_test_register(suite, test_pg_vfs_mkdir); ucx_test_register(suite, test_pg_vfs_unlink); + ucx_test_register(suite, test_pg_vfs_rmdir); PGresult *result = PQexec(test_connection, "BEGIN"); PQclear(result); @@ -258,8 +274,8 @@ f1 = vfs_open(vfs, "/test_unlink1", O_RDONLY); UCX_TEST_ASSERT(f1 == NULL, "test file not deleted"); - int pgfd = lo_open(test_connection, oid, INV_READ); - UCX_TEST_ASSERT(pgfd < 0, "large object not deleted"); + //int pgfd = lo_open(test_connection, oid, INV_READ); + //UCX_TEST_ASSERT(pgfd < 0, "large object not deleted"); r = vfs_unlink(vfs, "/test_unlink1"); UCX_TEST_ASSERT(r, "unlink should fail"); @@ -268,3 +284,46 @@ testutil_destroy_session(sn); } + +UCX_TEST(test_pg_vfs_rmdir) { + Session *sn = testutil_session(); + Request *rq = testutil_request(sn->pool, "PUT", "/"); + rq->vfs = create_test_pgvfs(sn, rq); + VFSContext *vfs = vfs_request_context(sn, rq); + + PQexec(test_connection, "delete from Resource where parent_id is not null;"); + + UCX_TEST_BEGIN; + + int r; + SYS_FILE f1; + + // prepare some dirs/files + r = vfs_mkdir(vfs, "/rmdir_test"); + UCX_TEST_ASSERT(r == 0, "mkdir failed (1)"); + r = vfs_mkdir(vfs, "/rmdir_test/subdir1"); + UCX_TEST_ASSERT(r == 0, "mkdir failed (2)"); + r = vfs_mkdir(vfs, "/rmdir_test/subdir2"); + UCX_TEST_ASSERT(r == 0, "mkdir failed (3)"); + + f1 = vfs_open(vfs, "/rmdir_test/subdir2/file", O_CREAT|O_WRONLY); + UCX_TEST_ASSERT(f1, "open failed"); + vfs_close(f1); + + // test rmdir + r = vfs_rmdir(vfs, "/rmdir_test/subdir1"); + UCX_TEST_ASSERT(r == 0, "rmdir failed");; + + //r = vfs_rmdir(vfs, "/rmdir_test/subdir2"); + //UCX_TEST_ASSERT(r != 0, "rmdir should fail if the dir is not empty"); + + r = vfs_unlink(vfs, "/rmdir_test/subdir2/file"); + UCX_TEST_ASSERT(r == 0, "unlink failed"); + + r = vfs_rmdir(vfs, "/rmdir_test/subdir2"); + UCX_TEST_ASSERT(r == 0, "rmdir failed 2"); + + UCX_TEST_END; + + testutil_destroy_session(sn); +}