From 3065eeed20ca9921ac41d348721f065ac26f40ac Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 17 Sep 2025 16:54:35 +0200 Subject: [PATCH] add test for split all --- libs/spandisc/tests/splitter-test.c | 70 ++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/libs/spandisc/tests/splitter-test.c b/libs/spandisc/tests/splitter-test.c index f49070f..503122a 100644 --- a/libs/spandisc/tests/splitter-test.c +++ b/libs/spandisc/tests/splitter-test.c @@ -5,9 +5,24 @@ #include #include #include +#include #include "../src/libspandisc.h" +#define ONE_MB 1048576 +#define TWO_MB 2097152 +#define ONE_GB 1073741824 +#define S_IFREG 0100000 // bitmask for regular file; man inode + +char* strdup(const char* str) +{ + uint64_t length = strlen(str) + 1; + char* new_str = malloc(sizeof(char) * length); + memcpy(new_str, str, length); + + return new_str; +} + void ignore_media_test() { medium_t* srcdata = init_medium(); @@ -16,6 +31,7 @@ void ignore_media_test() *srcdata->filearray = malloc(sizeof(file_size_t)); srcdata->filearray[0]->name = "too-big-file"; srcdata->filearray[0]->fsize = 4096; + srcdata->filearray[0]->type = S_IFREG; srcdata->length = 1; medium_t* ignore_medium = ignore(srcdata); @@ -39,7 +55,7 @@ void add_media_test() *srcdata->filearray = malloc(sizeof(file_size_t)); srcdata->filearray[0]->name = "file"; srcdata->filearray[0]->fsize = 2000; - srcdata->filearray[0]->type = 20; + srcdata->filearray[0]->type = S_IFREG; srcdata->length = 1; medium_t* media = splitter(srcdata); @@ -56,11 +72,61 @@ void add_media_test() media = NULL; } +void split_all_test() +{ + collection_t* col = init_collection(); + medium_t* srcdata = init_medium(); + srcdata->filearray = malloc(sizeof(file_size_t*) * 3); + for (int i = 0; i < 3; i++) { + srcdata->filearray[i] = malloc(sizeof(file_size_t)); + } + srcdata->filearray[0]->name = strdup("file a"); + srcdata->filearray[0]->fsize = ONE_MB; + srcdata->filearray[0]->type = S_IFREG; + srcdata->filearray[1]->name = strdup("file b"); + srcdata->filearray[1]->fsize = ONE_MB; + srcdata->filearray[1]->type = S_IFREG; + srcdata->filearray[2]->name = strdup("bigger file"); + srcdata->filearray[2]->fsize = ONE_GB; + srcdata->filearray[2]->type = S_IFREG; + srcdata->length = 3; + srcdata->freespace = TWO_MB; + + split_all(srcdata, col); + + assert_int_equal(srcdata->length, 0); + assert_int_equal(col->length, 2); + + assert_int_equal(col->disc[0]->nr, 0); + assert_int_equal(col->disc[0]->length, 1); + assert_int_equal(col->disc[0]->freespace, 0); + assert_string_equal(col->disc[0]->filearray[0]->name, "bigger file"); + assert_int_equal(col->disc[0]->filearray[0]->fsize, ONE_GB); + assert_int_equal(col->disc[0]->filearray[0]->type, S_IFREG); + + assert_int_equal(col->disc[1]->nr, 1); + assert_int_equal(col->disc[1]->length, 2); + assert_int_equal(col->disc[1]->freespace, 0); + assert_string_equal(col->disc[1]->filearray[0]->name, "file a"); + assert_int_equal(col->disc[1]->filearray[0]->fsize, ONE_MB); + assert_int_equal(col->disc[1]->filearray[0]->type, S_IFREG); + assert_string_equal(col->disc[1]->filearray[1]->name, "file b"); + assert_int_equal(col->disc[1]->filearray[1]->fsize, ONE_MB); + assert_int_equal(col->disc[1]->filearray[1]->type, S_IFREG); + + free_collection(col); + col = NULL; + free_medium(srcdata); + srcdata = NULL; +} + int main() { const struct CMUnitTest tests[] = { cmocka_unit_test(ignore_media_test), - cmocka_unit_test(add_media_test) + cmocka_unit_test(add_media_test), + cmocka_unit_test(add_media_test), + cmocka_unit_test(split_all_test) }; return cmocka_run_group_tests(tests, NULL, NULL); -- 2.47.3