]>
git.saurik.com Git - apple/copyfile.git/blob - copyfile_test/main.c
10 #include <sys/mount.h>
12 #include <removefile.h>
14 #include "sparse_test.h"
15 #include "stat_test.h"
16 #include "test_utils.h"
18 #define DISK_IMAGE_SIZE_MB 512
21 #define TEST_DIR MOUNT_PATH
22 #define USING_DISK_IMAGE 1
24 #define TEST_DIR "/tmp/copyfile_test"
25 #define USING_DISK_IMAGE 0
26 #endif // TARGET_OS_OSX
28 #define MIN_BLOCKSIZE_B 512
29 #define DEFAULT_BLOCKSIZE_B 4096
30 #define MAX_BLOCKSIZE_B 16384
32 int main(__unused
int argc
, __unused
const char * argv
[]) {
36 // Create a disk image to run our tests in.
37 if (USING_DISK_IMAGE
) {
38 disk_image_create(APFS_FSTYPE
, DISK_IMAGE_SIZE_MB
);
40 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
41 assert_no_err(mkdir(TEST_DIR
, 0777));
44 // Make sure the test directory exists, is apfs formatted,
45 // and that we have a sane block size.
46 assert_no_err(statfs(TEST_DIR
, &stb
));
47 assert_no_err(memcmp(stb
.f_fstypename
, APFS_FSTYPE
, sizeof(APFS_FSTYPE
)));
48 if (stb
.f_bsize
< MIN_BLOCKSIZE_B
|| stb
.f_bsize
> MAX_BLOCKSIZE_B
) {
49 stb
.f_bsize
= DEFAULT_BLOCKSIZE_B
;
54 failed
|= do_sparse_test(TEST_DIR
, stb
.f_bsize
);
55 failed
|= do_sparse_recursive_test(TEST_DIR
, stb
.f_bsize
);
56 failed
|= do_fcopyfile_offset_test(TEST_DIR
, stb
.f_bsize
);
57 failed
|= do_preserve_dst_flags_test(TEST_DIR
, stb
.f_bsize
);
59 // Cleanup the disk image we ran our tests on.
60 if (USING_DISK_IMAGE
) {
61 disk_image_destroy(false);
63 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
66 return failed
? EXIT_FAILURE
: EXIT_SUCCESS
;