Thu, 29 Jan 2026 21:47:31 +0100
fix test_dav_store_load_webdav in case encryption is enabled
/* * 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" #include <cx/buffer.h> #include <cx/printf.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)); if(!test_session_is_encrypted()) { CX_TEST_ASSERT(res->contentlength == content.length); } dav_session_destroy(sn); } } CX_TEST(test_dav_store_stream_webdav) { CX_TEST_DO { FILE *f = fopen("test_dav_store_stream_webdav.txt", "w+"); cxstring line = cx_str("test_dav_store_stream_webdav test content\n"); for(int i=0;i<1000;i++) { fwrite(line.ptr, 1, line.length, f); } fseek(f, 0, SEEK_SET); size_t len = 1000 * line.length; DavSession *sn = get_test_webdav_session(); DavResource *res = dav_resource_new(sn, "/test_store_file.txt"); dav_set_content(res, f, (dav_read_func)fread, (dav_seek_func)fseek); int ret = dav_store(res); CX_TEST_ASSERT(!ret); CX_TEST_ASSERT(!dav_load(res)); if(!test_session_is_encrypted()) { CX_TEST_ASSERT(res->contentlength == len); } dav_session_destroy(sn); fclose(f); } } CX_TEST(test_dav_store_load_webdav) { CX_TEST_DO { CxBuffer *buf1 = cxBufferCreate(NULL, NULL, 1024, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); CxBuffer *buf2 = cxBufferCreate(NULL, NULL, 1024, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); CxBuffer *buf3 = cxBufferCreate(NULL, NULL, 1024, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); CxBuffer *resultBuf = cxBufferCreate(NULL, NULL, 1024, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); for(int i=0;i<100;i++) { cx_bprintf(buf1, "Test Content %d\n", i); } for(int i=0;i<1234;i++) { cx_bprintf(buf2, "%d Medium Buffer Content\n", i); } for(int i=0;i<345678;i++) { cx_bprintf(buf3, "%d Large Buffer Content %d\n", i, i*7); } DavSession *sn = get_test_webdav_session(); // test buf1 buf1->pos = 0; DavResource *res1 = dav_resource_new(sn, "/test_store_load1.txt"); dav_set_content(res1, buf1, (dav_read_func)cxBufferRead, (dav_seek_func)cxBufferSeek); int ret = dav_store(res1); CX_TEST_ASSERT(!ret); ret = dav_load(res1); CX_TEST_ASSERT(!ret); ret = dav_get_content(res1, resultBuf, (dav_write_func)cxBufferWrite); CX_TEST_ASSERT(!ret); CX_TEST_ASSERT(resultBuf->size == buf1->size); CX_TEST_ASSERT(!memcmp(resultBuf->space, buf1->space, buf1->size)); cxBufferReset(resultBuf); // test buf2 buf2->pos = 0; DavResource *res2 = dav_resource_new(sn, "/test_store_load2.txt"); dav_set_content(res2, buf2, (dav_read_func)cxBufferRead, (dav_seek_func)cxBufferSeek); ret = dav_store(res2); CX_TEST_ASSERT(!ret); ret = dav_load(res2); CX_TEST_ASSERT(!ret); ret = dav_get_content(res2, resultBuf, (dav_write_func)cxBufferWrite); CX_TEST_ASSERT(!ret); CX_TEST_ASSERT(resultBuf->size == buf2->size); CX_TEST_ASSERT(!memcmp(resultBuf->space, buf2->space, buf2->size)); cxBufferReset(resultBuf); // test buf3 buf3->pos = 0; DavResource *res3 = dav_resource_new(sn, "/test_store_load3.txt"); dav_set_content(res3, buf3, (dav_read_func)cxBufferRead, (dav_seek_func)cxBufferSeek); ret = dav_store(res3); CX_TEST_ASSERT(!ret); ret = dav_load(res3); CX_TEST_ASSERT(!ret); ret = dav_get_content(res3, resultBuf, (dav_write_func)cxBufferWrite); CX_TEST_ASSERT(!ret); CX_TEST_ASSERT(resultBuf->size == buf3->size); CX_TEST_ASSERT(!memcmp(resultBuf->space, buf3->space, buf3->size)); cxBufferReset(resultBuf); dav_session_destroy(sn); cxBufferFree(buf1); cxBufferFree(buf2); cxBufferFree(buf3); } }