See below for comments. This test suite might be a good candidate for conversion to T_TEST_CASE framework. At any rate, this refactor is a marked improvement.
On Wed, Apr 21, 2021 at 2:57 PM Ryan Long <ryan.l...@oarcorp.com> wrote: > > Changed the way the tests were structured, added rtems_test_assert()'s, > updated psx13.scn and the license. relicense changes should generally Update #3899. > --- > testsuites/psxtests/psx13/psx13.scn | 24 +- > testsuites/psxtests/psx13/test.c | 879 > +++++++++++++----------------------- > 2 files changed, 335 insertions(+), 568 deletions(-) > > diff --git a/testsuites/psxtests/psx13/psx13.scn > b/testsuites/psxtests/psx13/psx13.scn > index 428a931..ee99867 100644 > --- a/testsuites/psxtests/psx13/psx13.scn > +++ b/testsuites/psxtests/psx13/psx13.scn > @@ -1,16 +1,16 @@ > *** POSIX TEST 13 *** > > Files initialized successfully. > -Testing device_lseek()... Failed!!! > -Testing dup()............ Failed!!! > -Testing dup2()........... Success. > -Testing fdatasync()...... Success. > -Testing umask().......... Success. > -Testing utime().......... Success. > -Testing utimes().......... Success. > -Testing fsync().......... Success. > -Testing pathconf()....... Success. > -Testing fpathconf()...... Success. > -Testing sync()...... > +Testing lseek() on device... Success. > +Testing dup()............... Success. > +Testing dup2().............. Success. > +Testing fdatasync()......... Success. > +Testing umask()............. Success. > +Testing utime()............. Success. > +Testing utimes()............ Success. > +Testing fsync()............. Success. > +Testing pathconf().......... Success. > +Testing fpathconf()......... Success. > +Testing sync().............. Success. > > -*** END OF TEST PSX13 *** > +*** END OF TEST PSX 13 *** > diff --git a/testsuites/psxtests/psx13/test.c > b/testsuites/psxtests/psx13/test.c > index 79b24c2..2d25b02 100644 > --- a/testsuites/psxtests/psx13/test.c > +++ b/testsuites/psxtests/psx13/test.c > @@ -1,26 +1,49 @@ > -/* > - * Psx13 > - * Chris Bond (working under Jennifer's account) > +/** > + * @file > + * > + * @brief This tests various file system functions. > * > * This test exercises the following routines: > * > - * device_lseek - test implemented > - * dup - test implemented > - * dup2 - test implemented > - * fdatasync - test implemented > - * fsync - test implemented > - * pathconf - test implemented > - * fpathconf - test implemented > - * umask - test implemented > - * utime - test implemented > - * utimes - test implemented > + * - lseek() > + * - dup() > + * - dup2() > + * - fdatasync() > + * - fsync() > + * - pathconf() > + * - fpathconf() > + * - umask() > + * - utime() > + * - utimes() > + * - sync() > + */ > + While you're at it, please conform to https://docs.rtems.org/branches/master/eng/coding-file-hdr.html#c-c-header-file-template > +/* > + * SPDX-License-Identifier: BSD-2-Clause > * > - * COPYRIGHT (c) 1989-2009. > + * COPYRIGHT (c) 1989-2009, 2021. > * On-Line Applications Research Corporation (OAR). > * > - * The license and distribution terms for this file may be > - * found in the file LICENSE in this distribution or at > - * http://www.rtems.org/license/LICENSE. > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > + * * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > + * POSSIBILITY OF SUCH DAMAGE. > */ > > #ifdef HAVE_CONFIG_H > @@ -34,6 +57,7 @@ > #include <unistd.h> > #include <errno.h> > #include <utime.h> > +#include <tmacros.h> > > #include <stdio.h> > #include <unistd.h> > @@ -42,685 +66,428 @@ > > const char rtems_test_name[] = "PSX 13"; > > -int InitFiles(void); > -int DeviceLSeekTest(void); > -int DupTest(void); > -int Dup2Test(void); > -int FDataSyncTest(void); > -int UMaskTest(void); > -int UTimeTest(void); > -int UTimesTest(void); > -int PathConfTest(void); > -int FPathConfTest(void); > -int FSyncTest(void); > - > -/*------------------------------------------------------------------- > - * InitFiles function > - * > - * Initializes the three files to be used in the test. > - * > - * arguments: none > - * assumptions: fopen, fprintf, fwrite, FILE are available > - * actions: creates testfile1, a text file with 'a'..'z' listed 4 times. > - * creates testfile2, a text file with 'a'..'z' listed 4 times. > - * creates testfile3, a binary file with 0..9 listed 4 times. > - * returns: TRUE if files opened successfully. > - * FALSE if fail on file open for write. > - * > - * ------------------------------------------------------------------ > +/** > + * @brief Initializes the three files to be used for the test. > */ > - > -int InitFiles (void) > +static void InitFiles( void ) > { > int count; > + int rv; > FILE *fp1, *fp2, *fp3; > char letter; > int number; > - int retval; > - > - fp1 = fopen("testfile1.tst", "wt"); > - fp2 = fopen("testfile2.tst", "wt"); > - fp3 = fopen("testfile4.tst", "wb"); > > - if ((fp1 != NULL) && (fp2 != NULL) && (fp3 !=NULL)) { > + fp1 = fopen( "testfile1.tst", "wt" ); > + rtems_test_assert( fp1 != NULL ); > > - letter = 'a'; > + fp2 = fopen( "testfile2.tst", "wt" ); > + rtems_test_assert( fp2 != NULL ); > > - for (count=0 ; count<(26*4); ++count) { > - fprintf (fp1, "%c", letter); > - fprintf (fp2, "%c", letter); > + fp3 = fopen( "testfile4.tst", "wb" ); > + rtems_test_assert( fp3 != NULL ); > > - ++letter; > - if (letter > 'z') > - letter = 'a'; > - } > + letter = 'a'; > > - number = 0; > + for( count = 0 ; count < (26*4); ++count) { > + fprintf( fp1, "%c", letter ); > + fprintf( fp2, "%c", letter ); > > - for (count = 0; count <40; ++count) { > - > - fwrite (&number, 1, sizeof(int), fp3); > + ++letter; > + if( letter > 'z' ) > + letter = 'a'; > + } > > - ++number; > - if (number > 9) > - number = 0; > - } > + number = 0; > > - fclose(fp1); > - fclose(fp2); > - fclose(fp3); > + for( count = 0; count < 40; ++count ) { > + fwrite( &number, 1, sizeof(int), fp3 ); > > - retval = TRUE; > + ++number; > + if( number > 9 ) > + number = 0; > } > > - else > - retval = FALSE; > + rv = fclose( fp1 ); > + rtems_test_assert( rv != EOF ); > > - /* assert (retval == TRUE);*/ > + rv = fclose( fp2 ); > + rtems_test_assert( rv != EOF ); > > - return (retval); > + rv = fclose( fp3 ); > + rtems_test_assert( rv != EOF ); > } > > -/* --------------------------------------------------------------- > - * DeviceLSeekTest function > - * > - * Hits the device_lseek code by lseeking on the console. > - * > - * arguments: none > - * assumptions: lseek available > - * actions: hits lseek with some dummy arguments. > - * returns: value of return from lseek. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Hits the device_lseek code by lseeking on the console. > */ > - > -int DeviceLSeekTest (void) > +static void DeviceLSeekTest( void ) > { > - int error = -1, retval = FALSE; > + int rv; > + int fd; > > - int fd = open ("/dev/console", O_RDONLY); > + fd = open( "/dev/console", O_RDONLY ); > + rtems_test_assert( fd != -1 ); > > - error = lseek(fd, 5, SEEK_SET); > + rv = lseek( fd, 5, SEEK_SET ); > + rtems_test_assert( rv == -1 ); > + rtems_test_assert( errno == ESPIPE ); > > - if (error == 0) > - retval = TRUE; > - else > - retval = FALSE; > - > - close( fd ); /* assert (retval == TRUE);*/ > - > - return (retval); > + rv = close( fd ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * DupTest function > - * > - * Hits the dup code. > - * > - * arguments: none > - * assumptions: dup, open, close, fcntl available. > - * actions: Gets a file descriptor(fd1) for test file1. > - * dups fd1 to fd2. > - * sets fd1 to append mode > - * checks fd2 to ensure it's in append mode, also. > - * returns: success if fd2 is indeed a copy of fd1. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Exercises dup(). > */ > - > -int DupTest(void) > +static void DupTest( void ) > { > int fd1, fd2; > + int flags; > + int rv; > > - int flags = 0, retval = FALSE; > - > - fd1 = open ("testfile1.tst", O_RDONLY); > - fd2 = dup(fd1); > - > - if (fd2 != -1) { > + fd1 = open( "testfile1.tst", O_RDONLY ); > + rtems_test_assert( fd1 != -1 ); > > - fcntl(fd1, F_SETFL, O_APPEND); > - flags = fcntl(fd2, F_GETFL); > + fd2 = dup( fd1 ); > + rtems_test_assert( fd2 != -1 ); > > - close (fd1); > + rv = fcntl( fd1, F_SETFL, O_APPEND ); > + rtems_test_assert( rv != -1 ); > > - flags = (flags & O_APPEND); > + flags = fcntl( fd2, F_GETFL ); > + flags = ( flags & O_APPEND ); minor nit, this could be more concise flags = fcntl( fd2, F_GETFL) & O_APPEND; > + rtems_test_assert( flags == 0 ); > > - retval = (flags == O_APPEND); > - } > - > - else > - retval = FALSE; > + rv = close( fd1 ); > + rtems_test_assert( rv == 0 ); > Just curious, why be inconsistent how you check for the return from close? Above using != EOF, here using == 0. It doesn't matter greatly. > - close( fd1 ); > - close( fd2 ); > - /* assert (retval == TRUE);*/ > - > - return (retval); > + rv = close( fd2 ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * Dup2Test function > - * > - * Hits the dup2 code. > - * > - * arguments: none > - * assumptions: dup, dup2, open, close, fcntl available. > - * actions: Gets a file descriptor(fd1) for test file1. > - * dups fd1 to fd2. > - * sets fd1 to append mode > - * checks fd2 to ensure it's in append mode, also. > - * sets fd1 to invalid value, fd2 to valid, tries to dup2. > - * sets fd2 to invalid value, fd1 to valid tries to dup2. > - * returns: success if fd2 is a copy of fd1, and invalid fd1 or fd2 produce > errors. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Exercises dup2(). > */ > - > -int Dup2Test(void) > +static void Dup2Test( void ) > { > int fd1, fd2; > + int flags; > + int rv; > > - int flags = 0, retval = FALSE; > - > - int error = 0; > + fd1 = open( "testfile1.tst", O_RDONLY ); > + rtems_test_assert( fd1 != -1 ); > > - fd1 = open ("testfile1.tst", O_RDONLY); > - fd2 = open ("testfile2.tst", O_RDONLY); > - error = dup2(fd1, fd2); > + fd2 = open( "testfile2.tst", O_RDONLY ); > + rtems_test_assert( fd2 != -1 ); > > /* make sure dup2 works if both fd1 and fd2 are valid file descriptors. */ > + rv = dup2( fd1, fd2 ); > + rtems_test_assert( rv != -1 ); > > - if (error != -1) { > + rv = fcntl( fd1, F_SETFL, O_APPEND ); > + rtems_test_assert( rv != -1 ); > > - fcntl(fd1, F_SETFL, O_APPEND); > - flags = fcntl(fd1, F_GETFL); > + flags = fcntl( fd1, F_GETFL ); > + flags = ( flags & O_APPEND ); > + rtems_test_assert( flags == O_APPEND ); ditto on both conciseness and consistency here. > > - flags = (flags & O_APPEND); > - retval = (flags == O_APPEND); > - } > - > - else { > - retval = FALSE; > - close(fd2); > - } > - > - if (retval == TRUE) { > + /* make sure dup2 fails correctly if one or the other arguments are > invalid. */ > + /* this assumes -1 is an invalid value for a file descriptor!!! (POSIX > book, p.135) */ > + rv = close( fd1 ); > + rtems_test_assert( rv == 0 ); > > - /* make sure dup2 fails correctly if one or the other arguments are > invalid. */ > - /* this assumes -1 is an invalid value for a file descriptor!!! (POSIX > book, p.135) */ > + fd1 = -1; > > - fd1 = -1; > + rv = dup2( fd1, fd2 ); > + rtems_test_assert( rv == -1 ); > > - if (dup2 (fd1, fd2) != -1) > - retval = FALSE; > - else { > - fd1 = dup(fd2); > - fd2 = -1; > + fd1 = dup( fd2 ); > + fd2 = -1; > > - if (dup2(fd1, fd2) != -1) > - retval = FALSE; > - } > - } > - > - close (fd1); > - close (fd2); > - /* assert (retval == TRUE);*/ > + rv = dup2( fd1, fd2 ); > + rtems_test_assert( rv == -1 ); > > - return (retval); > + rv = close( fd1 ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * FDataSyncTest function > - * > - * Hits the fdatasync code. Does NOT test the functionality of the > - * underlying fdatasync entry in the IMFS op table. > - * > - * arguments: none > - * assumptions: open, close, fdatasync functions available. > - * actions: attempts to fdatasync a file descriptor flagged as read-only. > - * attempts to fdatasync an invalid file descriptor (-1). > - * attempts to fdatasync a perfectly valid fd opened as RDWR > - * > - * returns: TRUE if attempt to fdatasync invalid and read-only filed > - * descriptor fail, and fdatasync succeeds on valid fd. > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Exercises fdatasync(). Does NOT test the functionality of the > + * underlying fdatasync entry in the IMFS op table. > */ > - > -int FDataSyncTest(void) > +static void FDataSyncTest( void ) > { > - int fd = -1; > - int error = 0, retval = TRUE; > + int fd; > + int rv; > > /* Try it with a RD_ONLY file. */ > + fd = open( "testfile1.tst", O_RDONLY ); > + rtems_test_assert( fd != -1 ); > > - fd = open ("testfile1.tst", O_RDONLY); > - > - error = fdatasync(fd); > - if ((error == -1) && (errno == EINVAL)) > - retval = TRUE; > - else > - retval = FALSE; > + rv = fdatasync( fd ); > + rtems_test_assert( rv == -1 ); > + rtems_test_assert( errno == EBADF ); > > - close (fd); > + rv = close(fd); > + rtems_test_assert( rv == 0 ); > > - if (retval == TRUE) { > + /* Try it with a bad file descriptor */ > + fd = -1; > > - /* Try it with a bad file descriptor */ > - > - fd = -1; > - > - error = fdatasync(fd); > - if ((errno == EBADF) && (error == -1)) > - retval = TRUE; > - else > - retval = FALSE; > - } > + rv = fdatasync( fd ); > + rtems_test_assert( rv == -1 ); > + rtems_test_assert( errno == EBADF ); > > /* Okay - now the success case... */ > + fd = open( "testfile1.tst", O_RDWR ); > + rv = fdatasync( fd ); > + rtems_test_assert( rv == 0 ); > > - if (retval == TRUE) { > - fd = open ("testfile1.tst", O_RDWR); > - error = fdatasync(fd); > - > - if (error == 0) > - retval = TRUE; > - else > - retval = FALSE; > - > - close (fd); > - } > - > - /* assert (retval == TRUE);*/ > - > - return (retval); > + rv = close( fd ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * UMaskTest function > - * > - * Hits the umask code. > - * > - * arguments: none > - * assumptions: umask function available. > - * actions: set umask to 0ctal 23. > - * set umask to Octal 22, retrieve the old value. > - * > - * returns: TRUE if old value is 23, > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Hits the umask code. > */ > - > -int UMaskTest (void) > +static void UMaskTest( void ) > { > - mode_t error = 0; > - int retval = FALSE; > - > - umask(023); > - error = umask(022); > + mode_t rv; > > - if (error == 023) > - retval = TRUE; > - else > - retval = FALSE; > + (void)umask( 023 ); nit: add a space after (void) > > - /* assert (retval == TRUE);*/ > - > - return(retval); > + rv = umask( 022 ); > + rtems_test_assert( rv == 023 ); > } > > -/* --------------------------------------------------------------- > - * UTimeTest function > - * > - * Hits the utime code. Does NOT test the functionality of the underlying > utime > - * entry in the IMFS op table. > - * > - * arguments: none > - * assumptions: utime function available. > - * actions: set utime for an invalid filename. > - * set utime for a valid filename. > - * > - * returns: TRUE if time on valid file is set correctly and utime failed on > - * an invalid filename. > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Hits the utime code. Does not test the functionality of the > + * underlying utime entry in the IMFS op table. > */ > - > -int UTimeTest (void) > +static void UTimeTest( void ) > { > - int error = 0, retval = FALSE; > + int rv; > struct utimbuf time; > struct stat fstat; > > /* First, an invalid filename. */ > - error = utime("!This is an =invalid p@thname!!! :)", NULL); > - > - if (error == -1) > - retval = TRUE; > - else > - retval = FALSE; > + rv = utime( "!This is an =invalid p@thname!!! :)", NULL ); > + rtems_test_assert( rv == -1 ); > + rtems_test_assert( errno == ENOENT ); > > /* Now, the success test. */ > - if (retval == TRUE) { > - > - time.actime = 12345; > - time.modtime = 54321; > - > - error = utime("testfile1.tst", &time); > + time.actime = 12345; > + time.modtime = 54321; > > - if (error == 0) { > - > - /* But, did it set the time? */ > - stat ("testfile1.tst", &fstat); > - > - if ((fstat.st_atime == 12345) && (fstat.st_mtime == 54321 )) > - retval = TRUE; > - else > - retval = FALSE; > - } > - else > - retval = FALSE; > - > - error = utime("testfile1.tst", NULL ); > - retval &= (error == 0) ? TRUE : FALSE; > - } > + rv = utime( "testfile1.tst", &time ); > + rtems_test_assert( rv == 0 ); > > - /* assert (retval == TRUE);*/ > + /* But, did it set the time? */ > + rv = stat( "testfile1.tst", &fstat ); > + rtems_test_assert( rv == 0 ); > + rtems_test_assert( fstat.st_atime == 12345 ); > + rtems_test_assert( fstat.st_mtime == 54321 ); > > - return (retval); > + rv = utime( "testfile1.tst", NULL ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * UTimesTest function > - * > - * Hits the utimes code. Does NOT test the functionality of the underlying > utime > - * entry in the IMFS op table. > - * > - * arguments: none > - * assumptions: utimes function available. > - * actions: set utimes for an invalid filename. > - * set utimes for a valid filename. > - * > - * returns: TRUE if time on valid file is set correctly and utimes failed on > - * an invalid filename. > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Hits the utimes code. Does NOT test the functionality of the > + * underlying utime entry in the IMFS op table. > */ > - > -int UTimesTest (void) > +static void UTimesTest( void ) > { > - int error = 0, retval = FALSE; > + int rv; > struct timeval time[2]; > struct stat fstat; > > /* First, an invalid filename. */ > - error = utimes("!This is an =invalid p@thname!!! :)", NULL); > - > - if (error == -1) > - retval = TRUE; > - else > - retval = FALSE; > + rv = utimes( "!This is an =invalid p@thname!!! : )", NULL); > + rtems_test_assert( rv == -1 ); > + rtems_test_assert( errno == ENOENT ); > > /* Now, the success test. */ > - if (retval == TRUE) { > + time[0].tv_sec = 12345; > + time[1].tv_sec = 54321; > > - time[0].tv_sec = 12345; > - time[1].tv_sec = 54321; > + rv = utimes( "testfile1.tst", (struct timeval *)&time ); > + rtems_test_assert( rv == 0 ); > > - error = utimes("testfile1.tst", (struct timeval *)&time); > + /* But, did it set the time? */ > + rv = stat( "testfile1.tst", &fstat ); > + rtems_test_assert( rv == 0 ); > + rtems_test_assert( fstat.st_atime == 12345 ); > + rtems_test_assert( fstat.st_mtime == 54321 ); > +} > > - if (error == 0) { > +/** > + * @brief Hits the pathconf code. > + */ > +static void PathConfTest( void ) > +{ > + int rv; > > - /* But, did it set the time? */ > - stat ("testfile1.tst", &fstat); > + rv = pathconf( "thisfiledoesnotexist", _PC_LINK_MAX ); > + rtems_test_assert( rv == -1 ); > > - if ((fstat.st_atime == 12345) && (fstat.st_mtime == 54321 )) > - retval = TRUE; > - else > - retval = FALSE; > - } > + rv = pathconf( "testfile1.tst", _PC_LINK_MAX ); > + rtems_test_assert( rv != -1 ); > +} > > - else > - retval = FALSE; > - } > +/** > + * @brief Hits the fpathconf code. > + */ > +static void FPathConfTest( void ) > +{ > + int rv; > + int fd; > > - /* assert (retval == TRUE);*/ > + fd = -1; > + rv = fpathconf( fd, _PC_LINK_MAX ); > + rtems_test_assert( rv == -1 ); > > - return (retval); > -} > + fd = open( "testfile1.tst", O_RDWR ); > + rtems_test_assert( fd != -1 ); > > -/* --------------------------------------------------------------- > - * PathConfTest function > - * > - * Hits the pathconf code. > - * > - * arguments: none > - * assumptions: pathconf function available. > - * actions: Try to pathconf a bad filename. > - * Try to pathconf a good filename. > - * > - * returns: TRUE if pathconf fails on bad file, succeeds on good file. > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > - */ > + rv = fpathconf( fd, _PC_LINK_MAX ); > + rtems_test_assert( rv != -1 ); > > -int PathConfTest (void) > -{ > - int error = 0, retval = FALSE; > + rv = fpathconf( fd, _PC_MAX_CANON ); > + rtems_test_assert( rv != -1 ); > > - error = pathconf("thisfiledoesnotexist", _PC_LINK_MAX); > + rv = fpathconf( fd, _PC_MAX_INPUT ); > + rtems_test_assert( rv != -1 ); > > - if (error == -1) { > - error = pathconf("testfile1.tst", _PC_LINK_MAX); > + rv = fpathconf( fd, _PC_NAME_MAX ); > + rtems_test_assert( rv != -1 ); > > - if (error != -1) > - retval = TRUE; > - else > - retval = FALSE; > - } > + rv = fpathconf( fd, _PC_PATH_MAX ); > + rtems_test_assert( rv != -1 ); > > - else > - retval = FALSE; > + rv = fpathconf( fd, _PC_PIPE_BUF ); > + rtems_test_assert( rv != -1 ); > > - /* assert (retval == TRUE);*/ > + rv = fpathconf( fd, _PC_CHOWN_RESTRICTED ); > + rtems_test_assert( rv != -1 ); > > - return(retval); > -} > + rv = fpathconf( fd, _PC_NO_TRUNC ); > + rtems_test_assert( rv != -1 ); > > -/* --------------------------------------------------------------- > - * FPathConfTest function > - * > - * Hits the fpathconf code. > - * > - * arguments: none > - * assumptions: fpathconf function available. > - * actions: Call fpathconf with all arguments, plus an invalid. > - * > - * returns: TRUE always. > - * > - * --------------------------------------------------------------- > - */ > + rv = fpathconf( fd, _PC_VDISABLE ); > + rtems_test_assert( rv != -1 ); > > -int FPathConfTest (void) > -{ > - int error = 0, retval = TRUE; > + rv = fpathconf( fd, _PC_ASYNC_IO ); > + rtems_test_assert( rv != -1 ); > > - int fd = -1; > + rv = fpathconf( fd, _PC_PRIO_IO ); > + rtems_test_assert( rv != -1 ); > > - error = fpathconf(fd, _PC_LINK_MAX); > + rv = fpathconf( fd, _PC_SYNC_IO ); > + rtems_test_assert( rv != -1 ); > > - if (error == -1) { > - fd = open("testfile1.tst", O_RDWR); > + rv = fpathconf( fd, 255 ); > +#ifdef __sparc__ What's this for? > + rtems_test_assert( rv == 0 ); > +#else > + rtems_test_assert( rv == -1 ); > +#endif > > - error = fpathconf(fd, _PC_LINK_MAX); > - error = fpathconf(fd, _PC_MAX_CANON); > - error = fpathconf(fd, _PC_MAX_INPUT); > - error = fpathconf(fd, _PC_NAME_MAX); > - error = fpathconf(fd, _PC_PATH_MAX); > - error = fpathconf(fd, _PC_PIPE_BUF); > - error = fpathconf(fd, _PC_CHOWN_RESTRICTED); > - error = fpathconf(fd, _PC_NO_TRUNC); > - error = fpathconf(fd, _PC_VDISABLE); > - error = fpathconf(fd, _PC_ASYNC_IO); > - error = fpathconf(fd, _PC_PRIO_IO); > - error = fpathconf(fd, _PC_SYNC_IO); > - error = fpathconf(fd, 255); > + rv = close( fd ); > + rtems_test_assert( rv == 0 ); > > - close(fd); > + fd = open( "testfile1.tst", O_WRONLY ); > + rtems_test_assert( rv != -1 ); > > - fd = open("testfile1.tst", O_WRONLY); > + rv = fpathconf( fd, _PC_LINK_MAX ); > + rtems_test_assert( rv != -1 ); > > - error = fpathconf(fd, _PC_LINK_MAX); > + rv = close( fd ); > + rtems_test_assert( rv == 0 ); > +} > > - retval = TRUE; > - } > +/** > + * @brief Hits the fsync code. > + */ > +static void FSyncTest( void ) > +{ > + int rv; > + int fd; > > - else > - retval = FALSE; > + fd = open( "testfile1.tst", O_RDWR ); > + rtems_test_assert( fd != -1 ); > > - /* assert (retval == TRUE);*/ > + rv = fsync(fd); > + rtems_test_assert( rv != -1 ); > > - return(retval); > + rv = close( fd ); > + rtems_test_assert( rv == 0 ); > } > > -/* --------------------------------------------------------------- > - * FSyncTest function > - * > - * Hits the fsync code. > - * > - * arguments: none > - * assumptions: open, fsync functions available. > - * actions: open test file, > - * try to fsync it. > - * > - * returns: TRUE if fsync doesn't return -1, > - * FALSE otherwise. > - * > - * --------------------------------------------------------------- > +/** > + * @brief Exercises sync(). > */ > +static void SyncTest( void ) > +{ > + sync(); > +} > > -int FSyncTest (void) > +/** > + * @brief The main entry point to the test. > + */ > +int test_main( void ); > +int test_main( void ) > { > - int error = 0, retval = FALSE; > - int fd = -1; > + TEST_BEGIN(); > > - fd = open("testfile1.tst", O_RDWR); > + InitFiles(); > + printf( "\nFiles initialized successfully.\n" ); > remove the extraneous print statements. If things are working, the test output should be minimal/quiet just the start/end banners. > - if (fd != -1) { > + printf( "Testing lseek() on device... " ); > + DeviceLSeekTest(); > + printf( "Success.\n" ); > > - error = fsync(fd); > + printf( "Testing dup()............... " ); > + DupTest(); > + printf( "Success.\n" ); > > - if (error != -1) > - retval = TRUE; > - else > - retval = FALSE; > + printf( "Testing dup2().............. " ); > + Dup2Test(); > + printf( "Success.\n" ); > > - close(fd); > - } > + printf( "Testing fdatasync()......... " ); > + FDataSyncTest(); > + printf( "Success.\n" ); > > - else > - retval = FALSE; > + printf( "Testing umask()............. " ); > + UMaskTest(); > + printf( "Success.\n" ); > > - /* assert (retval == TRUE);*/ > + printf( "Testing utime()............. " ); > + UTimeTest(); > + printf( "Success.\n" ); > > - return(retval); > -} > + printf( "Testing utimes()............ " ); > + UTimesTest(); > + printf( "Success.\n" ); > > -/* --------------------------------------------------------------- > - * Main function > - * > - * main entry point to the test > - * > - * --------------------------------------------------------------- > - */ > + printf( "Testing fsync()............. " ); > + FSyncTest(); > + printf( "Success.\n" ); > > -#if defined(__rtems__) > -int test_main(void); > -int test_main(void) > -#else > -int main( > - int argc, > - char **argv > -) > -#endif > -{ > - TEST_BEGIN(); > + printf( "Testing pathconf().......... " ); > + PathConfTest(); > + printf( "Success.\n" ); > > - if (InitFiles() == TRUE) { > - printf ("\nFiles initialized successfully.\n"); > - > - printf ("Testing device_lseek()... "); > - if (DeviceLSeekTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing dup()............ "); > - if (DupTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing dup2()........... "); > - if (Dup2Test() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing fdatasync()...... "); > - if (FDataSyncTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing umask().......... "); > - if (UMaskTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing utime().......... "); > - if (UTimeTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing utimes().......... "); > - if (UTimesTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing fsync().......... "); > - if (FSyncTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing pathconf()....... "); > - if (PathConfTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing fpathconf()...... "); > - if (FPathConfTest() == TRUE) > - printf ("Success.\n"); > - else > - printf ("Failed!!!\n"); > - > - printf ("Testing sync()...... "); > - sync(); > - printf ("Done.\n"); > - > - TEST_END(); > - } > + printf( "Testing fpathconf()......... " ); > + FPathConfTest(); > + printf( "Success.\n" ); > + > + printf( "Testing sync().............. " ); > + SyncTest(); > + printf( "Success.\n" ); > + > + TEST_END(); > > - rtems_test_exit(0); > + rtems_test_exit( 0 ); > } > -- > 1.8.3.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel