From c2f9b97543401e51fd2f72b71fa71bffbd209c12 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Thu, 3 Dec 1998 22:41:57 +0000 Subject: Cleaned up test. Updated scn files to match present expected test output. --- c/src/tests/psxtests/psx13/psx13.scn | 15 ++ c/src/tests/psxtests/psx13/test.c | 76 +++--- c/src/tests/psxtests/psxfile01/psxfile01.scn | 336 +++++++++++++-------------- c/src/tests/psxtests/psxfile01/test.c | 1 + c/src/tests/psxtests/psxmount/psxmount.scn | 86 +++++++ c/src/tests/psxtests/psxmount/test.c | 241 +++++++++++-------- c/src/tests/psxtests/psxreaddir/test.c | 45 +++- 7 files changed, 480 insertions(+), 320 deletions(-) (limited to 'c/src/tests/psxtests') diff --git a/c/src/tests/psxtests/psx13/psx13.scn b/c/src/tests/psxtests/psx13/psx13.scn index e69de29bb2..0fe90db450 100644 --- a/c/src/tests/psxtests/psx13/psx13.scn +++ b/c/src/tests/psxtests/psx13/psx13.scn @@ -0,0 +1,15 @@ + +Files initialized successfully. +Testing device_lseek()... Success. +Testing dup()............ Success. +Testing dup2()........... Success. +Testing fdatasync()...... Success. +Testing umask().......... Success. +Testing utime().......... Success. +Testing pipe()........... Success. +Testing fsync().......... Success. +Testing pathconf()....... Success. +Testing fpathconf()...... Success. + + +*** END OF TEST PSX13 *** \ No newline at end of file diff --git a/c/src/tests/psxtests/psx13/test.c b/c/src/tests/psxtests/psx13/test.c index 733b8824a7..06a35d623f 100644 --- a/c/src/tests/psxtests/psx13/test.c +++ b/c/src/tests/psxtests/psx13/test.c @@ -161,8 +161,8 @@ int DupTest(void) { if (fd2 != -1) { - fcntl(F_SETFL, fd1, O_APPEND); - flags = fcntl(F_GETFL, fd2); + fcntl(fd1, F_SETFL, O_APPEND); + flags = fcntl(fd2, F_GETFL); close (fd1); @@ -214,8 +214,8 @@ int Dup2Test(void) { if (error != -1) { - fcntl(F_SETFL, fd1, O_APPEND); - flags = fcntl(F_GETFL, fd1); + fcntl(fd1, F_SETFL, O_APPEND); + flags = fcntl(fd1, F_GETFL); flags = (flags & O_APPEND); retval = (flags == O_APPEND); @@ -600,76 +600,74 @@ int main( #endif { if (InitFiles() == TRUE) { - puts ("\nFiles initialized successfully.\n"); + printf ("\nFiles initialized successfully.\n"); - puts ("Testing device_lseek()..."); + printf ("Testing device_lseek()... "); if (DeviceLSeekTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing dup()..."); + printf ("Testing dup()............ "); if (DupTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing dup2()..."); + printf ("Testing dup2()........... "); if (Dup2Test() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing fdatasync()..."); + printf ("Testing fdatasync()...... "); if (FDataSyncTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing umask()..."); + printf ("Testing umask().......... "); if (UMaskTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing utime()..."); + printf ("Testing utime().......... "); if (UTimeTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing pipe()..."); + printf ("Testing pipe()........... "); if (PipeTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing fsync()..."); + printf ("Testing fsync().......... "); if (FSyncTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing pathconf()..."); + printf ("Testing pathconf()....... "); if (PathConfTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); - puts ("Testing fpathconf()..."); + printf ("Testing fpathconf()...... "); if (FPathConfTest() == TRUE) - puts ("Success.\n"); + printf ("Success.\n"); else - puts ("Failed!!!\n"); + printf ("Failed!!!\n"); } else - puts ("\n\nError opening files for write!!!!\n"); + printf ("\n\nError opening files for write!!!!\n"); - puts( "\n\n*** XXX ***" ); - - puts( "\n\n*** END OF TEST PSX13 ***" ); + printf( "\n\n*** END OF TEST PSX13 ***" ); exit(0); } diff --git a/c/src/tests/psxtests/psxfile01/psxfile01.scn b/c/src/tests/psxtests/psxfile01/psxfile01.scn index e105dafb89..bc051aae14 100644 --- a/c/src/tests/psxtests/psxfile01/psxfile01.scn +++ b/c/src/tests/psxtests/psxfile01/psxfile01.scn @@ -1,168 +1,168 @@ - - -*** FILE TEST 1 *** -*************** Dump of Entire IMFS *************** -/ - dev/ - console (device 0, 0) -*************** End of Dump *************** -stat of /dev/console - st_dev (0x0:0x0) - st_ino 3 - mode = 00020771 - nlink = 1 - uid = 0 - gid = 0 - atime = Fri Jan 01 00:00:00 1988 - mtime = Fri Jan 01 00:00:00 1988 - ctime = Fri Jan 01 00:00:00 1988 - -mkdir /dev/tty - -mkdir /usr -mkdir /etc -mkdir /tmp -mkdir /tmp/.. -mkdir /tmp/ -mkdir /j/j1 -mkdir tmp - -rmdir /usr -mkdir /etc/passwd/j -open /tmp/joel - should fail with ENOENT -open /tmp/j -open returned file descriptor 3 -close /tmp/j -unlink /tmp/j -(0)the first write!!! - -(10)the first write!!! - -stat( /tmp/joel ) returned st_dev (0x1a7f8:0x3e86f0) - st_ino d - mode = 00100700 - nlink = 1 - uid = 0 - gid = 0 - atime = Sat Dec 31 09:00:00 1988 - mtime = Sat Dec 31 09:00:00 1988 - ctime = Sat Dec 31 09:00:00 1988 -(514)the first write!!! - -(513)the first write!!! - -(24)the first write!!! - -(2)the first write!!! - -(1)the first write!!! - -(0)the first write!!! - -(0)rst write!!! - -(513)the first write!!! - -(139743) -stat( /tmp/joel ) returned st_dev (0x1a7f8:0x3e86f0) - st_ino e - mode = 00100700 - nlink = 1 - uid = 0 - gid = 0 - atime = Sat Dec 31 09:00:00 1988 - mtime = Sat Dec 31 09:00:00 1988 - ctime = Sat Dec 31 09:00:00 1988 -stat of /tmp/j -stat(/tmp/j) returned -1 (errno=2) - st_dev (0x0:0x0) - st_ino 3 - mode = 00020771 - nlink = 1 - uid = 0 - gid = 0 - atime = Fri Jan 01 00:00:00 1988 - mtime = Fri Jan 01 00:00:00 1988 - ctime = Fri Jan 01 00:00:00 1988 -fopen of /tmp/j -fprintf to /tmp/j -(1) 26 characters written to the file -(2) 26 characters written to the file -(3) 26 characters written to the file -(4) 26 characters written to the file -(5) 26 characters written to the file - st_dev (0x0:0x0) - st_ino f - mode = 00100660 - nlink = 1 - uid = 0 - gid = 0 - atime = Sat Dec 31 09:00:00 1988 - mtime = Sat Dec 31 09:00:00 1988 - ctime = Sat Dec 31 09:00:00 1988 -This is call 1 to fprintf -This is call 2 to fprintf -This is call 3 to fprintf -This is call 4 to fprintf -This is call 5 to fprintf - st_dev (0x0:0x0) - st_ino f - mode = 00100660 - nlink = 1 - uid = 0 - gid = 0 - atime = Sat Dec 31 09:00:01 1988 - mtime = Sat Dec 31 09:00:00 1988 - ctime = Sat Dec 31 09:00:00 1988 -*************** Dump of Entire IMFS *************** -/ - dev/ - console (device 0, 0) - tty/ - S3 (device 255, 128) - test_console (device 0, 0) - etc/ - passwd (file 0 0x0 0x0 0x0) - tmp/ - joel (file 279487 0x3d5ac0 0x3d5570 0x3d5020) - j (file 130 0x37f530 0x0 0x0) -*************** End of Dump *************** -truncate /tmp/j to length of 40 - st_dev (0x0:0x0) - st_ino f - mode = 00100660 - nlink = 1 - uid = 0 - gid = 0 - atime = Sat Dec 31 09:00:02 1988 - mtime = Sat Dec 31 09:00:00 1988 - ctime = Sat Dec 31 09:00:00 1988 -*************** Dump of Entire IMFS *************** -/ - dev/ - console (device 0, 0) - tty/ - S3 (device 255, 128) - test_console (device 0, 0) - etc/ - passwd (file 0 0x0 0x0 0x0) - tmp/ - j (file 40 0x37f530 0x0 0x0) -*************** End of Dump *************** -truncate /tmp/j to length of 0 -truncate /tmp to length of 0 should fail with EISDIR - -21: Is a directory -*************** Dump of Entire IMFS *************** -/ - dev/ - console (device 0, 0) - tty/ - S3 (device 255, 128) - test_console (device 0, 0) - etc/ - passwd (file 0 0x0 0x0 0x0) - tmp/ - j (file 0 0x37f530 0x0 0x0) -*************** End of Dump *************** -*** END OF FILE TEST 1 *** + + +*** FILE TEST 1 *** +*************** Dump of Entire IMFS *************** +/ + dev/ + console (device 0, 0) +*************** End of Dump *************** +stat of /dev/console + st_dev (0x0:0x0) + st_ino 3 + mode = 00020771 + nlink = 1 + uid = 0 + gid = 0 + atime = Fri Jan 01 00:00:00 1988 + mtime = Fri Jan 01 00:00:00 1988 + ctime = Fri Jan 01 00:00:00 1988 + +mkdir /dev/tty + +mkdir /usr +mkdir /etc +mkdir /tmp +mkdir /tmp/.. +mkdir /tmp/ +mkdir /j/j1 +mkdir tmp + +rmdir /usr +mkdir /etc/passwd/j +open /tmp/joel - should fail with ENOENT +open /tmp/j +open returned file descriptor 3 +close /tmp/j +unlink /tmp/j +(0)the first write!!! + +(10)the first write!!! + +stat( /tmp/joel ) returned st_dev (0x1a7f8:0x3e86f0) + st_ino d + mode = 00100700 + nlink = 1 + uid = 0 + gid = 0 + atime = Sat Dec 31 09:00:00 1988 + mtime = Sat Dec 31 09:00:00 1988 + ctime = Sat Dec 31 09:00:00 1988 +(514)the first write!!! + +(513)the first write!!! + +(24)the first write!!! + +(2)the first write!!! + +(1)the first write!!! + +(0)the first write!!! + +(0)rst write!!! + +(513)the first write!!! + +(139743) +stat( /tmp/joel ) returned st_dev (0x1a7f8:0x3e86f0) + st_ino e + mode = 00100700 + nlink = 1 + uid = 0 + gid = 0 + atime = Sat Dec 31 09:00:00 1988 + mtime = Sat Dec 31 09:00:00 1988 + ctime = Sat Dec 31 09:00:00 1988 +stat of /tmp/j +stat(/tmp/j) returned -1 (errno=2) + st_dev (0x0:0x0) + st_ino 3 + mode = 00020771 + nlink = 1 + uid = 0 + gid = 0 + atime = Fri Jan 01 00:00:00 1988 + mtime = Fri Jan 01 00:00:00 1988 + ctime = Fri Jan 01 00:00:00 1988 +fopen of /tmp/j +fprintf to /tmp/j +(1) 26 characters written to the file +(2) 26 characters written to the file +(3) 26 characters written to the file +(4) 26 characters written to the file +(5) 26 characters written to the file + st_dev (0x0:0x0) + st_ino f + mode = 00100660 + nlink = 1 + uid = 0 + gid = 0 + atime = Sat Dec 31 09:00:00 1988 + mtime = Sat Dec 31 09:00:00 1988 + ctime = Sat Dec 31 09:00:00 1988 +This is call 1 to fprintf +This is call 2 to fprintf +This is call 3 to fprintf +This is call 4 to fprintf +This is call 5 to fprintf + st_dev (0x0:0x0) + st_ino f + mode = 00100660 + nlink = 1 + uid = 0 + gid = 0 + atime = Sat Dec 31 09:00:01 1988 + mtime = Sat Dec 31 09:00:00 1988 + ctime = Sat Dec 31 09:00:00 1988 +*************** Dump of Entire IMFS *************** +/ + dev/ + console (device 0, 0) + tty/ + S3 (device 255, 128) + test_console (device 0, 0) + etc/ + passwd (file 0 0x0 0x0 0x0) + tmp/ + joel (file 279487 0x3d5ac0 0x3d5570 0x3d5020) + j (file 130 0x37f530 0x0 0x0) +*************** End of Dump *************** +truncate /tmp/j to length of 40 + st_dev (0x0:0x0) + st_ino f + mode = 00100660 + nlink = 1 + uid = 0 + gid = 0 + atime = Sat Dec 31 09:00:02 1988 + mtime = Sat Dec 31 09:00:00 1988 + ctime = Sat Dec 31 09:00:00 1988 +*************** Dump of Entire IMFS *************** +/ + dev/ + console (device 0, 0) + tty/ + S3 (device 255, 128) + test_console (device 0, 0) + etc/ + passwd (file 0 0x0 0x0 0x0) + tmp/ + j (file 40 0x37f530 0x0 0x0) +*************** End of Dump *************** +truncate /tmp/j to length of 0 +truncate /tmp to length of 0 should fail with EISDIR + +21: Is a directory +*************** Dump of Entire IMFS *************** +/ + dev/ + console (device 0, 0) + tty/ + S3 (device 255, 128) + test_console (device 0, 0) + etc/ + passwd (file 0 0x0 0x0 0x0) + tmp/ + j (file 0 0x37f530 0x0 0x0) +*************** End of Dump *************** +*** END OF FILE TEST 1 *** diff --git a/c/src/tests/psxtests/psxfile01/test.c b/c/src/tests/psxtests/psxfile01/test.c index ef0d737d44..bbfaafdace 100644 --- a/c/src/tests/psxtests/psxfile01/test.c +++ b/c/src/tests/psxtests/psxfile01/test.c @@ -238,6 +238,7 @@ int main( status = rmdir ("/fred"); assert (status == -1); + assert( errno == ENOENT ); status = mknod( "/dev/test_console", S_IFCHR, 0LL ); assert( !status ); diff --git a/c/src/tests/psxtests/psxmount/psxmount.scn b/c/src/tests/psxtests/psxmount/psxmount.scn index e69de29bb2..a186517e4f 100644 --- a/c/src/tests/psxtests/psxmount/psxmount.scn +++ b/c/src/tests/psxtests/psxmount/psxmount.scn @@ -0,0 +1,86 @@ + + +*** MOUNT/UNMOUNT TEST *** + +chdir to the root directory +chdir() status : 0 + + +Creating a series of directories under / +Creating : a 0 0 Success +Creating : b 0 0 Success +Creating : c 0 0 Success +Creating : d 0 0 Success +Creating : e 0 0 Success +Creating : f 0 0 Success +Creating : c/y 0 0 Success +Creating : c/z 0 0 Success +Creating : c/x 0 0 Success +Creating : c/y/a3333 0 0 Success +Creating : c/y/j123 0 0 Success +Creating : c/y/my_mount_point 0 0 Success +Creating : c/y/my_mount_point/my_dir 0 0 Success +Creating : c/z/my_mount_point 0 0 Success +create /b/my_file +Verify /b/my_file +create c/y/my_mount_point/my_dir/d +Verify c/y/my_mount_point/my_dir/d +Attempting to mount IMFS file system at /c/z/my_mount_point +2nd file system successfully mounted at /c/z/my_mount_point + +chdir to /c/z/my_mount_point. +chdir() status : 0 + + +Creating a series of directories under /c/z/my_mount_point +Creating: a 0 2 Success +Creating: b 0 2 Success +Creating: c 0 2 Success +Creating: d 0 2 Success +Creating: e 0 2 Success +Creating: f 0 2 Success +Creating: c/y 0 2 Success +Creating: c/z 0 2 Success +Creating: c/x 0 2 Success +Creating: c/y/a3333 0 2 Success +Creating: c/y/j123 0 2 Success +Creating: c/y/my_mount_point 0 2 Success +Creating: c/y/my_mount_point/my_dir 0 2 Success +Creating: c/y/my_mount_point/my_dir/d 0 2 Success +Creating: c/z/my_mount_point 0 2 Success +Creating: /c/z/my_mount_point/a/../../my_mount_point/a/g 0 2 Success + +chdir to / +chdir() status : 0 + +Unmount status: 0 +Mount a NULL file system and verify EINVAL +mount with option RA should fail with EINVAL +Mount a Read Only filesystem at /c/y/my_mount_point +Read only file system successfully mounted at /c/y/my_mount_point +create c/y/my_mount_point/../../y/my_mount_point/new_dir +Verify a mount point retruns EBUSY for another mount +Mount on a file should fail with ENOTDIR +Create and chdir to /c/y/my_mount_point/mydir + unmount of /c/y/my_mount_point should fail with EBUSY +chdir to / and verify we can unmount /c/y/my_mount_point + unmount /c/y/my_mount_point + unmount /b/mount_point should fail with EINVAL +Mount /c/y/my_mount_point +Create and open /c/y/my_mount_point/my_file + +mkdir /c/y/my_mount_point/my_dir +Open /c/y/my_mount_point/my_dir +Unmount /c/y/my_mount_point should fail with EBUSY +Close /c/y/my_mount_point/my_dir +Unmount /c/y/my_mount_point/my_dir +Mount a file system at /c/y/my_mount_point/my_dir +unmount /c/y/my_mount_point should fail with EBUSY +Verify a hard link across filesystems fails with EXDEV +Verify a symbolic link across file systems works +unmount /c/y/my_mount_point/my_dir +Verify the symbolic link now fails +unmount /c/y/my_mount_point + + +*** END OF MOUNT/UNMOUNT TEST *** diff --git a/c/src/tests/psxtests/psxmount/test.c b/c/src/tests/psxtests/psxmount/test.c index 4555709bd7..a2a249a35d 100644 --- a/c/src/tests/psxtests/psxmount/test.c +++ b/c/src/tests/psxtests/psxmount/test.c @@ -99,6 +99,11 @@ int main( printf( "\n\n*** MOUNT/UNMOUNT TEST ***\n" ); + /* + * Change directory to the root and create files under + * the base file system. + */ + printf( "\nchdir to the root directory\n" ); status = chdir( "/" ); printf( "chdir() status : %d\n\n", status ); @@ -108,7 +113,7 @@ int main( while ( strcmp(dnames[i], "END") != 0 ) { status = mkdir( dnames[i], 0777 ); - printf("Creating directory: %s %d %d ", dnames[i], status, errno ); + printf("Creating : %25s %d %d ", dnames[i], status, errno ); if ( status == 0 ) printf(" Success\n"); else @@ -117,16 +122,36 @@ int main( i++; } + /* + * Create a Files with all rwx for others group and user. Verify + * the created file. + */ + + printf("create /b/my_file\n"); fd = open ("/b/my_file", O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); + assert( fd != 0 ); close (fd); + + printf("Verify /b/my_file\n"); fd = open("/b/my_file", S_IRWXU|S_IRWXG|S_IRWXO); + assert( fd != 0 ); close( fd ); + + printf("create c/y/my_mount_point/my_dir/d\n"); fd = open ("c/y/my_mount_point/my_dir/d", O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); + assert( fd != 0 ); close (fd); + + printf("Verify c/y/my_mount_point/my_dir/d\n"); fd = open("c/y/my_mount_point/my_dir/d", S_IRWXU|S_IRWXG|S_IRWXO); + assert( fd != 0 ); close( fd ); + /* + * Mount an the IMFS file system on the base file system. + */ + printf("Attempting to mount IMFS file system at /c/z/my_mount_point \n"); status = mount( &mt_entry, @@ -142,8 +167,12 @@ int main( printf("2nd file system successfully mounted at /c/z/my_mount_point \n"); } - printf( "\nchdir to /c/z/my_mount_point the mount point of the \n" ); - printf( "second file system \n" ); + /* + * Change directory to the mount point and create a group of files under + * the mounted file system. + */ + + printf( "\nchdir to /c/z/my_mount_point.\n" ); status = chdir( "/c/z/my_mount_point" ); printf( "chdir() status : %d\n\n", status ); @@ -152,7 +181,7 @@ int main( while ( strcmp(fnames[i], "END") != 0 ) { status = mkdir( fnames[i], 0777 ); - printf("Creating directory: %s %d %d ", fnames[i], status, errno ); + printf("Creating: %46s %d %d ", fnames[i], status, errno ); if ( status == 0 ) printf(" Success\n"); else { @@ -167,7 +196,7 @@ int main( i++; } - printf( "\nchdir to / the mount point of the first file system \n" ); + printf( "\nchdir to /\n" ); status = chdir( "/" ); printf( "chdir() status : %d\n\n", status ); @@ -179,28 +208,12 @@ int main( status = unmount( "/c/z/my_mount_point" ); printf( " %d\n", status ); -/* - status = chmod( "c/y/j123", S_IRUSR ); - assert( status == 0 ); - printf("Attempting to mount IMFS file system at c/y/j123\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RO", - NULL, - "c/y/j123" ); - assert( status == 0 ); - - status = mkdir( "c/y/j123/new_dir", S_IRUSR ); - assert( status == -1 ); - - printf("Unmount c/y/j123\n"); - status = unmount( "c/y/j123" ); - assert( status == 0 ); -*/ + /* + * Mount a NULL filesystem and verify it fails. + */ - printf(" File system type should be invalid.\n"); + printf("Mount a NULL file system and verify EINVAL\n"); status = mount( &mt_entry, NULL, @@ -210,7 +223,25 @@ int main( assert( status == -1 ); assert( errno == EINVAL ); - printf("Attempting to mount IMFS file system at /c/y/my_mount_point \n"); + /* + * Verify mount with option RA fails with EINVAL + */ + + printf("mount with option RA should fail with EINVAL\n"); + status = mount( + &mt_entry, + &IMFS_ops, + "RA", + NULL, + "/c/y/my_mount_point" ); + assert( status == -1 ); + assert( errno == EINVAL ); + + /* + * Mount a Read Only File system. + */ + + printf("Mount a Read Only filesystem at /c/y/my_mount_point \n"); status = mount( &mt_entry, &IMFS_ops, @@ -222,18 +253,26 @@ int main( printf(" NULL mount table entry was returned\n"); } else { - printf("3rd file system successfully mounted at /c/y/my_mount_point \n"); + printf("Read only file system successfully mounted at /c/y/my_mount_point \n"); } + /* + * Create a directory that passes through the read only file system. + */ + + printf("create c/y/my_mount_point/../../y/my_mount_point/new_dir\n"); status = mkdir("c/y/my_mount_point/../../y/my_mount_point/new_dir",S_IRWXU ); assert( status == 0 ); - status = stat("c/y/my_mount_point/../../y/my_mount_point/new_dir",&statbuf ); assert( status == 0 ); status = stat("c/y/my_mount_point/new_dir/..", &statbuf ); assert( status == 0 ); - printf("Mount another file system at /c/y/my_mount_point should fail with EBUSY\n"); + /* + * Attempt to mount a second file system at a used mount point. + */ + + printf("Verify a mount point retruns EBUSY for another mount\n"); status = mount( &mt_entry, &IMFS_ops, @@ -243,7 +282,11 @@ int main( assert( status == -1 ); assert( errno == EBUSY); - printf("Mount /b/my_file should fail in rtems_filesystem_evaluate_path\n"); + /* + * Attempt to mount at a file. + */ + + printf("Mount on a file should fail with ENOTDIR\n"); status = mount( &mt_entry, &IMFS_ops, @@ -251,24 +294,14 @@ int main( NULL, "/b/my_file" ); assert( status == -1 ); - - printf("Unmount /c/y/my_mount_point\n"); - status = unmount( "/c/y/my_mount_point" ); - assert( status == 0 ); - -/* What's wrong with this? It should be causing failure at unmount.c:87, - * instead, it's returning a status of 0. - */ + assert( errno == ENOTDIR ); - printf("Mount /c/y/my_mount_point to cause error\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RO", - NULL, - "/c/y/my_mount_point" ); + + /* + * Verify we cannot unmount a file system while we are in it. + */ - assert( status == 0 ); + printf("Create and chdir to /c/y/my_mount_point/mydir\n"); status = mkdir( "/c/y/my_mount_point/mydir", 0777); assert( status == 0 ); @@ -280,6 +313,11 @@ int main( assert( status == -1 ); assert( errno == EBUSY ); + /* + * Chdir to root and verify we can unmount the file system now. + */ + + printf("chdir to / and verify we can unmount /c/y/my_mount_point\n"); status = chdir( "/" ); assert( status == 0 ); @@ -287,9 +325,18 @@ int main( status = unmount( "/c/y/my_mount_point" ); assert( status == 0 ); - printf(" unmount /b/mount_point should fail\n"); + /* + * Attempt to unmount a directory that does not exist. + */ + + printf(" unmount /b/mount_point should fail with EINVAL\n"); status = unmount( "/b/mount_point" ); assert( status == -1 ); + assert( errno == ENOENT ); + + /* + * Remount the filesystem. + */ printf("Mount /c/y/my_mount_point\n"); status = mount( @@ -300,9 +347,13 @@ int main( "/c/y/my_mount_point" ); assert( status == 0 ); - /* XXX - There is an error in open that calculates incorrect mode. */ + /* + * Create a file and directory then open the directory. + * Verify unmount will return EBUSY while directory is open. + */ + printf("Create and open /c/y/my_mount_point/my_file\n"); - fd = open( "/c/y/my_mount_point/my_file", O_CREAT ); + fd = open( "/c/y/my_mount_point/my_file", O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); assert( fd != -1 ); status = close( fd ); assert( status == 0 ); @@ -316,27 +367,25 @@ int main( printf("Unmount /c/y/my_mount_point should fail with EBUSY\n"); status = unmount( "/c/y/my_mount_point" ); assert( status == -1 ); + assert( errno == EBUSY ); printf("Close /c/y/my_mount_point/my_dir\n"); status = closedir( directory ); assert( status == 0 ); - printf("Unmount /c/y/my_mount_point/d should fail at 107\n"); - status = unmount( "/c/y/my_mount_point/d" ); - assert( status == -1 ); - - printf("unmount /c/y/my_mount_point\n"); - status = unmount( "/c/y/my_mount_point" ); - assert( status == 0 ); + /* + * Attempt to unmount a directory that is not a mount point. + */ - printf("mount with option RA should fail with EINVAL\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RA", - NULL, - "/c/y/my_mount_point" ); + printf("Unmount /c/y/my_mount_point/my_dir\n"); + status = unmount( "/c/y/my_mount_point/my_dir" ); assert( status == -1 ); + assert( errno == EACCES ); + + /* + * Verify a file system can not be unmounted with a mounted file system + * in it. + */ printf("Mount a file system at /c/y/my_mount_point/my_dir\n"); status = mount( @@ -347,61 +396,49 @@ int main( "/c/y/my_mount_point/my_dir"); assert( status == 0 ); - printf("unmount /c/y/my_mount_point/my_dir should fail in "); - printf("file_systems_below_this_mountpoint \n"); - status = unmount( "/c/y/my_mount_point/my_dir" ); - assert( status == 0 ); - - printf("mount first filesystem /c/y/my_mount_point/\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RW", - NULL, - "/c/y/my_mount_point" ); - assert( status == 0 ); - - printf("\nmkdir /c/y/my_mount_point/my_dir\n"); - status = mkdir( "/c/y/my_mount_point/my_dir", S_IRWXU ); - assert( status == 0 ); + printf("unmount /c/y/my_mount_point should fail with EBUSY\n"); + status = unmount( "/c/y/my_mount_point" ); + assert( status == -1 ); + assert( errno == EBUSY ); - printf("Mount another filesystem at /c/y/my_mount_point/my_dir\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RW", - NULL, - "/c/y/my_mount_point/my_dir"); - assert( status == 0 ); + /* + * Verify you cannot create a hard link across mounted file systems. + */ + printf("Verify a hard link across filesystems fails with EXDEV\n"); status = mkdir( "/c/y/my_mount_point/my_dir2", S_IRWXU ); - assert( status != -1 ); + assert( status == 0 ); status = link( "/c/y/my_mount_point/my_dir2", "/c/y/my_mount_point/my_dir/my_link" ); assert( status == -1 ); + assert( errno == EXDEV ); - printf("unmount /c/y/my_mount_point\n"); - status = unmount( "/c/y/my_mount_point" ); - assert( status == -1 ); + /* + * Create a symbolic link across mountpoints. + */ + + printf("Verify a symbolic link across file systems works\n"); + status = symlink( "/c/y/my_mount_point/my_dir2", "/c/y/my_mount_point/my_dir/my_link" ); + assert( status == 0 ); + status = stat( "/c/y/my_mount_point/my_dir/my_link", &statbuf ); + assert( status == 0 ); printf("unmount /c/y/my_mount_point/my_dir\n"); status = unmount( "/c/y/my_mount_point/my_dir" ); assert( status == 0 ); + /* + * Verify symblic link no longer works. + */ + + printf("Verify the symbolic link now fails\n"); + status = stat( "/c/y/my_mount_point/my_dir/my_link", &statbuf ); + assert( status != 0 ); + printf("unmount /c/y/my_mount_point\n"); status = unmount( "/c/y/my_mount_point" ); assert( status == 0 ); -/* printf("Mount /c/y/my_mount_point\n"); - status = mount( - &mt_entry, - &IMFS_ops, - "RO", - NULL, - "/c/y/my_mount_point" ); - assert( status == 0 ); -*/ - printf( "\n\n*** END OF MOUNT/UNMOUNT TEST ***\n" ); exit(0); } diff --git a/c/src/tests/psxtests/psxreaddir/test.c b/c/src/tests/psxtests/psxreaddir/test.c index be5751d580..f4e07f4dcc 100644 --- a/c/src/tests/psxtests/psxreaddir/test.c +++ b/c/src/tests/psxtests/psxreaddir/test.c @@ -205,68 +205,95 @@ int main( i++; } + /* + * Create files under many and open the directory. + */ + + printf("Create a lot of files\n"); status = mkdir( "/many", 0x1c0 ); status = chdir( "/many" ); - for (i = 0; i<=44; i++) { - fd = open (many_files[i], O_CREAT); + for (i = 0; i<44; i++) { + printf(" Create %s\n", many_files[i]); + fd = open (many_files[i], O_CREAT, S_IRWXU); close (fd); } + printf("Open /many and print the directory\n"); directory_not = opendir( "/many" ); printdir ( directory_not ); d_not = readdir( directory_not ); - fd = open ("/b/my_file", O_CREAT); + printf("open /b/myfile\n"); + fd = open ("/b/my_file", O_CREAT, S_IRWXU); assert( fd != -1 ); close (fd); + printf("scandir a file status: "); status = scandir( "/b/my_file", &namelist, select1, NULL ); + printf("%d\n", status); - fd = open( "/b/new_file", O_CREAT ); + printf("Open /b/new_file\n"); + fd = open( "/b/new_file", O_CREAT, S_IRWXU ); assert( fd != -1 ); + printf("fcntl F_SETFD should return 0\n"); status = fcntl( fd, F_SETFD, 1 ); assert( status == 0 ); + + printf("fcntl F_SETFD should return 1\n"); status = fcntl( fd, F_GETFD, 1 ); assert( status == 1 ); - status = fcntl( fd, F_DUPFD, 1 ); - assert ( status == -1 ); + printf("fcntl F_DUPFD should return 0\n"); + status = fcntl( fd, F_DUPFD, 0 ); + assert ( status == 0 ); + printf("fcntl F_GETFL should return -1\n"); status = fcntl( fd, F_GETFL, 1 ); assert ( status == -1 ); + printf("fcntl F_SETFL should return -1\n"); status = fcntl( fd, F_SETFL, 1 ); assert ( status == -1 ); + printf("fcntl F_GETLK should return -1\n"); status = fcntl( fd, F_GETLK, 1 ); assert ( status == -1 ); + printf("fcntl F_SETLK should return -1\n"); status = fcntl( fd, F_SETLK, 1 ); assert ( status == -1 ); + printf("fcntl F_SETLKW should return -1\n"); status = fcntl( fd, F_SETLKW, 1 ); assert ( status == -1 ); + printf("fcntl F_SETOWN should return -1\n"); status = fcntl( fd, F_SETOWN, 1 ); assert ( status == -1 ); + printf("fcntl F_GETOWN should return -1\n"); status = fcntl( fd, F_GETOWN, 1 ); assert ( status == -1 ); + printf("fcntl invalid argument should return -1\n"); status = fcntl( fd, 0xb, 1 ); + printf("Status %d\n",status); assert( status == -1 ); + printf("opendir and readdir /b/myfile\n"); directory_not = opendir ("/b/my_file"); d_not = readdir(directory_not); + printf("opendir and readdir\n"); directory_not = opendir ("/a"); d_not = readdir (directory_not); + printf("chdir to /b/myfile\n"); status = chdir ("/b/my_file"); assert (status == -1); @@ -275,11 +302,9 @@ int main( printf("status for stat : %d, size of directory: %d\n\n", status,(int)s.st_size); - puts( "\nOpening directory /" ); + puts( "\nOpen and print directory /" ); directory = opendir("/"); - assert( directory ); - printdir(directory); printf("\nmkdir /d/my_dir\n"); @@ -305,9 +330,7 @@ int main( printf( "\nOpening directory /c/y\n" ); directory3 = opendir("/c/y"); - assert( directory3 ); - printdir(directory3); status = closedir( directory3 ); -- cgit v1.2.3