From 0895bdb89c1674d01ecb9886a0624096ef939ad1 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 23 Nov 1998 18:57:48 +0000 Subject: Added tests in support of the file system infrastructure. --- testsuites/psxtests/psxstat/main.c | 40 + testsuites/psxtests/psxstat/psxstat.scn | 1253 +++++++++++++++++++++++++++++++ testsuites/psxtests/psxstat/test.c | 834 ++++++++++++++++++++ 3 files changed, 2127 insertions(+) create mode 100644 testsuites/psxtests/psxstat/main.c create mode 100644 testsuites/psxtests/psxstat/psxstat.scn create mode 100644 testsuites/psxtests/psxstat/test.c (limited to 'testsuites/psxtests/psxstat') diff --git a/testsuites/psxtests/psxstat/main.c b/testsuites/psxtests/psxstat/main.c new file mode 100644 index 0000000000..37658f4feb --- /dev/null +++ b/testsuites/psxtests/psxstat/main.c @@ -0,0 +1,40 @@ +/* + * Simple test program -- simplified version of sample test hello. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#define TEST_INIT + +#include + +void test_main( void ); + +rtems_task Init( + rtems_task_argument ignored +) +{ + test_main(); + exit( 0 ); +} + +/* configuration information */ + +#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include + +/* end of file */ diff --git a/testsuites/psxtests/psxstat/psxstat.scn b/testsuites/psxtests/psxstat/psxstat.scn new file mode 100644 index 0000000000..6a18981e42 --- /dev/null +++ b/testsuites/psxtests/psxstat/psxstat.scn @@ -0,0 +1,1253 @@ + + +*** STAT TEST 01 *** +>>>>Current Time: - rtems_clock_get - 09:00:00 12/31/1988 +Making directory /dir1 +Making directory /dir2 +Making directory /dir3 +Making directory /dir4 +Making directory /dir1/dir1 +Making directory /./././dir1/ dir1 +Making directory /./././links +Making directory ///dir1/dir1/../../dir1/../symlinks///// + +Making file ////dir1/\//file1\\// +Making file /dir1/file2 +Making file /dir1/file3 +Making file /dir1/file4 +Making file /dir1/dir1/file1 +Making file ../../..//dir1/./././dir1/ file1 +Making file main.c + +Making file dir1/dir1/../../links/dir1 +Making file links/dir2 +Making file links/dir3 +Making file links/dir4 +Making file links/dir1_dir1 +Making file links/dir1_ dir1 +Making file links/../links/../links/links + +Making file links/dir1_file1 +Making file links/dir1_file2 +Making file links/dir1_file3 +Making file links/dir1_file4 +Making file links/dir1_dir1_f1 +Making file links/dir1_dir1 f1 + +Making file links/links/links/links_dir1 +Making file links//links_dir2 +Making file links//links_dir3 +Making file links//links_dir4 +Making file links//links_dir1_d1 +Making file links//links_dir1 d1 +Making file links//links_links + +Making file links///links_d1_file1 +Making file links///links_d1_file2 +Making file links///links_d1_file3 +Making file links///links_d1_file4 +Making file links///links_d1_d1_f1 +Making file links///links_r1_d1 f1 + +Doing the stat() on all the good absolute paths +stat( /dev ) returned + st_dev (0x0:0x0) + st_ino 2 + st_mode 40771 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 28 + st_atime Fri Jan 01 00:00:00 1988 + st_mtime Fri Jan 01 00:00:00 1988 + st_ctime Fri Jan 01 00:00:00 1988 +stat( ////dir1/\//file1\\// ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1/\\/file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1/file3/////\\\ ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1/file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1/dir1/file1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1/dir1/ file1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /dir1 ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /dir2//////\ ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /dir1/dir1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /dir1/ dir1///\\ ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /\/\/\/\/\/\/links\/\/\/\/\/\ ) returned + st_dev (0x0:0x0) + st_ino a + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 728 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 + +Doing the stat() on all the good relative paths +stat( dev ) returned + st_dev (0x0:0x0) + st_ino 2 + st_mode 40771 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 28 + st_atime Fri Jan 01 00:00:00 1988 + st_mtime Fri Jan 01 00:00:00 1988 + st_ctime Fri Jan 01 00:00:00 1988 +stat( dir1/\//file1\\// ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1/\\/file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1/file3/////\\\ ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1/file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1/dir1/file1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1/dir1/ file1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( dir1 ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( dir2//////\ ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( dir1/dir1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( dir1/ dir1///\\ ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( main.c ) returned + st_dev (0x0:0x0) + st_ino 12 + st_mode 100000 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:00 1988 + +chdir to dev + +stat relative paths that are now bad +stat( dev ) returned : No such file or directory +stat( dir1/\//file1\\// ) returned : No such file or directory +stat( dir1/\\/file2 ) returned : No such file or directory +stat( dir1/file3/////\\\ ) returned : No such file or directory +stat( dir1/file4 ) returned : No such file or directory +stat( dir1/dir1/file1 ) returned : No such file or directory +stat( dir1/dir1/ file1 ) returned : No such file or directory +stat( dir1 ) returned : No such file or directory +stat( dir2//////\ ) returned : No such file or directory +stat( dir3 ) returned : No such file or directory +stat( dir4 ) returned : No such file or directory +stat( dir1/dir1 ) returned : No such file or directory +stat( dir1/ dir1///\\ ) returned : No such file or directory +stat( main.c ) returned : No such file or directory + +chdir to ../links +Doing the stat() on good links + +stat( dir1/dir1/../../links/dir1 ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir2 ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir1_dir1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir1_ dir1 ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/../links/../links/links ) returned + st_dev (0x0:0x0) + st_ino a + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 728 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links/dir1_file1 ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/dir1_file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/dir1_file3 ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/dir1_file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/dir1_dir1_f1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/dir1_dir1 f1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links/links/links/links_dir1 ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_dir2 ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_dir1_d1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_dir1 d1 ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links//links_links ) returned + st_dev (0x0:0x0) + st_ino a + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 728 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( links///links_d1_file1 ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links///links_d1_file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links///links_d1_file3 ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links///links_d1_file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links///links_d1_d1_f1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( links///links_r1_d1 f1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +chmod of /dir1/dir1 to Read/Write + +Doing the stat() on all the bad paths +stat( /links/ENAMETOOLONG___ ) returned : File or path name too long +stat( /dir1/file4/NOTADIR ) returned : Not a directory +stat( /dir1/dir1/EACCES__ ) returned : Permission denied +Making file /links/ENAMETOOLONG___ : File or path name too long +Making file /dir1/file4/NOTADIR : Not a directory +Making file /dir1/dir1/EACCES__ : Permission denied + +Return /dir1/dir1 to RWX +Making file /symlinks/a_file_symlink + +Making file /symlinks/a_dir_symlink + +Making file /symlinks/a_link_symlink + +Making file ../symlinks/no_file + +Making file /symlinks/links + +stat( /symlinks/a_file_symlink ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:10 1988 +stat( /symlinks/a_dir_symlink ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( /symlinks/a_link_symlink ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 168 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:05 1988 +stat( ../symlinks/no_file ) returned : No such file or directory +Making file 1 + +Making file 2 + +Making file 3 + +Making file 4 + +Making file 5 + +Making file 6 + +Making file 7 + +Making file 8 + +Making file 9 + +stat( 1 ) returned + st_dev (0x0:0x0) + st_ino b + st_mode 40700 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 140 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:00 1988 +stat( 2 ) returned + st_dev (0x0:0x0) + st_ino b + st_mode 40700 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 140 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:00 1988 +stat( 3 ) returned + st_dev (0x0:0x0) + st_ino b + st_mode 40700 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 140 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:00 1988 +stat( 4 ) returned + st_dev (0x0:0x0) + st_ino b + st_mode 40700 + st_nlink 1 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 140 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:00 1988 +stat( 5 ) returned : Too many symbolic links +stat( 6 ) returned : Too many symbolic links +stat( 7 ) returned : Too many symbolic links +stat( 8 ) returned : Too many symbolic links +stat( 9 ) returned : Too many symbolic links + + +Pass an invalid mode to chmod should fail with EPERM +chdir to a file should fail with ENOTDIR +Verify RWX permission on /dir1 via access +chmod of /dir1 to Read/Write +chmod fred should fail with ENOENT +Create under /dir1 should fail with EACCES +chdir to /dir1/dir1 should fail with EACCES +Stat with a NULL buffer should fail with EFAULT + + +chmod of /dir1 to Read/Write +mkdir /dir1/BADNAME should fail with EACCESS + +/dir1 Should exist ( access ) + +/dir1 Should have read permission( access ) + +/dir1 Should have write permission( access ) + +/dir1 Should not have execute permission( access ) + +Restore /dir1 to RWX +chdir to / +Remove /./././dir1/ dir1 +stat( /./././dir1/ dir1 ) returned : No such file or directory +stat( links/dir1_ dir1 ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 2 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:20 1988 +stat( links//links_dir1 d1 ) returned + st_dev (0x0:0x0) + st_ino 9 + st_mode 40700 + st_nlink 2 + st_uid 0 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:20 1988 +Chdir to links/dir1_ dir1 +Chdir to .. should fail with ENOENT +mkdir ../t should fail with ENOENT +mkdir t +chdir to / +rmdir links/dir1_ dir1 should fail with ENOTDIR +unlink links/dir1_ dir1 +unlink links//links_dir1 d1 should fail with ENOTEMPTY +rmdir links//links_dir1 d1/t +unlink links/dir1_ dir1 +Attempting to mount IMFS file system at /dir1/my_mount_point +rmdir /dir1/my_mount_point should fail with EBUSY +Unmount /dir1/my_mount_point +chmod of ////dir1/\//file1\\// to group and other execute +Open ////dir1/\//file1\\// for write should fail with EACCES + Making too many hard links. +Making file /LinkName1 +Making file /LinkName2 +Making file /LinkName3 +Making file /LinkName4 +Making file /LinkName5 +Making file /LinkName6 +Making file /LinkName7 +Making file /LinkName8 +pass fstat a null pointer should fail with EFAULT +chdir to / +Change group of ////dir1/\//file1\\// +stat( ////dir1/\//file1\\// ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100011 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of ////dir1/\//file1\\// +stat( ////dir1/\//file1\\// ) returned + st_dev (0x0:0x0) + st_ino c + st_mode 100011 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of /dir1/file2 +stat( /dir1/file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of /dir1/file2 +stat( /dir1/file2 ) returned + st_dev (0x0:0x0) + st_ino d + st_mode 100000 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of /dir1/file3 +stat( /dir1/file3 ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of /dir1/file3 +stat( /dir1/file3 ) returned + st_dev (0x0:0x0) + st_ino e + st_mode 100000 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of /dir1/file4 +stat( /dir1/file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of /dir1/file4 +stat( /dir1/file4 ) returned + st_dev (0x0:0x0) + st_ino f + st_mode 100000 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of /dir1/dir1/file1 +stat( /dir1/dir1/file1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of /dir1/dir1/file1 +stat( /dir1/dir1/file1 ) returned + st_dev (0x0:0x0) + st_ino 10 + st_mode 100000 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of ../../..//dir1/./././dir1/ file1 +stat( ../../..//dir1/./././dir1/ file1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of ../../..//dir1/./././dir1/ file1 +stat( ../../..//dir1/./././dir1/ file1 ) returned + st_dev (0x0:0x0) + st_ino 11 + st_mode 100000 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of main.c +stat( main.c ) returned + st_dev (0x0:0x0) + st_ino 12 + st_mode 100000 + st_nlink 1 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change owner of main.c +stat( main.c ) returned + st_dev (0x0:0x0) + st_ino 12 + st_mode 100000 + st_nlink 1 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:25 1988 +Change group of dir1/dir1/../../links/dir1 +stat( dir1/dir1/../../links/dir1 ) returned + st_dev (0x0:0x0) + st_ino 4 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 196 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of dir1/dir1/../../links/dir1 +stat( dir1/dir1/../../links/dir1 ) returned : Permission denied +Change group of links/dir2 +stat( links/dir2 ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of links/dir2 +stat( links/dir2 ) returned + st_dev (0x0:0x0) + st_ino 5 + st_mode 40700 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change group of links/dir3 +stat( links/dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of links/dir3 +stat( links/dir3 ) returned + st_dev (0x0:0x0) + st_ino 6 + st_mode 40700 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change group of links/dir4 +stat( links/dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of links/dir4 +stat( links/dir4 ) returned + st_dev (0x0:0x0) + st_ino 7 + st_mode 40700 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 0 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change group of links/dir1_dir1 +stat( links/dir1_dir1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of links/dir1_dir1 +stat( links/dir1_dir1 ) returned + st_dev (0x0:0x0) + st_ino 8 + st_mode 40700 + st_nlink 3 + st_uid 1 + st_gid 0 + st_rdev (0x0:0x0) + st_size 56 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change group of links/dir1_ dir1 +stat( links/dir1_ dir1 ) returned : No such file or directory +Change owner of links/dir1_ dir1 +stat( links/dir1_ dir1 ) returned : No such file or directory +Change group of links/../links/../links/links +stat( links/../links/../links/links ) returned + st_dev (0x0:0x0) + st_ino a + st_mode 40700 + st_nlink 3 + st_uid 0 + st_gid 1 + st_rdev (0x0:0x0) + st_size 924 + st_atime Sat Dec 31 09:00:00 1988 + st_mtime Sat Dec 31 09:00:00 1988 + st_ctime Sat Dec 31 09:00:30 1988 +Change owner of links/../links/../links/links +stat( links/../links/../links/links ) returned : Permission denied + + +*** END OF STAT TEST 01 *** diff --git a/testsuites/psxtests/psxstat/test.c b/testsuites/psxtests/psxstat/test.c new file mode 100644 index 0000000000..db9f47f348 --- /dev/null +++ b/testsuites/psxtests/psxstat/test.c @@ -0,0 +1,834 @@ +/* + * This test exercises stat() via fstat() and generates as many of the + * path evaluation cases as possible. + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAXSYMLINK 5 /* There needs to be a better way of getting this. */ + +/* + * List of files which should exist. + */ + +char *Files[] = { + "////dir1/\\//file1\\\\//", + "/dir1/file2", + "/dir1/file3", + "/dir1/file4", + "/dir1/dir1/file1", + "../../..//dir1/./././dir1/ file1", + "main.c", + 0 +}; + +/* + * List of directories which should exist. + */ + +char *Directories[] = { + "/dir1", + "/dir2", + "/dir3", + "/dir4", + "/dir1/dir1", + "/./././dir1/ dir1", + "/./././links", + "///dir1/dir1/../../dir1/../symlinks/////", + 0 +}; + +char *Links_to_Dirs[]= { + "dir1/dir1/../../links/dir1", + "links/dir2", + "links/dir3", + "links/dir4", + "links/dir1_dir1", + "links/dir1_ dir1", + "links/../links/../links/links", + 0 +}; + +char *Links_to_Files[]= { + "links/dir1_file1", + "links/dir1_file2", + "links/dir1_file3", + "links/dir1_file4", + "links/dir1_dir1_f1", + "links/dir1_dir1 f1", + 0 +}; + +char *Links_to_dirlinks[]= { + "links/links/links/links_dir1", + "links//links_dir2", + "links//links_dir3", + "links//links_dir4", + "links//links_dir1_d1", + "links//links_dir1 d1", + "links//links_links", + 0 +}; + +char *Links_to_filelinks[]= { + "links///links_d1_file1", + "links///links_d1_file2", + "links///links_d1_file3", + "links///links_d1_file4", + "links///links_d1_d1_f1", + "links///links_r1_d1 f1", + 0 +}; + +char *SymLinks[]= { + "/symlinks/a_file_symlink", + "/symlinks/a_dir_symlink", + "/symlinks/a_link_symlink", + "../symlinks/no_file", + "/symlinks/a_dir_symlink/a_file_symlink", + 0 +}; + +/* + * List of absolute paths to stat. + */ + +char *Good_absolute_paths[] = { + "/dev", + "////dir1/\\//file1\\\\//", + "/dir1/\\\\/file2", + "/dir1/file3/////\\\\\\", + "/dir1/file4", + "/dir1/dir1/file1", + "/dir1/dir1/ file1", + "/dir1", + "/dir2//////\\", + "/dir3", + "/dir4", + "/dir1/dir1", + "/dir1/ dir1///\\\\", + "/\\/\\/\\/\\/\\/\\/links\\/\\/\\/\\/\\/\\", + 0 +}; + + +char *Bad_paths[] = { + "/links/ENAMETOOLONG___", + "/dir1/file4/NOTADIR", + "/dir1/dir1/EACCES__", + 0 +}; + +/* + * List of relative paths to stat. + */ + +char *Good_relative_paths[] = { + "dev", + "dir1/\\//file1\\\\//", + "dir1/\\\\/file2", + "dir1/file3/////\\\\\\", + "dir1/file4", + "dir1/dir1/file1", + "dir1/dir1/ file1", + "dir1", + "dir2//////\\", + "dir3", + "dir4", + "dir1/dir1", + "dir1/ dir1///\\\\", + "main.c", + 0 +}; + +/* + * Do a stat on a single file and report the status. + */ + +void stat_a_file( + const char *file +) +{ + int status; + struct stat statbuf; + int major1; + int minor1; + int major2; + int minor2; + + + assert( file ); + + printf( "stat( %s ) returned ", file ); + fflush( stdout ); + + status = stat( file, &statbuf ); + + if ( status == -1 ) { + printf( ": %s\n", strerror( errno ) ); + } else { + + rtems_filesystem_split_dev_t( statbuf.st_dev, major1, minor1 ); + rtems_filesystem_split_dev_t( statbuf.st_rdev, major2, minor2 ); + + + printf("\n st_dev (0x%x:0x%x)\n", major1, minor1 ); + printf( " st_ino %x\n", statbuf.st_ino ); + printf( " st_mode %o\n", statbuf.st_mode ); + printf( " st_nlink %x\n", statbuf.st_nlink ); + printf( " st_uid %d\n", statbuf.st_uid ); + printf( " st_gid %d\n", statbuf.st_gid ); + printf( " st_rdev (0x%x:0x%x)\n", major2, minor2 ); + printf( " st_size %d\n",(unsigned int) statbuf.st_size ); + printf( " st_atime %s", ctime( &statbuf.st_atime ) ); + printf( " st_mtime %s", ctime( &statbuf.st_mtime ) ); + printf( " st_ctime %s", ctime( &statbuf.st_ctime ) ); +#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__) + printf( " st_blksize %x\n", statbuf.st_blksize ); + printf( " st_blocks %x\n", statbuf.st_blocks ); +#endif + + } +} + +/* + * stat() multiple files at a time + */ + +void stat_multiple_files( + char **files +) +{ + int i; + + i = 0; + while ( files[i] ) { + stat_a_file( files[i] ); + i++; + } +} + +/* + * chown() multiple files at a time + */ +void chown_multiple_files( + char **files +) +{ + int i; + uid_t st_uid; + gid_t st_gid; + +#if defined(RTEMS_POSIX_API) + st_uid = geteuid(); + st_gid = getegid(); +#else + st_uid = 100; + st_gid = 0; +#endif + + i = 0; + while ( files[i] ) { + printf("Change group of %s\n", files[i]); + chown( files[i], st_uid, (st_gid+1) ); + stat_a_file( files[i] ); + + printf("Change owner of %s\n", files[i]); + chown( files[i], (st_uid+1), st_gid ); + stat_a_file( files[i] ); + i++; + } + +} + + + +/* + * mknod() multiple files at a time + */ + +void make_multiple_files( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making file %s\n", files[i] ); + status = mknod( files[i], ( S_IFREG | S_IROTH|S_IWOTH ), 0LL ); + assert( !status ); + i++; + } + puts( "" ); +} + +void make_multiple_bad_files( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making file %s ", files[i] ); + status = mknod( files[i], ( S_IFREG | S_IROTH|S_IWOTH ), 0LL ); + assert( status ); + printf( ": %s\n", strerror( errno ) ); + i++; + } + puts( "" ); +} + +void make_multiple_links( + char **existing, + char **new +) +{ + int i; + int status; + + i = 0; + while ( new[i] && existing[i] ) { + printf( "Making file %s\n", new[i] ); + status = link( existing[i], new[i] ); + assert( !status ); + i++; + } + puts( "" ); + + status = link( "fred", "bob" ); + assert( status == -1 ); + + status = link( existing[1], "doug/bob" ); + assert( status == -1 ); +} + + +void make_too_many_links() +{ + int i; + int status; + char name [20]; + + status = mkdir("/dummy", S_IRWXU ); + assert( status == 0 ); + + for (i=1; i<= LINK_MAX; i++) { + + sprintf(name,"/LinkName%d",i); + printf( "Making file %s\n", name ); + status = link("/dummy" , name ); + if( i < LINK_MAX ) + assert( !status ); + else + assert( status == -1 ); + + } +} + + +void make_a_symlink( + char *existing, + char *new +) +{ + int status; + char buf[100]; + int len; + + memset( buf, 0, 100 ); + + printf( "Making file %s\n", new ); + status = symlink( existing, new ); + assert( !status ); + + printf( "Verify with readlink\n"); + status = readlink( new, buf, 100 ); + len = strlen( existing ); + assert ( status == len ); + + status = readlink( new, buf, 3 ); + len = strlen( existing ); + if (len < 3 ) + assert( status == len ); + else + assert( status == 3 ); + + status = strcmp( existing, buf ); + assert( !status ); +} + +void make_multiple_symlinks() +{ + int status; + + make_a_symlink( Files[0], SymLinks[0] ); + make_a_symlink( Directories[0], SymLinks[1] ); + make_a_symlink( Links_to_dirlinks[0], SymLinks[2] ); + make_a_symlink( "No_File", SymLinks[3] ); + make_a_symlink( SymLinks[1], SymLinks[4] ); + make_a_symlink( "//links", "/symlinks/links" ); + + stat_a_file( SymLinks[0] ); + stat_a_file( SymLinks[1] ); + stat_a_file( SymLinks[2] ); + stat_a_file( SymLinks[3] ); + stat_a_file( SymLinks[4] ); + + status = symlink( "//links", "bob/frank" ); + assert (status == -1); + +} +/* +void make_too_many_symlinks() +{ + int i, status; + char name1[8]; + + for (i=1; i <= MAXSYMLINK; i++) { + sprintf( name1, "SymLink%d", i ); + status = symlink( "/dummy", name1 ); + if( i < MAXSYMLINK ) + assert( !status ); + else + assert( status == -1 ); + } +} +*/ +void make_many_symlinks( + char *real_file, + int link_count +) +{ + int i; + char name1[5]; + char name2[5]; + char *link_file; + + link_file = real_file; + for (i=1; i < link_count; i++) { + sprintf( name1, "%d", i ); + make_a_symlink( link_file, name1 ); + strcpy( name2, name1 ); + link_file = name2; + } + + for (i=1; i < link_count; i++) { + sprintf( name1, "%d", i ); + stat_a_file( name1 ); + } + +} + +/* + * mkdir() multiple directories at a time + */ + +void make_multiple_directories( + char **files +) +{ + int i; + int status; + + i = 0; + while ( files[i] ) { + printf( "Making directory %s\n", files[i] ); + status = mkdir( files[i], S_IRWXU ); + assert( !status ); + i++; + } + puts( "" ); +} + +/* + * Cause faults. + */ + + +void Cause_faults() +{ + int fd; + int status; + char longer_name[100]; + rtems_filesystem_mount_table_entry_t *mt_entry; + + /* + * Verify chmod with an invalid type. + */ + + printf("\n\nPass an invalid mode to chmod should fail with EPERM \n" ); + status = chmod( Files[0], S_IFREG ); + assert( status == -1 ); + assert( errno == EPERM ); + + /* + * Try to chdir to a file. + */ + + printf("chdir to a file should fail with ENOTDIR\n"); + status = chdir( Files[0] ); + assert( status == -1 ); + assert( errno == ENOTDIR ); + + /* + * Change mode to read/write on a directory. + * Verify directory works properly. + */ + + printf("Verify RWX permission on %s via access\n", Directories[0]); + status = access( Directories[0], ( R_OK | W_OK | X_OK ) ); + assert( status == 0 ); + + printf( "chmod of %s to Read/Write\n", Directories[0] ); + status = chmod( Directories[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf( "chmod fred should fail with ENOENT\n" ); + status = chmod( "fred", (S_IXGRP | S_IXOTH) ); + assert( status == -1 ); + assert( errno == ENOENT ); + + strcpy(longer_name, Directories[0] ); + strcat(longer_name, "/BADNAME" ); + printf( "Create under %s should fail with EACCES\n", Directories[0] ); + status = mkdir( longer_name , S_IRWXU ); + assert( status == -1 ); + assert( errno == EACCES ); + + printf("chdir to %s should fail with EACCES\n", Directories[4] ); + status = chdir( Directories[4] ); + assert( status == -1 ); + assert( errno == EACCES ); + + /* + * Check stat with a NULL buffer. + */ + + printf("Stat with a NULL buffer should fail with EFAULT\n"); + status = stat( Directories[0], NULL ); + assert( status == -1 ); + assert( errno == EFAULT ); + + /* + * Set current to a directory with no owner permissions. + * Verify it works properly. + */ + + printf( "\n\nchmod of %s to Read/Write\n", Directories[0] ); + status = chmod( Directories[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf("mkdir %s should fail with EACCESS\n", longer_name ); + status = mkdir( longer_name , S_IRWXU ); + assert( status == -1 ); + assert( errno == EACCES ); + + printf("\n%s Should exist ( access )\n",Directories[0] ); + status = access( Directories[0], F_OK ); + assert( status == 0 ); + printf("\n%s Should have read permission( access )\n",Directories[0] ); + status = access( Directories[0], R_OK ); + assert( status != 0 ); + printf("\n%s Should have write permission( access )\n",Directories[0] ); + status = access( Directories[0], W_OK ); + assert( status != 0 ); + printf("\n%s Should not have execute permission( access )\n",Directories[0] ); + status = access( Directories[0], X_OK ); + assert( status != 0 ); + + printf("\nRestore %s to RWX\n",Directories[0] ); + status = chmod( Directories[0], S_IRWXU ); + assert( status == 0 ); + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + + /* + * Remove one of the directories. + * Verify links to the removed directory still work. + */ + + printf( "Remove %s\n", Directories[5] ); + status = rmdir( Directories[5] ); + assert( status == 0 ); + + stat_a_file( Directories[5] ); + status = access( Directories[5], F_OK ); + assert( status != 0 ); + + stat_a_file( Links_to_Dirs[5] ); + status = readlink( Links_to_Dirs[5], longer_name, 3 ); + assert( status == -1 ); + assert( errno == EINVAL ); + + stat_a_file( Links_to_dirlinks[5] ); + printf("Chdir to %s\n", Links_to_Dirs[5] ); + status = chdir( Links_to_Dirs[5] ); + assert( status == 0 ); + + /* + * Verify we cannot move up from a node with no parent node. + */ + + printf("Chdir to .. should fail with ENOENT\n" ); + status = chdir( ".." ); + assert( status == -1 ); + assert( errno == ENOENT ); + + /* + * Create a subdirectory under the dangling node. + */ + + printf("mkdir ../t should fail with ENOENT\n" ); + status = mkdir( "../t" , S_IRWXU ); + assert( status == -1 ); + assert( errno == ENOENT ); + + printf("mkdir t\n"); + status = mkdir( "t" , S_IRWXU ); + assert( status == 0 ); + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + + /* + * Check rmdir, rmnod, and unlink + */ + + printf("rmdir %s should fail with ENOTDIR\n", Links_to_Dirs[5] ); + status = rmdir( Links_to_Dirs[5] ); + assert( status == -1 ); + assert( errno == ENOTDIR ); + + printf("unlink %s\n", Links_to_Dirs[5] ); + status = unlink( Links_to_Dirs[5] ); + assert( status == 0 ); + + printf("unlink %s should fail with ENOTEMPTY\n", Links_to_dirlinks[5] ); + status = unlink( Links_to_dirlinks[5] ); + assert( status == -1 ); + assert( errno == ENOTEMPTY ); + + strcpy( longer_name, Links_to_dirlinks[5] ); + strcat( longer_name, "/t"); + printf("rmdir %s\n", longer_name ); + status = rmdir( longer_name ); + assert( status == 0 ); + + printf("unlink %s\n", Links_to_Dirs[5]); + status = unlink( Links_to_dirlinks[5] ); + assert( status == 0 ); + + status = chdir( Directories[0] ); + status = mkdir ( "my_mount_point", S_IRWXU ); + assert( status == 0 ); + + printf("Attempting to mount IMFS file system at /dir1/my_mount_point \n"); + status = mount( + &mt_entry, + &IMFS_ops, + "RW", + NULL, + "/dir1/my_mount_point" ); + assert( status == 0 ); + + printf("rmdir /dir1/my_mount_point should fail with EBUSY\n"); + status = rmdir ("/dir1/my_mount_point" ); + assert( status == -1 ); + assert( errno == EBUSY ); + + printf( "Unmount /dir1/my_mount_point\n"); + status = unmount( "/dir1/my_mount_point" ); + assert( status == 0 ); + + /* + * Verify write permission is checked. + */ + + printf("chmod of %s to group and other execute\n", Files[0] ); + status = chmod (Files[0], (S_IXGRP | S_IXOTH) ); + assert( status == 0 ); + + printf("Open %s for write should fail with EACCES\n", Files[0] ); + fd = open (Files[0], O_WRONLY); + assert( fd == -1 ); + assert( errno == EACCES ); + + printf("chmod of %s to User Execute and Read\n", Directories[3] ); + status = chmod (Directories[3], (S_IXUSR | S_IRUSR) ); + assert( status == 0 ); + strcpy(longer_name, Directories[3] ); + strcat(longer_name, "/NewFile" ); + printf("Mkdir of %s should fail with EACCES\n",longer_name ); + status = mkdir( longer_name, S_IRWXU ); + assert( status != 0 ); + assert( errno == EACCES ); + + printf(" Making too many hard links.\n" ); + make_too_many_links( ); + + printf( "pass fstat a null pointer should fail with EFAULT\n"); + status = fstat( fd, NULL ); + assert( status == -1 ); + assert( errno == EFAULT); + + /* + * The current directory MUST be restored at the end of this test. + */ + + printf("chdir to / \n"); + status = chdir( "/" ); + assert( status == 0 ); + +} + +void Show_Time() +{ + rtems_time_of_day time; + rtems_status_code status; + + status = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); + printf(">>>>Current Time: "); + print_time( " - rtems_clock_get - ", &time, "\n" ); +} + +/* + * main entry point to the test + */ + +#if defined(__rtems__) +int test_main(void) +#else +int main( + int argc, + char **argv +) +#endif +{ + rtems_status_code status; + rtems_time_of_day time; + + puts( "\n\n*** STAT TEST 01 ***" ); + + build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); + status = rtems_clock_set( &time ); + + /* + * Create the files and directories for the test. + */ + Show_Time(); + + make_multiple_directories( Directories ); + make_multiple_files( Files ); + make_multiple_links( Directories, Links_to_Dirs ); + make_multiple_links( Files, Links_to_Files ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + make_multiple_links( Links_to_Dirs, Links_to_dirlinks ); + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + make_multiple_links( Links_to_Files, Links_to_filelinks ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + + /* + * Now go through all the absolute path. + */ + + puts( "Doing the stat() on all the good absolute paths" ); + stat_multiple_files( Good_absolute_paths ); + + /* + * run through the relative paths. + */ + + puts( "\nDoing the stat() on all the good relative paths" ); + stat_multiple_files( Good_relative_paths ); + + /* + * Change directory and releative paths are now bad. + */ + + puts("\nchdir to dev"); + chdir("dev"); + puts("\nstat relative paths that are now bad"); + stat_multiple_files( Good_relative_paths ); + + /* + * Change directory to the link directory and follow links. + */ + + puts("\nchdir to ../links"); + chdir("../links"); + puts("Doing the stat() on good links\n"); + stat_multiple_files( Links_to_Dirs ); + stat_multiple_files( Links_to_Files ); + stat_multiple_files( Links_to_dirlinks ); + stat_multiple_files( Links_to_filelinks ); + + /* + * Chmod on dir1/dir1. This allows the error path to be hit. + */ + + printf( "chmod of %s to Read/Write\n", Directories[4] ); + chmod( Directories[4], (S_IROTH|S_IWOTH) ); + puts( "\nDoing the stat() on all the bad paths" ); + + stat_multiple_files( Bad_paths ); + make_multiple_bad_files( Bad_paths ); + + printf( "Return %s to RWX\n", Directories[4] ); + chmod( Directories[4], S_IRWXU ); + + + /* + * Check out symbolic links. + */ + + make_multiple_symlinks(); + make_many_symlinks( "/symlinks", 10 ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + Cause_faults(); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + chown_multiple_files( Files ); + + status = rtems_task_wake_after( 5 * TICKS_PER_SECOND ); + chown_multiple_files( Links_to_Dirs ); + + puts( "\n\n*** END OF STAT TEST 01 ***" ); + exit(0); +} + + + + + + + -- cgit v1.2.3