Sun, 25 Jan 2026 17:53:31 +0100
add tests for dav_exists, dav_create and dav_set_content/dav_store
| libidav/resource.c | file | annotate | diff | comparison | revisions | |
| libidav/webdav.h | file | annotate | diff | comparison | revisions | |
| test/main.c | file | annotate | diff | comparison | revisions | |
| test/webdav_resource.c | file | annotate | diff | comparison | revisions | |
| test/webdav_resource.h | file | annotate | diff | comparison | revisions | |
| test/wsgidav.c | file | annotate | diff | comparison | revisions |
--- a/libidav/resource.c Sat Jan 24 13:56:19 2026 +0100 +++ b/libidav/resource.c Sun Jan 25 17:53:31 2026 +0100 @@ -761,7 +761,7 @@ data->length = 0; } -void dav_set_content_data(DavResource *res, char *content, size_t length) { +void dav_set_content_data(DavResource *res, const char *content, size_t length) { DavSession *sn = res->session; DavResourceData *data = res->data; data->content = dav_session_malloc(sn, length);
--- a/libidav/webdav.h Sat Jan 24 13:56:19 2026 +0100 +++ b/libidav/webdav.h Sun Jan 25 17:53:31 2026 +0100 @@ -371,7 +371,7 @@ DavPropName* dav_get_property_names(DavResource *res, size_t *count); void dav_set_content(DavResource *res, void *stream, dav_read_func read_func, dav_seek_func seek_func); -void dav_set_content_data(DavResource *res, char *content, size_t length); +void dav_set_content_data(DavResource *res, const char *content, size_t length); void dav_set_content_length(DavResource *res, size_t length); int dav_load(DavResource *res);
--- a/test/main.c Sat Jan 24 13:56:19 2026 +0100 +++ b/test/main.c Sun Jan 25 17:53:31 2026 +0100 @@ -86,6 +86,9 @@ test_webdav_init(); if(dav_client_tests) { cx_test_register(suite_webdav, test_dav_load_webdav); + cx_test_register(suite_webdav, test_dav_exists_webdav); + cx_test_register(suite_webdav, test_dav_create_webdav); + cx_test_register(suite_webdav, test_dav_store_content_webdav); } cx_test_run_stdout(suite);
--- a/test/webdav_resource.c Sat Jan 24 13:56:19 2026 +0100 +++ b/test/webdav_resource.c Sun Jan 25 17:53:31 2026 +0100 @@ -29,6 +29,16 @@ #include "webdav.h" #include "webdav_resource.h" +CX_TEST_SUBROUTINE(test_default_properties, DavResource *res) { + CX_TEST_ASSERT(res->contentlength > 0); + CX_TEST_ASSERT(res->creationdate > 0); + CX_TEST_ASSERT(res->lastmodified > 0); + CX_TEST_ASSERT(res->exists); + CX_TEST_ASSERT(res->contenttype); + CX_TEST_ASSERT(!res->iscollection); + CX_TEST_ASSERT(res->href); +} + CX_TEST(test_dav_load_webdav) { CX_TEST_DO { DavSession *sn = get_test_webdav_session(); @@ -36,12 +46,60 @@ CX_TEST_ASSERT(res); int ret = dav_load(res); CX_TEST_ASSERT(ret == 0); - CX_TEST_ASSERT(res->contentlength > 0); - CX_TEST_ASSERT(res->creationdate > 0); - CX_TEST_ASSERT(res->lastmodified > 0); - CX_TEST_ASSERT(res->exists); - CX_TEST_ASSERT(res->contenttype); - CX_TEST_ASSERT(!res->iscollection); - CX_TEST_ASSERT(res->href); + CX_TEST_CALL_SUBROUTINE(test_default_properties, res); + dav_session_destroy(sn); + } +} + +CX_TEST(test_dav_exists_webdav) { + CX_TEST_DO { + DavSession *sn = get_test_webdav_session(); + DavResource *res = dav_resource_new(sn, "/hello.txt"); + CX_TEST_ASSERT(res); + int exists = dav_exists(res); + CX_TEST_ASSERT(exists); + CX_TEST_CALL_SUBROUTINE(test_default_properties, res); + dav_session_destroy(sn); } } + +CX_TEST(test_dav_create_webdav) { + CX_TEST_DO { + DavSession *sn = get_test_webdav_session(); + // test1: check if the resource exists and create it after that + DavResource *res = dav_resource_new(sn, "/test_create.txt"); + CX_TEST_ASSERT(res); + int exists = dav_exists(res); // the resource should not exist yet + CX_TEST_ASSERT(!exists); + int ret = dav_create(res); // create the resource + CX_TEST_ASSERT(!ret); + exists = dav_exists(res); // the resource should exist now + CX_TEST_ASSERT(exists); + CX_TEST_ASSERT(res->lastmodified > 0); // some properties should be loaded by dav_exists() + CX_TEST_ASSERT(res->contenttype); + + // test2: create a resource without calling dav_exists first + DavResource *res2 = dav_resource_new(sn, "/test_create2.txt"); + ret = dav_create(res2); + CX_TEST_ASSERT(!ret); + CX_TEST_ASSERT(dav_exists(res2)); + CX_TEST_ASSERT(res2->lastmodified > 0); + CX_TEST_ASSERT(res2->contenttype); + + dav_session_destroy(sn); + } +} + +CX_TEST(test_dav_store_content_webdav) { + CX_TEST_DO { + DavSession *sn = get_test_webdav_session(); + DavResource *res = dav_resource_new(sn, "/test_store_content.txt"); + cxstring content = cx_str("test_store_content test content\n"); + dav_set_content_data(res, content.ptr, content.length); + int ret = dav_store(res); + CX_TEST_ASSERT(!ret); + CX_TEST_ASSERT(!dav_load(res)); + CX_TEST_ASSERT(res->contentlength == content.length); + dav_session_destroy(sn); + } +}
--- a/test/webdav_resource.h Sat Jan 24 13:56:19 2026 +0100 +++ b/test/webdav_resource.h Sun Jan 25 17:53:31 2026 +0100 @@ -36,6 +36,9 @@ #endif CX_TEST(test_dav_load_webdav); +CX_TEST(test_dav_exists_webdav); +CX_TEST(test_dav_create_webdav); +CX_TEST(test_dav_store_content_webdav); #ifdef __cplusplus
--- a/test/wsgidav.c Sat Jan 24 13:56:19 2026 +0100 +++ b/test/wsgidav.c Sun Jan 25 17:53:31 2026 +0100 @@ -243,7 +243,7 @@ } // delete previous testrepo directory - char *args1[] = { "rm", "-Rf", "testrepo", NULL }; + char *args1[] = { "rm", "-Rf", "testrepo", "wsgidav.yaml", NULL }; Process p_rm = process_spawn("/bin/rm", args1); cxmutstr err = process_err_read_string(&p_rm); if(process_close(&p_rm) != 0) { @@ -264,9 +264,20 @@ } free(err.ptr); + // copy the config file to the build directory + char *args3[] = { "cp", "../test/wsgidav/wsgidav.yaml", "wsgidav.yaml", NULL }; + Process p_cp2 = process_spawn("/bin/cp", args3); + err = process_err_read_string(&p_cp2); + if(process_close(&p_cp2) != 0) { + cxmutstr s = cx_strtrim(err); + fprintf(stderr, "cp failed: %.*s\n", (int)s.length, s.ptr); + return 1; + } + free(err.ptr); + // start wsgidav - char *args3[] = { "wsgidav", "-c", "../test/wsgidav/wsgidav.yaml", NULL }; - wsgidav_process = process_spawn(wsgidav_exec_path, args3); + char *args4[] = { "wsgidav", "-c", "wsgidav.yaml", NULL }; + wsgidav_process = process_spawn(wsgidav_exec_path, args4); // TODO: parse log or try to connect to localhost sleep(1);