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
Files initialized successfully. *** TEST STATE: EXPECTED_PASS
Testing device_lseek()... Failed!!! *** TEST BUILD: RTEMS_DEBUG RTEMS_POSIX_API
Testing dup()............ Failed!!! *** TEST TOOLS: 10.2.1 20210309 (RTEMS 6, RSB 5e449fb5c2cb6812a238f9f9764fd339cbbf05c2, Newlib d10d0d9)
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 PSX 13 *** *** END OF TEST PSX 13 ***

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,47 +66,25 @@
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';
@@ -98,7 +100,6 @@ int InitFiles (void)
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;
@@ -106,621 +107,348 @@ int InitFiles (void)
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 );
rv = fclose( fp3 );
rtems_test_assert( rv != EOF );
} }
else /**
retval = FALSE; * @brief Exercises lseek() by lseeking on the console.
/* assert (retval == TRUE);*/
return (retval);
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
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 flags = 0, retval = FALSE; int rv;
fd1 = open( "testfile1.tst", O_RDONLY ); fd1 = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd1 != -1 );
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; * @brief Exercises dup2().
close( fd1 );
close( fd2 );
/* assert (retval == TRUE);*/
return (retval);
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
static void Dup2Test( void )
int Dup2Test(void)
{ {
int fd1, fd2; int fd1, fd2;
int flags;
int flags = 0, retval = FALSE; int rv;
int error = 0;
fd1 = open( "testfile1.tst", O_RDONLY ); fd1 = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd1 != -1 );
fd2 = open( "testfile2.tst", O_RDONLY ); fd2 = open( "testfile2.tst", O_RDONLY );
error = dup2(fd1, fd2); rtems_test_assert( fd2 != -1 );
/* 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 );
}
rv = close( fd1 );
rtems_test_assert( rv == 0 );
} }
close (fd1); /**
close (fd2); * @brief Exercises fdatasync(). Does NOT test the functionality of the
/* assert (retval == TRUE);*/
return (retval);
}
/* ---------------------------------------------------------------
* FDataSyncTest function
*
* 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 ); fd = open( "testfile1.tst", O_RDONLY );
rtems_test_assert( fd != -1 );
error = fdatasync(fd); rv = fdatasync( fd );
if ((error == -1) && (errno == EINVAL)) rtems_test_assert( rv == -1 );
retval = TRUE; rtems_test_assert( errno == EBADF );
else
retval = FALSE;
close (fd); rv = close(fd);
rtems_test_assert( rv == 0 );
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... */
if (retval == TRUE) {
fd = open( "testfile1.tst", O_RDWR ); fd = open( "testfile1.tst", O_RDWR );
error = fdatasync(fd); rv = fdatasync( fd );
rtems_test_assert( rv == 0 );
if (error == 0) rv = close( fd );
retval = TRUE; rtems_test_assert( rv == 0 );
else
retval = FALSE;
close (fd);
} }
/* assert (retval == TRUE);*/ /**
* @brief Exercises umask().
return (retval);
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
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);*/ /**
* @brief Exercises utimes(). Does NOT test the functionality of the
return (retval); * underlying utime entry in the IMFS op table.
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
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; * @brief Exercises pathconf().
}
/* assert (retval == TRUE);*/
return (retval);
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
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; * @brief Exercises fpathconf().
/* assert (retval == TRUE);*/
return(retval);
}
/* ---------------------------------------------------------------
* FPathConfTest function
*
* 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);
if (error == -1) {
fd = open( "testfile1.tst", O_RDWR ); fd = open( "testfile1.tst", O_RDWR );
rtems_test_assert( fd != -1 );
error = fpathconf(fd, _PC_LINK_MAX); rv = fpathconf( fd, _PC_LINK_MAX );
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_CANON );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_MAX_INPUT );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_NAME_MAX );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_PATH_MAX );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_PIPE_BUF );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_CHOWN_RESTRICTED );
rtems_test_assert( rv != -1 );
rv = fpathconf( fd, _PC_NO_TRUNC );
rtems_test_assert( rv != -1 );
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 ); fd = open( "testfile1.tst", O_WRONLY );
rtems_test_assert( rv != -1 );
error = fpathconf(fd, _PC_LINK_MAX); rv = fpathconf( fd, _PC_LINK_MAX );
rtems_test_assert( rv != -1 );
retval = TRUE; rv = close( fd );
rtems_test_assert( rv == 0 );
} }
else /**
retval = FALSE; * @brief Exercises fsync().
/* assert (retval == TRUE);*/
return(retval);
}
/* ---------------------------------------------------------------
* 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.
*
* ---------------------------------------------------------------
*/ */
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; * @brief Exercises sync().
/* assert (retval == TRUE);*/
return(retval);
}
/* ---------------------------------------------------------------
* Main function
*
* main entry point to the test
*
* ---------------------------------------------------------------
*/ */
static void SyncTest( void )
{
sync();
}
#if defined(__rtems__) /**
* @brief The main entry point to the test.
*/
int test_main( void ); int test_main( void );
int test_main( void ) int test_main( void )
#else
int main(
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 );
} }