]> gitweb.hhaalo.de Git - discspan.git/commitdiff
add test for split all
authorBastian Dehn <hhaalo@arcor.de>
Wed, 17 Sep 2025 14:54:35 +0000 (16:54 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 17 Sep 2025 15:00:10 +0000 (17:00 +0200)
libs/spandisc/tests/splitter-test.c

index f49070f66efc35b09eeb028d2ac2ce12ab6075fc..503122a343e0ac82cb2d207c488ae6422810e764 100644 (file)
@@ -5,9 +5,24 @@
 #include <cmocka.h>
 #include <stdbool.h>
 #include <stdlib.h>
+#include <string.h>
 
 #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);