]>
git.saurik.com Git - apple/copyfile.git/blob - copyfile_test/main.c
10 #include <sys/mount.h>
12 #include <removefile.h>
14 #include "identical_test.h"
15 #include "readonly_fd_test.h"
16 #include "sparse_test.h"
17 #include "stat_test.h"
18 #include "xattr_test.h"
19 #include "test_utils.h"
21 #define DISK_IMAGE_SIZE_MB 512
24 #define TEST_DIR MOUNT_PATH
25 #define USING_DISK_IMAGE 1
27 #define TEST_DIR "/tmp/copyfile_test"
28 #define USING_DISK_IMAGE 0
29 #endif // TARGET_OS_OSX
31 #define MIN_BLOCKSIZE_B 512
32 #define DEFAULT_BLOCKSIZE_B 4096
33 #define MAX_BLOCKSIZE_B 16384
35 int main(__unused
int argc
, __unused
const char * argv
[]) {
39 // Create a disk image to run our tests in.
40 if (USING_DISK_IMAGE
) {
41 disk_image_create(APFS_FSTYPE
, DISK_IMAGE_SIZE_MB
);
43 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
44 assert_no_err(mkdir(TEST_DIR
, 0777));
47 // Make sure the test directory exists, is apfs formatted,
48 // and that we have a sane block size.
49 assert_no_err(statfs(TEST_DIR
, &stb
));
50 assert_no_err(memcmp(stb
.f_fstypename
, APFS_FSTYPE
, sizeof(APFS_FSTYPE
)));
51 if (stb
.f_bsize
< MIN_BLOCKSIZE_B
|| stb
.f_bsize
> MAX_BLOCKSIZE_B
) {
52 stb
.f_bsize
= DEFAULT_BLOCKSIZE_B
;
57 failed
|= do_readonly_fd_test(TEST_DIR
, stb
.f_bsize
);
58 failed
|= do_sparse_test(TEST_DIR
, stb
.f_bsize
);
59 failed
|= do_sparse_recursive_test(TEST_DIR
, stb
.f_bsize
);
60 failed
|= do_fcopyfile_offset_test(TEST_DIR
, stb
.f_bsize
);
61 failed
|= do_preserve_dst_flags_test(TEST_DIR
, stb
.f_bsize
);
62 failed
|= do_preserve_dst_tracked_test(TEST_DIR
, stb
.f_bsize
);
63 failed
|= do_src_dst_identical_test(TEST_DIR
, stb
.f_bsize
);
64 failed
|= do_xattr_test(TEST_DIR
, stb
.f_bsize
);
66 // Cleanup the disk image we ran our tests on.
67 if (USING_DISK_IMAGE
) {
68 disk_image_destroy(false);
70 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
73 return failed
? EXIT_FAILURE
: EXIT_SUCCESS
;