| /* |
| * Copyright (C) 2007 Nokia Corporation. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
| * 02110-1301 USA |
| * |
| * Author: Adrian Hunter |
| */ |
| |
| #ifndef included_tests_tests_h__ |
| #define included_tests_tests_h__ |
| |
| #include <stdint.h> |
| |
| /* Main macro for testing */ |
| #define CHECK(x) tests_test((x),__func__,__FILE__,__LINE__) |
| |
| /* The default directory in which tests are conducted */ |
| #define TESTS_DEFAULT_FILE_SYSTEM_MOUNT_DIR "/mnt/test_file_system" |
| |
| /* The default file system type to test */ |
| #define TESTS_DEFAULT_FILE_SYSTEM_TYPE "jffs2" |
| |
| /* Estimated size of an empty directory */ |
| #define TESTS_EMPTY_DIR_SIZE 128 |
| |
| /* Function invoked by the CHECK macro */ |
| void tests_test(int test,const char *msg,const char *file,unsigned line); |
| |
| /* Handle common program options */ |
| int tests_get_args(int argc, |
| char *argv[], |
| const char *title, |
| const char *desc, |
| const char *opts); |
| |
| /* Return the number of files (or directories) in the given directory */ |
| unsigned tests_count_files_in_dir(const char *dir_name); |
| |
| /* Change to the file system mount directory, check that it is empty, |
| matches the file system type, and is not the root file system */ |
| void tests_check_test_file_system(void); |
| |
| /* Get the free space for the file system of the current directory */ |
| uint64_t tests_get_free_space(void); |
| |
| /* Get the total space for the file system of the current directory */ |
| uint64_t tests_get_total_space(void); |
| |
| /* Write size random bytes into file descriptor fd at the current position, |
| returning the number of bytes actually written */ |
| uint64_t tests_fill_file(int fd, uint64_t size); |
| |
| /* Write size random bytes into file descriptor fd at offset, |
| returning the number of bytes actually written */ |
| uint64_t tests_write_filled_file(int fd, off_t offset, uint64_t size); |
| |
| /* Check that a file written using tests_fill_file() and/or |
| tests_write_filled_file() and/or tests_create_file() |
| contains the expected random data */ |
| void tests_check_filled_file_fd(int fd); |
| |
| /* Check that a file written using tests_fill_file() and/or |
| tests_write_filled_file() and/or tests_create_file() |
| contains the expected random data */ |
| void tests_check_filled_file(const char *file_name); |
| |
| /* Delete a file */ |
| void tests_delete_file(const char *file_name); |
| |
| /* Create a file of size file_size */ |
| uint64_t tests_create_file(const char *file_name, uint64_t file_size); |
| |
| /* Calculate: free_space * numerator / denominator */ |
| uint64_t tests_get_big_file_size(unsigned numerator, unsigned denominator); |
| |
| /* Create file "fragment_n" where n is the file_number, and unlink it */ |
| int tests_create_orphan(unsigned file_number); |
| |
| /* Write size bytes at offset to the file "fragment_n" where n is the |
| file_number and file_number also determines the random data written |
| i.e. seed for random numbers */ |
| unsigned tests_write_fragment_file(unsigned file_number, |
| int fd, |
| off_t offset, |
| unsigned size); |
| |
| /* Write size bytes to the end of file descriptor fd using file_number |
| to determine the random data written i.e. seed for random numbers */ |
| unsigned tests_fill_fragment_file(unsigned file_number, |
| int fd, |
| unsigned size); |
| |
| /* Write size bytes to the end of file "fragment_n" where n is the file_number |
| and file_number also determines the random data written |
| i.e. seed for random numbers */ |
| unsigned tests_append_to_fragment_file(unsigned file_number, |
| unsigned size, |
| int create); |
| |
| /* Write size bytes at offset to the file "fragment_n" where n is the |
| file_number and file_number also determines the random data written |
| i.e. seed for random numbers */ |
| unsigned tests_overwite_fragment_file( unsigned file_number, |
| off_t offset, |
| unsigned size); |
| |
| /* Delete file "fragment_n" where n is the file_number */ |
| void tests_delete_fragment_file(unsigned file_number); |
| |
| /* Check the random data in file "fragment_n" is what is expected */ |
| void tests_check_fragment_file_fd(unsigned file_number, int fd); |
| |
| /* Check the random data in file "fragment_n" is what is expected */ |
| void tests_check_fragment_file(unsigned file_number); |
| |
| /* Central point to decide whether to use fsync */ |
| void tests_maybe_sync(int fd); |
| |
| /* Return O_SYNC if ok to sync otherwise return 0 */ |
| int tests_maybe_sync_flag(void); |
| |
| /* Return random number from 0 to n - 1 */ |
| size_t tests_random_no(size_t n); |
| |
| /* Make a directory empty */ |
| void tests_clear_dir(const char *dir_name); |
| |
| /* Create an empty sub-directory or small file in the current directory */ |
| int64_t tests_create_entry(char *return_name); |
| |
| /* Remove a random file of empty sub-directory from the current directory */ |
| int64_t tests_remove_entry(void); |
| |
| /* Un-mount and re-mount test file system */ |
| void tests_remount(void); |
| |
| /* Un-mount test file system */ |
| void tests_unmount(void); |
| |
| /* Mount test file system */ |
| void tests_mount(void); |
| |
| /* Check whether the test file system is also the root file system */ |
| int tests_fs_is_rootfs(void); |
| |
| /* Try to make a directory empty */ |
| void tests_try_to_clear_dir(const char *dir_name); |
| |
| /* Check whether the test file system is also the current file system */ |
| int tests_fs_is_currfs(void); |
| |
| /* Concatenate a pid to a string in a signal safe way */ |
| void tests_cat_pid(char *buf, const char *name, pid_t pid); |
| |
| extern char *tests_file_system_mount_dir; |
| |
| extern char *tests_file_system_type; |
| |
| /* General purpose test parameter to specify some aspect of test size. |
| May be used by different tests in different ways. |
| Set by the -z, --size options. */ |
| extern int64_t tests_size_parameter; |
| |
| /* General purpose test parameter to specify some aspect of test repetition. |
| May be used by different tests in different ways. |
| Set by the -n, --repeat options. */ |
| extern int64_t tests_repeat_parameter; |
| |
| /* General purpose test parameter to specify some aspect of test sleeping. |
| May be used by different tests in different ways. |
| Set by the -p, --sleep options. */ |
| extern int64_t tests_sleep_parameter; |
| |
| /* General purpose test parameter to specify a file should be unlinked. |
| May be used by different tests in different ways or not at all. */ |
| extern int tests_unlink_flag; |
| |
| /* General purpose test parameter to specify a file should be closed. |
| May be used by different tests in different ways or not at all. */ |
| extern int tests_close_flag; |
| |
| /* General purpose test parameter to specify a file should be deleted. |
| May be used by different tests in different ways or not at all. */ |
| extern int tests_delete_flag; |
| |
| /* General purpose test parameter to specify a file have a hole. |
| May be used by different tests in different ways or not at all. */ |
| extern int tests_hole_flag; |
| |
| /* Program name from argv[0] */ |
| extern char *program_name; |
| |
| /* Maximum file name length of test file system (from statfs) */ |
| extern long tests_max_fname_len; |
| |
| #endif |