/* * test.c * * Main program for the libsysfs testsuite * * Copyright (C) IBM Corp. 2004-2005 * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation version 2 of the License. * * 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., * 675 Mass Ave, Cambridge, MA 02139, USA. * */ /** * this doesn't do much, just loops throug to call each function. */ #include "test-defs.h" #include /*************************************************/ char *function_name[] = { "sysfs_get_mnt_path", "sysfs_remove_trailing_slash", "sysfs_get_name_from_path", "sysfs_path_is_dir", "sysfs_path_is_link", "sysfs_path_is_file", "sysfs_get_link", "sysfs_close_list", "sysfs_open_directory_list", "sysfs_open_link_list", "sysfs_close_attribute", "sysfs_open_attribute", "sysfs_read_attribute", "sysfs_write_attribute", "sysfs_close_driver", "sysfs_open_driver", "sysfs_open_driver_path", "sysfs_get_driver_attr", "sysfs_get_driver_attributes", "sysfs_get_driver_devices", "sysfs_close_device", "sysfs_open_device", "sysfs_get_device_parent", "sysfs_open_device_path", "sysfs_get_device_attr", "sysfs_get_device_attributes", "sysfs_close_bus", "sysfs_open_bus", "sysfs_get_bus_device", "sysfs_get_bus_driver", "sysfs_get_bus_drivers", "sysfs_get_bus_devices", "sysfs_close_class_device", "sysfs_open_class_device_path", "sysfs_open_class_device", "sysfs_get_classdev_device", "sysfs_get_classdev_parent", "sysfs_close_class", "sysfs_open_class", "sysfs_get_class_devices", "sysfs_get_class_device", "sysfs_get_classdev_attributes", "sysfs_get_classdev_attr", "sysfs_close_module", "sysfs_open_module_path", "sysfs_open_module", "sysfs_get_module_attr", "sysfs_get_module_attributes", "sysfs_get_module_parms", "sysfs_get_module_sections", "sysfs_get_module_parm", "sysfs_get_module_section", }; int (*func_table[])(int) = { test_sysfs_get_mnt_path, test_sysfs_remove_trailing_slash, test_sysfs_get_name_from_path, test_sysfs_path_is_dir, test_sysfs_path_is_link, test_sysfs_path_is_file, test_sysfs_get_link, test_sysfs_close_list, test_sysfs_open_directory_list, test_sysfs_open_link_list, test_sysfs_close_attribute, test_sysfs_open_attribute, test_sysfs_read_attribute, test_sysfs_write_attribute, test_sysfs_close_driver, test_sysfs_open_driver, test_sysfs_open_driver_path, test_sysfs_get_driver_attr, test_sysfs_get_driver_attributes, test_sysfs_get_driver_devices, test_sysfs_close_device, test_sysfs_open_device, test_sysfs_get_device_parent, test_sysfs_open_device_path, test_sysfs_get_device_attr, test_sysfs_get_device_attributes, test_sysfs_close_bus, test_sysfs_open_bus, test_sysfs_get_bus_device, test_sysfs_get_bus_driver, test_sysfs_get_bus_drivers, test_sysfs_get_bus_devices, test_sysfs_close_class_device, test_sysfs_open_class_device_path, test_sysfs_open_class_device, test_sysfs_get_classdev_device, test_sysfs_get_classdev_parent, test_sysfs_close_class, test_sysfs_open_class, test_sysfs_get_class_devices, test_sysfs_get_class_device, test_sysfs_get_classdev_attributes, test_sysfs_get_classdev_attr, test_sysfs_close_module, test_sysfs_open_module_path, test_sysfs_open_module, test_sysfs_get_module_attr, test_sysfs_get_module_attributes, test_sysfs_get_module_parms, test_sysfs_get_module_sections, test_sysfs_get_module_parm, test_sysfs_get_module_section, }; char *dir_paths[] = { val_dir_path, val_root_dev_path, val_class_dev_path, val_block_class_dev_path, val_drv_path, val_drv1_path, NULL }; char *file_paths[] = { val_file_path, val_write_attr_path, NULL }; char *link_paths[] = { val_link_path, NULL }; static int path_is_dir(const char *path) { struct stat astats; if ((lstat(path, &astats)) != 0) goto direrr; if (S_ISDIR(astats.st_mode)) return 0; direrr: fprintf(stdout, "Config error: %s not a directory\n", path); return 1; } static int path_is_file(const char *path) { struct stat astats; if ((lstat(path, &astats)) != 0) goto fileerr; if (S_ISREG(astats.st_mode)) return 0; fileerr: fprintf(stdout, "Config error: %s not a file\n", path); return 1; } static int path_is_link(const char *path) { struct stat astats; if ((lstat(path, &astats)) != 0) goto linkerr; if (S_ISLNK(astats.st_mode)) return 0; linkerr: fprintf(stdout, "Config error: %s not a link\n", path); return 1; } /* * Check validity of the test.h file entries */ static int check_header(void) { char *var_path = NULL; char path1[SYSFS_PATH_MAX]; int i = 0; for (i = 0; dir_paths[i] != NULL; i++) { var_path = dir_paths[i]; if (path_is_dir(var_path) != 0) return 1; } for (i = 0; file_paths[i] != NULL; i++) { var_path = file_paths[i]; if (path_is_file(var_path) != 0) return 1; } for (i = 0; link_paths[i] != NULL; i++) { var_path = link_paths[i]; if (path_is_link(var_path) != 0) return 1; } memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_root_dev_path); strcat(path1, "/"); strcat(path1, val_subdir_name); if (path_is_dir(path1) != 0) return 1; memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_drv_path); strcat(path1, "/"); strcat(path1, val_drv_dev_name); if (path_is_link(path1) != 0) return 1; memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_dir_path); strcat(path1, "/devices"); strcat(path1, "/"); strcat(path1, val_subdir_link_name); if (path_is_link(path1) != 0) return 1; memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_class_dev_path); strcat(path1, "/"); strcat(path1, val_class_dev_attr); if (path_is_file(path1) != 0) return 1; memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_dev_path); strcat(path1, "/"); strcat(path1, val_dev_attr); if (path_is_file(path1) != 0) return 1; memset(path1, 0, SYSFS_PATH_MAX); strcpy(path1, val_drv_path); strcat(path1, "/"); strcat(path1, val_drv_attr_name); if (path_is_file(path1) != 0) return 1; return 0; } static void usage(void) { fprintf(stdout, "testlibsysfs [log-file]\n"); fprintf(stdout, "\t eg: testlibsysfs 3 /home/user/test.log\n"); } int main(int argc, char *argv[]) { char std_out[] = "/dev/stdout"; char *file_name = NULL; int i = 0, j = 0, k = 0, num = 1; if (argc == 3) { file_name = argv[2]; } else { file_name = std_out; } my_stdout = fopen(file_name,"w"); if (argc < 2) { usage(); return 0; } else num = strtol(argv[1], NULL, 0); if (check_header() != 0) return 1; dbg_print("\nTest running %d times\n", num); for (k = 0; k < num ; k++) { dbg_print("\nThis is the %d test run\n", k+1); for (i = 0; i < FUNC_TABLE_SIZE; i++) { dbg_print("\n**************************************************************\n"); dbg_print("TESTING: %s, function no: %d\n\n", function_name[i], i); for (j = 0; ; j++) { fflush(my_stdout); if (func_table[i](j) == -1) break; } dbg_print("**************************************************************\n"); } } fclose(my_stdout); return 0; }