psx13: Reworked and relicensed

Changed the way the tests were structured, added rtems_test_assert()'s,
updated psx13.scn and the license.

Update #3899
This commit is contained in:
Ryan Long
2021-04-21 16:24:33 -04:00
committed by Joel Sherrill
parent a1679af380
commit fe3e05ffca
3 changed files with 342 additions and 600 deletions

View File

@@ -1,14 +1,37 @@
/* /* SPDX-License-Identifier: BSD-2-Clause */
* Simple test program -- simplified version of sample test hello.
/**
* @file
* *
* COPYRIGHT (c) 1989-2009. * @brief Simple test program -- simplified version of sample test hello.
* 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.
*/ */
/*
* COPYRIGHT (c) 1989-2009, 2021.
* On-Line Applications Research Corporation (OAR).
*
* 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 #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"

View File

@@ -1,16 +1,7 @@
*** POSIX TEST 13 *** *** BEGIN OF TEST PSX 13 ***
*** TEST VERSION: 6.0.0.75f80242186af2dde0c5bc7272a119e3b78d7ba0
*** TEST STATE: EXPECTED_PASS
*** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API
*** TEST TOOLS: 10.2.1 20210309 (RTEMS 6, RSB 5e449fb5c2cb6812a238f9f9764fd339cbbf05c2, Newlib d10d0d9)
Files initialized successfully. *** END OF TEST PSX 13 ***
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()......
*** END OF TEST PSX13 ***

View File

@@ -1,26 +1,49 @@
/* /* SPDX-License-Identifier: BSD-2-Clause */
* Psx13
* Chris Bond (working under Jennifer's account) /**
* @file
*
* @brief This tests various file system functions.
* *
* This test exercises the following routines: * This test exercises the following routines:
* *
* device_lseek - test implemented * - lseek()
* dup - test implemented * - dup()
* dup2 - test implemented * - dup2()
* fdatasync - test implemented * - fdatasync()
* fsync - test implemented * - fsync()
* pathconf - test implemented * - pathconf()
* fpathconf - test implemented * - fpathconf()
* umask - test implemented * - umask()
* utime - test implemented * - utime()
* utimes - test implemented * - utimes()
* * - sync()
* COPYRIGHT (c) 1989-2009. */
/*
* COPYRIGHT (c) 1989-2009, 2021.
* On-Line Applications Research Corporation (OAR). * On-Line Applications Research Corporation (OAR).
* *
* The license and distribution terms for this file may be * Redistribution and use in source and binary forms, with or without
* found in the file LICENSE in this distribution or at * modification, are permitted provided that the following conditions
* http://www.rtems.org/license/LICENSE. * 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 #ifdef HAVE_CONFIG_H
@@ -34,6 +57,7 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <utime.h> #include <utime.h>
#include <tmacros.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@@ -42,685 +66,389 @@
const char rtems_test_name[] = "PSX 13"; const char rtems_test_name[] = "PSX 13";
int InitFiles(void); /**
int DeviceLSeekTest(void); * @brief Initializes the three files to be used for the test.
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.
*
* ------------------------------------------------------------------
*/ */
static void InitFiles( void )
int InitFiles (void)
{ {
int count; int count;
int rv;
FILE *fp1, *fp2, *fp3; FILE *fp1, *fp2, *fp3;
char letter; char letter;
int number; int number;
int retval;
fp1 = fopen("testfile1.tst", "wt"); fp1 = fopen( "testfile1.tst", "wt" );
fp2 = fopen("testfile2.tst", "wt"); rtems_test_assert( fp1 != NULL );
fp3 = fopen("testfile4.tst", "wb");
if ((fp1 != NULL) && (fp2 != NULL) && (fp3 !=NULL)) { fp2 = fopen( "testfile2.tst", "wt" );
rtems_test_assert( fp2 != NULL );
fp3 = fopen( "testfile4.tst", "wb" );
rtems_test_assert( fp3 != NULL );
letter = 'a'; letter = 'a';
for (count=0 ; count<(26*4); ++count) { for( count = 0 ; count < (26*4); ++count) {
fprintf (fp1, "%c", letter); fprintf( fp1, "%c", letter );
fprintf (fp2, "%c", letter); fprintf( fp2, "%c", letter );
++letter; ++letter;
if (letter > 'z') if( letter > 'z' )
letter = 'a'; letter = 'a';
} }
number = 0; number = 0;
for (count = 0; count <40; ++count) { for( count = 0; count < 40; ++count ) {
fwrite( &number, 1, sizeof(int), fp3 );
fwrite (&number, 1, sizeof(int), fp3);
++number; ++number;
if (number > 9) if( number > 9 )
number = 0; number = 0;
} }
fclose(fp1); rv = fclose( fp1 );
fclose(fp2); rtems_test_assert( rv != EOF );
fclose(fp3);
retval = TRUE; rv = fclose( fp2 );
} rtems_test_assert( rv != EOF );
else rv = fclose( fp3 );
retval = FALSE; rtems_test_assert( rv != EOF );
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* DeviceLSeekTest function * @brief Exercises lseek() by lseeking on the console.
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void DeviceLSeekTest( void )
int 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) rv = close( fd );
retval = TRUE; rtems_test_assert( rv == 0 );
else
retval = FALSE;
close( fd ); /* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* DupTest function * @brief Exercises dup().
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void DupTest( void )
int DupTest(void)
{ {
int fd1, fd2; int fd1, fd2;
int flags;
int rv;
int flags = 0, retval = FALSE; fd1 = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd1 != -1 );
fd1 = open ("testfile1.tst", O_RDONLY); fd2 = dup( fd1 );
fd2 = dup(fd1); rtems_test_assert( fd2 != -1 );
if (fd2 != -1) { rv = fcntl( fd1, F_SETFL, O_APPEND );
rtems_test_assert( rv != -1 );
fcntl(fd1, F_SETFL, O_APPEND); flags = fcntl( fd2, F_GETFL ) & O_APPEND;
flags = fcntl(fd2, F_GETFL); rtems_test_assert( flags == 0 );
close (fd1); rv = close( fd1 );
rtems_test_assert( rv == 0 );
flags = (flags & O_APPEND); rv = close( fd2 );
rtems_test_assert( rv == 0 );
retval = (flags == O_APPEND);
}
else
retval = FALSE;
close( fd1 );
close( fd2 );
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* Dup2Test function * @brief Exercises dup2().
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void Dup2Test( void )
int Dup2Test(void)
{ {
int fd1, fd2; int fd1, fd2;
int flags;
int rv;
int flags = 0, retval = FALSE; fd1 = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd1 != -1 );
int error = 0; fd2 = open( "testfile2.tst", O_RDONLY );
rtems_test_assert( fd2 != -1 );
fd1 = open ("testfile1.tst", O_RDONLY);
fd2 = open ("testfile2.tst", O_RDONLY);
error = dup2(fd1, fd2);
/* make sure dup2 works if both fd1 and fd2 are valid file descriptors. */ /* 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 ) & O_APPEND;
flags = fcntl(fd1, F_GETFL); rtems_test_assert( flags == O_APPEND );
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. */ /* 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) */ /* this assumes -1 is an invalid value for a file descriptor!!! (POSIX book, p.135) */
rv = close( fd1 );
rtems_test_assert( rv == 0 );
fd1 = -1; fd1 = -1;
if (dup2 (fd1, fd2) != -1) rv = dup2( fd1, fd2 );
retval = FALSE; rtems_test_assert( rv == -1 );
else {
fd1 = dup(fd2); fd1 = dup( fd2 );
fd2 = -1; fd2 = -1;
if (dup2(fd1, fd2) != -1) rv = dup2( fd1, fd2 );
retval = FALSE; rtems_test_assert( rv == -1 );
}
}
close (fd1); rv = close( fd1 );
close (fd2); rtems_test_assert( rv == 0 );
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* FDataSyncTest function * @brief Exercises fdatasync(). Does NOT test the functionality of the
*
* Hits the fdatasync code. Does NOT test the functionality of the
* underlying fdatasync entry in the IMFS op table. * 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.
*
* ---------------------------------------------------------------
*/ */
static void FDataSyncTest( void )
int FDataSyncTest(void)
{ {
int fd = -1; int fd;
int error = 0, retval = TRUE; int rv;
/* Try it with a RD_ONLY file. */ /* Try it with a RD_ONLY file. */
fd = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd != -1 );
fd = open ("testfile1.tst", O_RDONLY); rv = fdatasync( fd );
rtems_test_assert( rv == -1 );
rtems_test_assert( errno == EBADF );
error = fdatasync(fd); rv = close(fd);
if ((error == -1) && (errno == EINVAL)) rtems_test_assert( rv == 0 );
retval = TRUE;
else
retval = FALSE;
close (fd);
if (retval == TRUE) {
/* Try it with a bad file descriptor */ /* Try it with a bad file descriptor */
fd = -1; fd = -1;
error = fdatasync(fd); rv = fdatasync( fd );
if ((errno == EBADF) && (error == -1)) rtems_test_assert( rv == -1 );
retval = TRUE; rtems_test_assert( errno == EBADF );
else
retval = FALSE;
}
/* Okay - now the success case... */ /* Okay - now the success case... */
fd = open( "testfile1.tst", O_RDWR );
rv = fdatasync( fd );
rtems_test_assert( rv == 0 );
if (retval == TRUE) { rv = close( fd );
fd = open ("testfile1.tst", O_RDWR); rtems_test_assert( rv == 0 );
error = fdatasync(fd);
if (error == 0)
retval = TRUE;
else
retval = FALSE;
close (fd);
}
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* UMaskTest function * @brief Exercises umask().
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void UMaskTest( void )
int UMaskTest (void)
{ {
mode_t error = 0; mode_t rv;
int retval = FALSE;
umask(023); (void) umask( 023 );
error = umask(022);
if (error == 023) rv = umask( 022 );
retval = TRUE; rtems_test_assert( rv == 023 );
else
retval = FALSE;
/* assert (retval == TRUE);*/
return(retval);
} }
/* --------------------------------------------------------------- /**
* UTimeTest function * @brief Exercises utime(). Does not test the functionality of the
* * underlying utime entry in the IMFS op table.
* 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.
*
* ---------------------------------------------------------------
*/ */
static void UTimeTest( void )
int UTimeTest (void)
{ {
int error = 0, retval = FALSE; int rv;
struct utimbuf time; struct utimbuf time;
struct stat fstat; struct stat fstat;
/* First, an invalid filename. */ /* First, an invalid filename. */
error = utime("!This is an =invalid p@thname!!! :)", NULL); rv = utime( "!This is an =invalid p@thname!!! :)", NULL );
rtems_test_assert( rv == -1 );
if (error == -1) rtems_test_assert( errno == ENOENT );
retval = TRUE;
else
retval = FALSE;
/* Now, the success test. */ /* Now, the success test. */
if (retval == TRUE) {
time.actime = 12345; time.actime = 12345;
time.modtime = 54321; time.modtime = 54321;
error = utime("testfile1.tst", &time); rv = utime( "testfile1.tst", &time );
rtems_test_assert( rv == 0 );
if (error == 0) {
/* But, did it set the time? */ /* But, did it set the time? */
stat ("testfile1.tst", &fstat); 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 ((fstat.st_atime == 12345) && (fstat.st_mtime == 54321 )) rv = utime( "testfile1.tst", NULL );
retval = TRUE; rtems_test_assert( rv == 0 );
else
retval = FALSE;
}
else
retval = FALSE;
error = utime("testfile1.tst", NULL );
retval &= (error == 0) ? TRUE : FALSE;
}
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* UTimesTest function * @brief Exercises utimes(). Does NOT test the functionality of the
* * underlying utime entry in the IMFS op table.
* 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.
*
* ---------------------------------------------------------------
*/ */
static void UTimesTest( void )
int UTimesTest (void)
{ {
int error = 0, retval = FALSE; int rv;
struct timeval time[2]; struct timeval time[2];
struct stat fstat; struct stat fstat;
/* First, an invalid filename. */ /* First, an invalid filename. */
error = utimes("!This is an =invalid p@thname!!! :)", NULL); rv = utimes( "!This is an =invalid p@thname!!! : )", NULL);
rtems_test_assert( rv == -1 );
if (error == -1) rtems_test_assert( errno == ENOENT );
retval = TRUE;
else
retval = FALSE;
/* Now, the success test. */ /* Now, the success test. */
if (retval == TRUE) {
time[0].tv_sec = 12345; time[0].tv_sec = 12345;
time[1].tv_sec = 54321; time[1].tv_sec = 54321;
error = utimes("testfile1.tst", (struct timeval *)&time); rv = utimes( "testfile1.tst", (struct timeval *)&time );
rtems_test_assert( rv == 0 );
if (error == 0) {
/* But, did it set the time? */ /* But, did it set the time? */
stat ("testfile1.tst", &fstat); rv = stat( "testfile1.tst", &fstat );
rtems_test_assert( rv == 0 );
if ((fstat.st_atime == 12345) && (fstat.st_mtime == 54321 )) rtems_test_assert( fstat.st_atime == 12345 );
retval = TRUE; rtems_test_assert( fstat.st_mtime == 54321 );
else
retval = FALSE;
}
else
retval = FALSE;
}
/* assert (retval == TRUE);*/
return (retval);
} }
/* --------------------------------------------------------------- /**
* PathConfTest function * @brief Exercises pathconf().
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void PathConfTest( void )
int PathConfTest (void)
{ {
int error = 0, retval = FALSE; int rv;
error = pathconf("thisfiledoesnotexist", _PC_LINK_MAX); rv = pathconf( "thisfiledoesnotexist", _PC_LINK_MAX );
rtems_test_assert( rv == -1 );
if (error == -1) { rv = pathconf( "testfile1.tst", _PC_LINK_MAX );
error = pathconf("testfile1.tst", _PC_LINK_MAX); rtems_test_assert( rv != -1 );
if (error != -1)
retval = TRUE;
else
retval = FALSE;
}
else
retval = FALSE;
/* assert (retval == TRUE);*/
return(retval);
} }
/* --------------------------------------------------------------- /**
* FPathConfTest function * @brief Exercises fpathconf().
*
* Hits the fpathconf code.
*
* arguments: none
* assumptions: fpathconf function available.
* actions: Call fpathconf with all arguments, plus an invalid.
*
* returns: TRUE always.
*
* ---------------------------------------------------------------
*/ */
static void FPathConfTest( void )
int FPathConfTest (void)
{ {
int error = 0, retval = TRUE; int rv;
int fd;
int fd = -1; fd = -1;
rv = fpathconf( fd, _PC_LINK_MAX );
rtems_test_assert( rv == -1 );
error = fpathconf(fd, _PC_LINK_MAX); fd = open( "testfile1.tst", O_RDWR );
rtems_test_assert( fd != -1 );
if (error == -1) { rv = fpathconf( fd, _PC_LINK_MAX );
fd = open("testfile1.tst", O_RDWR); rtems_test_assert( rv != -1 );
error = fpathconf(fd, _PC_LINK_MAX); rv = fpathconf( fd, _PC_MAX_CANON );
error = fpathconf(fd, _PC_MAX_CANON); rtems_test_assert( rv != -1 );
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);
close(fd); rv = fpathconf( fd, _PC_MAX_INPUT );
rtems_test_assert( rv != -1 );
fd = open("testfile1.tst", O_WRONLY); rv = fpathconf( fd, _PC_NAME_MAX );
rtems_test_assert( rv != -1 );
error = fpathconf(fd, _PC_LINK_MAX); rv = fpathconf( fd, _PC_PATH_MAX );
rtems_test_assert( rv != -1 );
retval = TRUE; rv = fpathconf( fd, _PC_PIPE_BUF );
} rtems_test_assert( rv != -1 );
else rv = fpathconf( fd, _PC_CHOWN_RESTRICTED );
retval = FALSE; rtems_test_assert( rv != -1 );
/* assert (retval == TRUE);*/ rv = fpathconf( fd, _PC_NO_TRUNC );
rtems_test_assert( rv != -1 );
return(retval); rv = fpathconf( fd, _PC_VDISABLE );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_ASYNC_IO );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_PRIO_IO );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_SYNC_IO );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, 255 );
rtems_test_assert( rv == -1 );
rv = close( fd );
rtems_test_assert( rv == 0 );
fd = open( "testfile1.tst", O_WRONLY );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_LINK_MAX );
rtems_test_assert( rv != -1 );
rv = close( fd );
rtems_test_assert( rv == 0 );
} }
/* --------------------------------------------------------------- /**
* FSyncTest function * @brief Exercises fsync().
*
* 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.
*
* ---------------------------------------------------------------
*/ */
static void FSyncTest( void )
int FSyncTest (void)
{ {
int error = 0, retval = FALSE; int rv;
int fd = -1; int fd;
fd = open("testfile1.tst", O_RDWR); fd = open( "testfile1.tst", O_RDWR );
rtems_test_assert( fd != -1 );
if (fd != -1) { rv = fsync(fd);
rtems_test_assert( rv != -1 );
error = fsync(fd); rv = close( fd );
rtems_test_assert( rv == 0 );
if (error != -1)
retval = TRUE;
else
retval = FALSE;
close(fd);
}
else
retval = FALSE;
/* assert (retval == TRUE);*/
return(retval);
} }
/* --------------------------------------------------------------- /**
* Main function * @brief Exercises sync().
*
* main entry point to the test
*
* ---------------------------------------------------------------
*/ */
static void SyncTest( void )
{
sync();
}
#if defined(__rtems__) /**
int test_main(void); * @brief The main entry point to the test.
int test_main(void) */
#else int test_main( void );
int main( int test_main( void )
int argc,
char **argv
)
#endif
{ {
TEST_BEGIN(); TEST_BEGIN();
if (InitFiles() == TRUE) { InitFiles();
printf ("\nFiles initialized successfully.\n");
printf ("Testing device_lseek()... "); DeviceLSeekTest();
if (DeviceLSeekTest() == TRUE) DupTest();
printf ("Success.\n"); Dup2Test();
else FDataSyncTest();
printf ("Failed!!!\n"); UMaskTest();
UTimeTest();
printf ("Testing dup()............ "); UTimesTest();
if (DupTest() == TRUE) FSyncTest();
printf ("Success.\n"); PathConfTest();
else FPathConfTest();
printf ("Failed!!!\n"); SyncTest();
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(); TEST_END();
}
rtems_test_exit(0); rtems_test_exit( 0 );
} }