aboutsummaryrefslogtreecommitdiff
path: root/tests/test_copy.c
blob: b37b1d36f6a25d696f68319e8d5fca0ff6cd0c88 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "testing.h"


void test_copy() {
    struct testcase {
        const char *in_file;
        char *out_file;
        int expect_size;
        int expect_return;
    };
    struct testcase tc[] = {
        {.in_file = "file_to_copy.txt", .out_file = "file_copied_1000.txt", .expect_size = 0x1000, .expect_return = 0},
        {.in_file = "file_to_copy.txt", .out_file = "file_copied_4000.txt", .expect_size = 0x4000, .expect_return = 0},
        {.in_file = "file_to_copy.txt", .out_file = "file_copied_8000.txt", .expect_size = 0x8000, .expect_return = 0},
        {.in_file = "file_to_copy.txt", .out_file = "file_copied_100000.txt", .expect_size = 0x100000, .expect_return = 0},
    };

    for (size_t i = 0; i < sizeof(tc) / sizeof(*tc); i++) {
        struct stat st_a, st_b;
        struct testcase *test = &tc[i];
        char *mock_data = malloc(test->expect_size + 1 * sizeof(*mock_data));
        memset(mock_data, 'A', test->expect_size);
        mock_data[test->expect_size] = '\0';
        stasis_testing_write_ascii(test->in_file, mock_data);
        guard_free(mock_data);

        STASIS_ASSERT(copy2(test->in_file, test->out_file, CT_OWNER | CT_PERM) == test->expect_return, "copy2 failed");
        STASIS_ASSERT(stat(test->in_file, &st_a) == 0, "source stat failed");
        STASIS_ASSERT(stat(test->in_file, &st_b) == 0, "destination stat failed");
        STASIS_ASSERT(st_b.st_size == test->expect_size, "destination file is not the expected size");
        STASIS_ASSERT(st_a.st_size == st_b.st_size, "source and destination files should be the same size");
        STASIS_ASSERT(st_a.st_mode == st_b.st_mode, "source and destination files should have the same permissions");
        STASIS_ASSERT(st_a.st_uid == st_b.st_uid, "source and destination should have the same UID");
    }
}

int main(int argc, char *argv[]) {
    STASIS_TEST_BEGIN_MAIN();
    STASIS_TEST_FUNC *tests[] = {
        test_copy,
    };
    STASIS_TEST_RUN(tests);
    STASIS_TEST_END_MAIN();
}