2010-07-19 Joel Sherrill <joel.sherrill@oarcorp.com>

* Makefile.am, configure.ac, termios06/init.c: Add initial tests for
	XON/XOFF and VMIN/VMAX cases.
	* termios07/.cvsignore, termios07/Makefile.am, termios07/init.c,
	termios07/termios07.doc, termios07/termios07.scn,
	termios08/.cvsignore, termios08/Makefile.am, termios08/init.c,
	termios08/termios08.doc, termios08/termios08.scn: New files.
This commit is contained in:
Joel Sherrill
2010-07-19 13:54:47 +00:00
parent efdc6987a7
commit 78da8ac396
14 changed files with 486 additions and 2 deletions
+9
View File
@@ -1,3 +1,12 @@
2010-07-19 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac, termios06/init.c: Add initial tests for
XON/XOFF and VMIN/VMAX cases.
* termios07/.cvsignore, termios07/Makefile.am, termios07/init.c,
termios07/termios07.doc, termios07/termios07.scn,
termios08/.cvsignore, termios08/Makefile.am, termios08/init.c,
termios08/termios08.doc, termios08/termios08.scn: New files.
2010-07-19 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac: Add tar test for error cases.
+4 -2
View File
@@ -9,9 +9,11 @@ SUBDIRS = POSIX
SUBDIRS += bspcmdline01 cpuuse devfs01 gxx01 \
malloctest malloc02 malloc03 malloc04 malloc05 heapwalk \
putenvtest monitor monitor02 rtmonuse stackchk stackchk01 \
termios termios01 termios02 termios03 termios04 termios05 termios06 \
termios termios01 termios02 termios03 termios04 termios05 \
termios06 termios07 termios08 \
rtems++ tztest block01 block02 block03 block04 block05 block06 block07 \
block08 block09 block10 stringto01 tar03
block08 block09 block10 stringto01 \
tar03
include $(top_srcdir)/../automake/subdirs.am
include $(top_srcdir)/../automake/local.am
+2
View File
@@ -69,6 +69,8 @@ termios03/Makefile
termios04/Makefile
termios05/Makefile
termios06/Makefile
termios07/Makefile
termios08/Makefile
tztest/Makefile
POSIX/Makefile
])
+35
View File
@@ -19,6 +19,7 @@
#include <unistd.h>
#include <sys/ioctl.h>
#include <rtems/dumpbuf.h>
#include <rtems/termiostypes.h>
void pppasyncattach(void);
void ppp_test_driver_set_rx( const char *expected, size_t len );
@@ -34,6 +35,39 @@ void open_it(void)
rtems_test_assert( Test_fd != -1 );
}
void Rx_Wake(
struct termios *tty,
void *arg
)
{
printk( "Rx_Wake - invoked\n" );
}
void Tx_Wake(
struct termios *tty,
void *arg
)
{
printk( "Tx_Wake - invoked\n" );
}
struct ttywakeup RxWake = { Rx_Wake, NULL };
struct ttywakeup TxWake = { Tx_Wake, NULL };
void set_wakeups(void)
{
int sc;
puts( "ioctl - RTEMS_IO_SNDWAKEUP - OK" );
sc = ioctl( Test_fd, RTEMS_IO_SNDWAKEUP, &TxWake );
rtems_test_assert( sc == 0 );
puts( "ioctl - RTEMS_IO_RCVWAKEUP - OK" );
sc = ioctl( Test_fd, RTEMS_IO_RCVWAKEUP, &RxWake );
rtems_test_assert( sc == 0 );
}
void set_discipline(void)
{
int pppdisc = PPPDISC;
@@ -116,6 +150,7 @@ rtems_task Init(
pppasyncattach();
open_it();
set_wakeups();
set_discipline();
write_it();
ioctl_it();
+2
View File
@@ -0,0 +1,2 @@
Makefile
Makefile.in
+27
View File
@@ -0,0 +1,27 @@
##
## $Id$
##
MANAGERS = all
rtems_tests_PROGRAMS = termios07
termios07_SOURCES = init.c ../termios04/termios_testdriver_intr.c
dist_rtems_tests_DATA = termios07.scn
dist_rtems_tests_DATA += termios07.doc
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
AM_CPPFLAGS += -I$(top_srcdir)/termios04
LINK_OBJS = $(termios07_OBJECTS) $(termios07_LDADD)
LINK_LIBS = $(termios07_LDLIBS)
termios07$(EXEEXT): $(termios07_OBJECTS) $(termios07_DEPENDENCIES)
@rm -f termios07$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am
+174
View File
@@ -0,0 +1,174 @@
/*
* COPYRIGHT (c) 1989-2010.
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <tmacros.h>
#include "test_support.h"
#include "termios_testdriver_intr.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <rtems/dumpbuf.h>
#include <rtems/libio.h>
void write_helper(
int fd,
const char *c
)
{
size_t len;
int rc;
len = strlen( c );
printf( "Writing: %s", c );
rc = write( fd, c, len );
rtems_test_assert( rc == len );
termios_test_driver_dump_tx("Transmitted");
}
uint8_t read_helper_buffer[256];
void read_helper(
int fd,
const char *expected
)
{
int rc;
size_t len;
len = strlen( expected );
termios_test_driver_set_rx( expected, len );
printf( "\nReading (expected):\n" );
rtems_print_buffer( (unsigned char *)expected, len-1 );
rc = read( fd, read_helper_buffer, sizeof(read_helper_buffer) );
rtems_test_assert( rc != -1 );
printf( "Read %d bytes from read(2)\n", rc );
rtems_print_buffer( read_helper_buffer, rc );
termios_test_driver_dump_tx("As Read");
}
int Test_fd;
void open_it(void)
{
/* open the file */
puts( "open(" TERMIOS_TEST_DRIVER_DEVICE_NAME ") - OK " );
Test_fd = open( TERMIOS_TEST_DRIVER_DEVICE_NAME, O_RDWR );
rtems_test_assert( Test_fd != -1 );
}
void close_it(void)
{
int rc;
puts( "close(" TERMIOS_TEST_DRIVER_DEVICE_NAME ") - OK " );
rc = close( Test_fd );
rtems_test_assert( rc == 0 );
}
void change_iflag( const char *desc, int mask, int new )
{
int rc;
struct termios attr;
printf( "Changing c_iflag to: %s\n", desc );
rc = tcgetattr( Test_fd, &attr );
rtems_test_assert( rc == 0 );
attr.c_iflag &= ~mask;
attr.c_iflag |= new;
rc = tcsetattr( Test_fd, TCSANOW, &attr );
rtems_test_assert( rc == 0 );
}
const char XON_String[] = "\021";
const char XOFF_String[] = "\023";
const char ExpectedOutput_1[] =
"0123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789";
#if 0
const char ExpectedInput_1[] = "Blocking interrupt driven read.\n";
const char ExpectedInput_2[] = "Non-Blocking interrupt driven read.\n";
#endif
rtems_task Init(
rtems_task_argument argument
)
{
rtems_status_code sc;
puts( "\n\n*** TEST TERMIOS07 ***" );
puts( "rtems_termios_bufsize( 64, 64, 64 ) - OK" );
sc = rtems_termios_bufsize ( 64, 64, 64 );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
open_it();
change_iflag( "Set XON/XOFF", IXON|IXOFF, IXON|IXOFF );
termios_test_driver_set_rx( XOFF_String, 1 );
sc = rtems_task_wake_after( 2 * rtems_clock_get_ticks_per_second() );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
write_helper( Test_fd, ExpectedOutput_1 );
#if 0
/* some basic cases */
write_helper( Test_fd, ExpectedOutput_1 );
read_helper( Test_fd, ExpectedInput_1 );
termios_test_driver_set_rx_enqueue_now( true );
read_helper( Test_fd, ExpectedInput_2 );
#endif
close_it();
puts( "*** END OF TEST TERMIOS07 ***" );
rtems_test_exit(0);
}
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS \
TERMIOS_TEST_DRIVER_TABLE_ENTRY
/* include an extra slot for registering the termios one dynamically */
#define CONFIGURE_MAXIMUM_DRIVERS 3
/* one for the console and one for the test port */
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 3
/* we need to be able to open the test device */
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_MAXIMUM_TIMERS 2
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
/* end of file */
@@ -0,0 +1,22 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2010.
# 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.com/license/LICENSE.
#
This file describes the directives and concepts tested by this test set.
test set name: termios07
directives:
XXX list them
concepts:
+ flow control testing
@@ -0,0 +1 @@
XXX fill in with test output
+2
View File
@@ -0,0 +1,2 @@
Makefile
Makefile.in
+27
View File
@@ -0,0 +1,27 @@
##
## $Id$
##
MANAGERS = all
rtems_tests_PROGRAMS = termios08
termios08_SOURCES = init.c ../termios03/termios_testdriver_polled.c
dist_rtems_tests_DATA = termios08.scn
dist_rtems_tests_DATA += termios08.doc
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
AM_CPPFLAGS += -I$(top_srcdir)/termios03
LINK_OBJS = $(termios08_OBJECTS) $(termios08_LDADD)
LINK_LIBS = $(termios08_LDLIBS)
termios08$(EXEEXT): $(termios08_OBJECTS) $(termios08_DEPENDENCIES)
@rm -f termios08$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am
+158
View File
@@ -0,0 +1,158 @@
/*
* COPYRIGHT (c) 1989-2010.
* 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.com/license/LICENSE.
*
* $Id$
*/
#include <tmacros.h>
#include "test_support.h"
#include "termios_testdriver_polled.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <rtems/dumpbuf.h>
#include <rtems/termiostypes.h>
int Test_fd;
void open_it(void)
{
/* open the file */
puts( "open(" TERMIOS_TEST_DRIVER_DEVICE_NAME ") - OK " );
Test_fd = open( TERMIOS_TEST_DRIVER_DEVICE_NAME, O_RDWR );
rtems_test_assert( Test_fd != -1 );
}
void close_it(void)
{
int rc;
puts( "close(" TERMIOS_TEST_DRIVER_DEVICE_NAME ") - OK " );
rc = close( Test_fd );
rtems_test_assert( rc == 0 );
}
void write_it(void)
{
ssize_t sc;
char ch[10] = "PPPD TEST";
puts( "write(PPPD TEST) - OK " );
sc = write(Test_fd, ch, sizeof(ch));
rtems_test_assert( sc == sizeof(ch) );
}
uint8_t read_helper_buffer[256];
void change_lflag( const char *desc, int mask, int new )
{
int rc;
struct termios attr;
printf( "Changing c_lflag to: %s\n", desc );
rc = tcgetattr( Test_fd, &attr );
rtems_test_assert( rc == 0 );
attr.c_lflag &= ~mask;
attr.c_lflag |= new;
rc = tcsetattr( Test_fd, TCSANOW, &attr );
rtems_test_assert( rc == 0 );
}
void change_vmin_vtime( const char *desc, int min, int time )
{
int rc;
struct termios attr;
printf( "Changing %s - VMIN=%d VTIME=%d\n", desc, min, time );
rc = tcgetattr( Test_fd, &attr );
rtems_test_assert( rc == 0 );
attr.c_cc[VMIN] = min;
attr.c_cc[VTIME] = time;
rc = tcsetattr( Test_fd, TCSANOW, &attr );
rtems_test_assert( rc == 0 );
}
void read_it(
ssize_t expected
)
{
ssize_t rc;
char buf[32];
rtems_test_assert( expected <= sizeof(buf) );
printf( "read - %zd expected\n", expected );
rc = read( Test_fd, buf, expected );
if ( expected != rc )
printf( "ERROR - expected=%zd rc=%zd\n", expected, rc );
rtems_test_assert( expected == rc );
}
rtems_task Init(
rtems_task_argument argument
)
{
puts( "\n\n*** TEST TERMIOS08 ***" );
open_it();
change_lflag( "non-canonical", ICANON, 0 );
change_vmin_vtime( "to polling", 0, 0 );
read_it( 0 );
change_vmin_vtime( "to half-second timeout", 0, 5 );
read_it( 0 );
change_vmin_vtime( "to half-second timeout", 5, 3 );
puts( "Enqueue 2 characters" );
termios_test_driver_set_rx( "ab", 2 );
read_it( 2 );
change_vmin_vtime( "to half-second timeout", 5, 3 );
puts( "Enqueue 1 character" );
termios_test_driver_set_rx( "b", 1 );
read_it( 1 );
puts( "Enqueue 7 characters" );
termios_test_driver_set_rx( "1234567", 1 );
read_it( 5 );
read_it( 2 );
close_it();
puts( "*** END OF TEST TERMIOS08 ***" );
rtems_test_exit(0);
}
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS TERMIOS_TEST_DRIVER_TABLE_ENTRY
/* one for the console and one for the test port */
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 3
/* we need to be able to open the test device */
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
/* end of file */
@@ -0,0 +1,22 @@
#
# $Id$
#
# COPYRIGHT (c) 1989-2010.
# 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.com/license/LICENSE.
#
This file describes the directives and concepts tested by this test set.
test set name: termios08
directives:
XXX list them
concepts:
+ various VMIN/VMAX cases
@@ -0,0 +1 @@
XXX fill in with test output