From 287febb50397f321d5a38f8d7df668833c192125 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 24 Jun 2010 19:46:40 +0000 Subject: 2010-06-24 Bharath Suri * Makefile.am, configure.ac: Removed some fifo tests. * spfifo01/Makefile.am, spfifo01/init.c: Minor changes to avoid excessive new lines in the output. spfifo02/Makefile.am, spfifo02/init.c, spfifo02/spfifo02.doc, spfifo02/spfifo02.scn, spfifo03/Makefile.am: Merge from spfifo08. Also added a few more cases, mostly from spfifo04/init.c. * spfifo03/init.c, spfifo03/spfifo03.doc, spfifo03/spfifo03.scn: Previously was spfifo06. Configure parameter for pipes is used now. * spfifo04/.cvsignore, spfifo04/Makefile.am, spfifo04/init.c, spfifo04/spfifo04.doc, spfifo04/spfifo04.scn, spfifo08/.cvsignore, spfifo08/Makefile.am, spfifo08/init.c, spfifo08/spfifo08.doc, spfifo08/spfifo08.scn: Removed. --- testsuites/sptests/spfifo03/init.c | 196 +++++++++++++++++++++++++++++++------ 1 file changed, 166 insertions(+), 30 deletions(-) (limited to 'testsuites/sptests/spfifo03/init.c') diff --git a/testsuites/sptests/spfifo03/init.c b/testsuites/sptests/spfifo03/init.c index 4902a3bacc..610c328165 100644 --- a/testsuites/sptests/spfifo03/init.c +++ b/testsuites/sptests/spfifo03/init.c @@ -1,6 +1,16 @@ -/* - * COPYRIGHT (c) 2010 - * Bharath Suri. +/* Init + * + * This routine is the initialization task for this test program. + * It is a user initialization task and has the responsibility + * of invoking the test routine + * + * Input parameters: + * not_used + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989-1999. + * 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 @@ -22,48 +32,169 @@ #include #include +#define SEND_RCV_BUFSIZ 12 +rtems_id Barrier; -void test_main(void) +rtems_task read_task(rtems_task_argument not_used) { + int fd = 0; + int status = -1; + + char recvBuf_r1[SEND_RCV_BUFSIZ] = {0}; + char recvBuf_r2[SEND_RCV_BUFSIZ] = {0}; + + puts("\nRead task activated, waiting till writer opens"); + + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + sleep(1); + + puts("\nNow, reader opening file(1)"); + fd = open("/tmp/fifo01", O_RDONLY); + if(fd <= 0) { + printf("Error opening file: (%d) :: %s", errno, strerror(errno)); + rtems_test_assert(0); + } + + status = read(fd, recvBuf_r1, sizeof(recvBuf_r1)-1); + rtems_test_assert(status == sizeof(recvBuf_r1)-1); + + printf("\n@ receiver (being a unblocked reader): Got %s", recvBuf_r1); + + status = close(fd); + rtems_test_assert(status == 0); + + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + puts("\nReader opening file(2)"); + fd = open("/tmp/fifo01", O_RDONLY); + if(fd <= 0) { + printf("Error opening file: (%d) :: %s", errno, strerror(errno)); + rtems_test_assert(0); + } + + status = read(fd, recvBuf_r2, sizeof(recvBuf_r2)-1); + rtems_test_assert(status == sizeof(recvBuf_r2)-1); + + printf("\n@ receiver (being a blocked reader): Got %s", recvBuf_r2); + + status = close(fd); + rtems_test_assert(status == 0); + + + puts("\nReader done!"); + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + rtems_task_delete( RTEMS_SELF ); +} + + +void test_main(void) //Also acts as the write task +{ + + rtems_id readTaskID; + rtems_name readTaskName; + + char sendBuf_r1[SEND_RCV_BUFSIZ] = {0}; + char sendBuf_r2[SEND_RCV_BUFSIZ] = {0}; int status = -1; int fd = 0; - puts("\n\n*** FIFO / PIPE OPEN TEST - 3 ***"); - puts( -"\n\nConfiguration: Pipes configured, \ -but number of barriers configured = 1\n\ -Required number of barriers = 2" - ); - puts("\n\nCreating directory /tmp"); + strcpy( sendBuf_r1, "SendBuffer1" ); + strcpy( sendBuf_r2, "SendBuffer2" ); + + memset( &Barrier, 0, sizeof(Barrier) ); + status = rtems_barrier_create ( + rtems_build_name ( 'B', 'A', 'R', 't' ), + RTEMS_BARRIER_AUTOMATIC_RELEASE, + 2, + &Barrier + ); + + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + puts("\n\n*** FIFO / PIPE OPEN TEST - 6 ***"); + + puts("\nCreating a task name and a task"); + readTaskName = rtems_build_name('T','A','r',' '); + + status = rtems_task_create( + readTaskName, + 1, + RTEMS_MINIMUM_STACK_SIZE * 2, + RTEMS_INTERRUPT_LEVEL(31), + RTEMS_DEFAULT_ATTRIBUTES, + &readTaskID + ); + + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + puts("\ncreating directory /tmp"); status = mkdir("/tmp", 0777); rtems_test_assert(status == 0); - puts("\n\nCreating fifo /tmp/fifo"); + puts("\ncreating fifo file /tmp/fifo01"); status = mkfifo("/tmp/fifo01", 0777); rtems_test_assert(status == 0); - puts("\n\nAttempt to open the fifo file\n"); - puts( -"Must result in failure since \n\ -number of barriers = 1 => not all resources\n\ -were acquired" - ); + puts("\nStarting the read task"); + status = rtems_task_start(readTaskID, read_task, 0); + rtems_test_assert(status == 0); - fd = open("/tmp/fifo01", O_RDONLY); - rtems_test_assert(fd == -1); - rtems_test_assert(errno == EINTR); // Should this - // be ENOMEM? - puts("\n\nRemove the entry /tmp/fifo01"); - status = unlink("/tmp/fifo01"); + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + puts("\nWriter opening file(1)"); + fd = open("/tmp/fifo01", O_WRONLY); + if(fd <= 0) { + printf("Error opening file: (%d) :: %s", errno, strerror(errno)); + rtems_test_assert(0); + } + + + printf("\n@ sender: %s", sendBuf_r1); + status = write(fd, sendBuf_r1, sizeof(sendBuf_r1)-1); + rtems_test_assert(status == sizeof(sendBuf_r1)-1); + + status = close(fd); rtems_test_assert(status == 0); + + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); - puts("\n\nRemove directory /tmp"); - status = rmdir("/tmp"); + sleep(1); + + // Reader would have blocked by now + puts("\nWriter opening file(2)"); + fd = open("/tmp/fifo01", O_WRONLY); + if(fd <= 0) { + printf("Error opening file: (%d) :: %s", errno, strerror(errno)); + rtems_test_assert(0); + } + + printf("\n@ sender: %s", sendBuf_r2); + status = write(fd, sendBuf_r2, sizeof(sendBuf_r2)-1); + rtems_test_assert(status == sizeof(sendBuf_r2)-1); + + status = close(fd); rtems_test_assert(status == 0); - puts("\n\n*** END OF FIFO / PIPE OPEN TEST - 3 ***"); + status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); + rtems_test_assert( status == RTEMS_SUCCESSFUL ); + + puts( "Removing the fifo" ); + status = unlink("/tmp/fifo01"); + rtems_test_assert(status == 0); + + puts( "Removing /tmp" ); + status = rmdir("/tmp"); + rtems_test_assert(status == 0); + + puts("\n*** END OF FIFO / PIPE OPEN TEST - 6 ***"); } rtems_task Init( @@ -80,13 +211,18 @@ rtems_task Init( #define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 6 -#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_MAXIMUM_TASKS 3 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_PIPES_ENABLED -#define CONFIGURE_MAXIMUM_PIPES 1 + +#define CONFIGURE_MAXIMUM_BARRIERS 1 + #define CONFIGURE_INIT +#define CONFIGURE_FIFOS_ENABLED +#define CONFIGURE_MAXIMUM_FIFOS 1 + +#define CONFIGURE_INIT #include /* end of file */ -- cgit v1.2.3