#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();
*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);
*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);
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);