/* * 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