--- a/src/server/plugins/postgresql/pgtest.c Sun Apr 17 11:51:37 2022 +0200 +++ b/src/server/plugins/postgresql/pgtest.c Sun Apr 17 12:04:41 2022 +0200 @@ -63,8 +63,10 @@ ucx_test_register(suite, test_pg_vfs_open); ucx_test_register(suite, test_pg_vfs_io); + ucx_test_register(suite, test_pg_vfs_stat); PGresult *result = PQexec(test_connection, "BEGIN"); + PQclear(result); } } @@ -166,11 +168,38 @@ Request *rq = testutil_request(sn->pool, "PUT", "/"); rq->vfs = create_test_pgvfs(sn, rq); VFSContext *vfs = vfs_request_context(sn, rq); - SYS_FILE file; - SYS_FILE file2; UCX_TEST_BEGIN; + // testdata, content doesn't matter + char test1[512]; + memset(test1, 'x', 512); + const int test_len1 = 200; + const int test_len2 = 432; + + SYS_FILE f1 = vfs_open(vfs, "/test_s1", O_WRONLY|O_CREAT); + UCX_TEST_ASSERT(f1, "cannot open test_s1"); + system_fwrite(f1, test1, test_len1); + vfs_close(f1); + + SYS_FILE f2 = vfs_open(vfs, "/test_s2", O_RDWR|O_CREAT); + UCX_TEST_ASSERT(f2, "cannot open test_s2"); + system_fwrite(f2, test1, test_len2); + vfs_close(f2); + + struct stat st1, st2; + int r1 = vfs_stat(vfs, "/test_s1", &st1); + int r2 = vfs_stat(vfs, "/test_s2", &st2); + + UCX_TEST_ASSERT(r1 == 0, "stat1 failed"); + UCX_TEST_ASSERT(r2 == 0, "stat2 failed"); + + UCX_TEST_ASSERT(st1.st_size == test_len1, "s1 wrong length"); + UCX_TEST_ASSERT(st2.st_size == test_len2, "s2 wrong length"); + + int testfail = vfs_stat(vfs, "/test_stat_fail", &st1); + UCX_TEST_ASSERT(testfail != 0, "stat 3 should fail"); + UCX_TEST_END; }