summaryrefslogtreecommitdiffstats
path: root/testsuites/libtests/termios06
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-05 21:14:39 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-05 21:14:39 +0000
commit15bf747a44be4c16a1cb52eb4dcaf2b39e422804 (patch)
tree7710d396397d43768e82126140f6fea0f5c62923 /testsuites/libtests/termios06
parent2010-07-05 Bharath Suri <bharath.s.jois@gmail.com> (diff)
downloadrtems-15bf747a44be4c16a1cb52eb4dcaf2b39e422804.tar.bz2
2010-07-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac, malloc03/init.c: Add test for PPPDDISC. * termios06/.cvsignore, termios06/Makefile.am, termios06/init.c, termios06/termios06.doc, termios06/termios06.scn, termios06/test_pppd.c: New files.
Diffstat (limited to 'testsuites/libtests/termios06')
-rw-r--r--testsuites/libtests/termios06/.cvsignore2
-rw-r--r--testsuites/libtests/termios06/Makefile.am27
-rw-r--r--testsuites/libtests/termios06/init.c144
-rw-r--r--testsuites/libtests/termios06/termios06.doc22
-rw-r--r--testsuites/libtests/termios06/termios06.scn42
-rw-r--r--testsuites/libtests/termios06/test_pppd.c101
6 files changed, 338 insertions, 0 deletions
diff --git a/testsuites/libtests/termios06/.cvsignore b/testsuites/libtests/termios06/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/testsuites/libtests/termios06/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/testsuites/libtests/termios06/Makefile.am b/testsuites/libtests/termios06/Makefile.am
new file mode 100644
index 0000000000..08187ab576
--- /dev/null
+++ b/testsuites/libtests/termios06/Makefile.am
@@ -0,0 +1,27 @@
+##
+## $Id$
+##
+
+MANAGERS = all
+
+rtems_tests_PROGRAMS = termios06
+termios06_SOURCES = init.c ../termios03/termios_testdriver_polled.c test_pppd.c
+
+dist_rtems_tests_DATA = termios06.scn
+dist_rtems_tests_DATA += termios06.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 = $(termios06_OBJECTS) $(termios06_LDADD)
+LINK_LIBS = $(termios06_LDLIBS)
+
+termios06$(EXEEXT): $(termios06_OBJECTS) $(termios06_DEPENDENCIES)
+ @rm -f termios06$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/libtests/termios06/init.c b/testsuites/libtests/termios06/init.c
new file mode 100644
index 0000000000..c4649cda30
--- /dev/null
+++ b/testsuites/libtests/termios06/init.c
@@ -0,0 +1,144 @@
+/*
+ * 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>
+
+void pppasyncattach(void);
+void ppp_test_driver_set_rx( const char *expected, size_t len );
+
+int Test_fd;
+int InitialDiscipline;
+
+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 set_discipline(void)
+{
+ int pppdisc = PPPDISC;
+ int sc;
+
+ puts( "ioctl - TIOCGETD - OK" );
+ sc = ioctl(Test_fd, TIOCGETD, &InitialDiscipline);
+ rtems_test_assert( sc == 0 );
+
+ puts( "ioctl - TIOCSETD - OK" );
+ sc = ioctl(Test_fd, TIOCSETD, &pppdisc);
+ rtems_test_assert( sc == 0 );
+}
+
+void ioctl_it(void)
+{
+ int rc;
+
+ puts( "ioctl(" TERMIOS_TEST_DRIVER_DEVICE_NAME ") - OK " );
+ rc = ioctl( Test_fd, 0xFFFF, NULL );
+ rtems_test_assert( rc == 0 );
+}
+
+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 read_helper(
+ int fd,
+ const char *expected
+)
+{
+ int rc;
+ size_t len;
+
+ len = strlen( expected );
+
+ ppp_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 );
+}
+
+void read_it(void)
+{
+ read_helper( Test_fd, "This is test PPP input." );
+}
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ puts( "\n\n*** TEST TERMIOS06 ***" );
+
+ pppasyncattach();
+ open_it();
+ set_discipline();
+ write_it();
+ ioctl_it();
+ read_it();
+ close_it();
+
+ puts( "*** END OF TEST TERMIOS06 ***" );
+
+ 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 */
diff --git a/testsuites/libtests/termios06/termios06.doc b/testsuites/libtests/termios06/termios06.doc
new file mode 100644
index 0000000000..6e90369beb
--- /dev/null
+++ b/testsuites/libtests/termios06/termios06.doc
@@ -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: termios06
+
+directives:
+
+ various parts of termios that deal with PPPDISC
+
+concepts:
+
++ Exercise PPPDISC functionality in termios
diff --git a/testsuites/libtests/termios06/termios06.scn b/testsuites/libtests/termios06/termios06.scn
new file mode 100644
index 0000000000..7b3f36b325
--- /dev/null
+++ b/testsuites/libtests/termios06/termios06.scn
@@ -0,0 +1,42 @@
+*** TEST TERMIOS06 ***
+open(/dev/test) - OK
+ioctl - TIOCGETD - OK
+ioctl - TIOCSETD - OK
+pppopen called
+write(PPPD TEST) - OK
+pppwrite called - 10 bytes
+50 50 50 44 20 54 45 53 54 00 |PPPD TEST. |
+pppstart called
+ioctl(/dev/test) - OK
+pppioctl called
+
+Reading (expected):
+54 68 69 73 20 69 73 20 74 65 73 74 20 50 50 50 |This is test PPP|
+20 69 6e 70 75 74 | input |
+pppread calledpppinput called - with (T)
+pppinput called - with (h)
+pppinput called - with (i)
+pppinput called - with (s)
+pppinput called - with ( )
+pppinput called - with (i)
+pppinput called - with (s)
+pppinput called - with ( )
+pppinput called - with (t)
+pppinput called - with (e)
+pppinput called - with (s)
+pppinput called - with (t)
+pppinput called - with ( )
+pppinput called - with (P)
+pppinput called - with (P)
+pppinput called - with (P)
+pppinput called - with ( )
+pppinput called - with (i)
+pppinput called - with (n)
+pppinput called - with (p)
+pppinput called - with (u)
+pppinput called - with (t)
+pppinput called - with (.)
+Read 0 bytes from read(2)
+close(/dev/test) - OK
+pppclose called
+*** END OF TEST TERMIOS06 ***
diff --git a/testsuites/libtests/termios06/test_pppd.c b/testsuites/libtests/termios06/test_pppd.c
new file mode 100644
index 0000000000..6a2884a1d2
--- /dev/null
+++ b/testsuites/libtests/termios06/test_pppd.c
@@ -0,0 +1,101 @@
+/*
+ * 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 <termios.h>
+#include <rtems/termiostypes.h>
+#include <rtems/dumpbuf.h>
+
+int pppopen(struct rtems_termios_tty *tty);
+int pppclose(struct rtems_termios_tty *tty);
+int pppread(struct rtems_termios_tty *tty, rtems_libio_rw_args_t *rw_args);
+int pppwrite(struct rtems_termios_tty *tty, rtems_libio_rw_args_t *rw_args);
+int pppioctl(struct rtems_termios_tty *tty, rtems_libio_ioctl_args_t *args);
+int pppinput(int c, struct rtems_termios_tty *tty);
+int pppstart(struct rtems_termios_tty *tp);
+
+/*
+ * Define the PPP line discipline.
+ */
+
+static struct rtems_termios_linesw pppdisc = {
+ pppopen, pppclose, pppread, pppwrite,
+ pppinput, pppstart, pppioctl, NULL
+};
+
+const char *RXExpected;
+size_t RXLength;
+
+void ppp_test_driver_set_rx( const char *expected, size_t len )
+{
+ RXExpected = expected;
+ RXLength = len;
+}
+
+void pppasyncattach(void)
+{
+ rtems_termios_linesw[PPPDISC] = pppdisc;
+}
+
+int pppopen(struct rtems_termios_tty *tty)
+{
+ puts( "pppopen called" );
+ return 0;
+}
+
+int pppclose(struct rtems_termios_tty *tty)
+{
+ puts( "pppclose called" );
+ return 0;
+}
+
+int pppread(struct rtems_termios_tty *tty, rtems_libio_rw_args_t *rw_args)
+{
+ puts( "pppread called" );
+
+ rtems_termios_enqueue_raw_characters( tty, (char *)RXExpected, RXLength );
+
+ RXExpected = NULL;
+ RXLength = 0;
+ return 0;
+}
+
+int pppwrite(struct rtems_termios_tty *tty, rtems_libio_rw_args_t *rw_args)
+{
+ int maximum = rw_args->count;
+ char *out_buffer = rw_args->buffer;
+
+ printf( "pppwrite called - %d bytes\n", maximum );
+ rtems_print_buffer( (unsigned char *) out_buffer, maximum );
+ rw_args->bytes_moved = maximum;
+ rtems_termios_dequeue_characters( tty, 1 );
+ return 0;
+}
+
+int pppioctl(struct rtems_termios_tty *tty, rtems_libio_ioctl_args_t *args)
+{
+ puts( "pppioctl called" );
+ return 0;
+}
+
+int pppinput(int c, struct rtems_termios_tty *tty)
+{
+ printf( "pppinput called - with (%c)\n", c );
+ return 0;
+}
+
+int pppstart(struct rtems_termios_tty *tp)
+{
+ puts( "pppstart called" );
+ return 0;
+}
+
+