]>
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 "test_utils.h"
17 #define DISK_IMAGE_SIZE_MB 512
20 #define TEST_DIR MOUNT_PATH
21 #define USING_DISK_IMAGE 1
23 #define TEST_DIR "/tmp/copyfile_test"
24 #define USING_DISK_IMAGE 0
25 #endif // TARGET_OS_OSX
27 #define MIN_BLOCKSIZE_B 512
28 #define DEFAULT_BLOCKSIZE_B 4096
29 #define MAX_BLOCKSIZE_B 16384
31 int main(__unused
int argc
, __unused
const char * argv
[]) {
35 // Create a disk image to run our tests in.
36 if (USING_DISK_IMAGE
) {
37 disk_image_create(APFS_FSTYPE
, DISK_IMAGE_SIZE_MB
);
39 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
40 assert_no_err(mkdir(TEST_DIR
, 0777));
43 // Make sure the test directory exists, is apfs formatted,
44 // and that we have a sane block size.
45 assert_no_err(statfs(TEST_DIR
, &stb
));
46 assert_no_err(memcmp(stb
.f_fstypename
, APFS_FSTYPE
, sizeof(APFS_FSTYPE
)));
47 if (stb
.f_bsize
< MIN_BLOCKSIZE_B
|| stb
.f_bsize
> MAX_BLOCKSIZE_B
) {
48 stb
.f_bsize
= DEFAULT_BLOCKSIZE_B
;
53 failed
|= do_sparse_test(TEST_DIR
, stb
.f_bsize
);
54 failed
|= do_sparse_recursive_test(TEST_DIR
, stb
.f_bsize
);
55 failed
|= do_fcopyfile_offset_test(TEST_DIR
, stb
.f_bsize
);
57 // Cleanup the disk image we ran our tests on.
58 if (USING_DISK_IMAGE
) {
59 disk_image_destroy(false);
61 (void)removefile(TEST_DIR
, NULL
, REMOVEFILE_RECURSIVE
);
64 return failed
? EXIT_FAILURE
: EXIT_SUCCESS
;