Sun, 25 Jan 2026 17:53:31 +0100
add tests for dav_exists, dav_create and dav_set_content/dav_store
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2026 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #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(); DavResource *res = dav_resource_new(sn, "/hello.txt"); CX_TEST_ASSERT(res); int ret = dav_load(res); CX_TEST_ASSERT(ret == 0); 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); } }