summaryrefslogtreecommitdiffstats
path: root/testsuites/libtests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-16 12:58:06 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-19 07:52:33 +0200
commit55e0be36069942e0343e406615a3b1744cf7d6b3 (patch)
treea260825ed4914c1e96683924bfaa04a00bc50e8b /testsuites/libtests
parentlibtests/devfs: Use printk() (diff)
downloadrtems-55e0be36069942e0343e406615a3b1744cf7d6b3.tar.bz2
termios: Use IMFS nodes for new Termios devices
This makes the new Termios devices independent of device major/minor numbers. It enables BSP independent Termios device drivers which may reside in the cpukit domain. These drivers require an IMFS and do not work with the device file system. However, the device file system should go away in the future.
Diffstat (limited to 'testsuites/libtests')
-rw-r--r--testsuites/libtests/termios01/init.c162
1 files changed, 46 insertions, 116 deletions
diff --git a/testsuites/libtests/termios01/init.c b/testsuites/libtests/termios01/init.c
index c836b3d79e..64c3bb286b 100644
--- a/testsuites/libtests/termios01/init.c
+++ b/testsuites/libtests/termios01/init.c
@@ -18,7 +18,9 @@
#include <rtems/termiostypes.h>
#include <fcntl.h>
#include <limits.h>
+#include <unistd.h>
#include <sys/errno.h>
+#include <sys/stat.h>
const char rtems_test_name[] = "TERMIOS 1";
@@ -522,22 +524,32 @@ typedef struct {
bool done;
} device_context;
-static rtems_status_code test_early_device_install_remove(
+static rtems_status_code test_early_device_install(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg
)
{
+ static const rtems_termios_device_handler handler;
+ static const char dev[] = "/foobar";
+
rtems_resource_snapshot snapshot;
rtems_status_code sc;
+ int fd;
+ int rv;
rtems_resource_snapshot_take( &snapshot );
- sc = rtems_termios_device_install( "/", 0, 0, NULL, NULL, NULL );
- rtems_test_assert( sc == RTEMS_INCORRECT_STATE );
+ sc = rtems_termios_device_install( &dev[0], &handler, NULL, NULL );
+ rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+
+ errno = 0;
+ fd = open( &dev[0], O_RDWR );
+ rtems_test_assert( fd == -1 );
+ rtems_test_assert( errno == ENXIO );
- sc = rtems_termios_device_remove( "/", 0, 0 );
- rtems_test_assert( sc == RTEMS_INCORRECT_STATE );
+ rv = unlink( &dev[0] );
+ rtems_test_assert( rv == 0 );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
@@ -547,88 +559,34 @@ static rtems_status_code test_early_device_install_remove(
static void test_device_install_remove(void)
{
static const rtems_termios_device_handler handler;
- static const rtems_device_major_number major = 123456789;
- static const rtems_device_minor_number minor = 0xdeadbeef;
static const char dev[] = "/foobar";
rtems_resource_snapshot snapshot;
rtems_status_code sc;
void *greedy;
- rtems_libio_t iop;
- rtems_libio_open_close_args_t args;
-
- memset( &iop, 0, sizeof( iop ) );
- memset( &args, 0, sizeof( args ) );
- args.iop = &iop;
+ int rv;
rtems_resource_snapshot_take( &snapshot );
greedy = rtems_heap_greedy_allocate( NULL, 0 );
- sc = rtems_termios_device_install( "/", major, minor, &handler, NULL, NULL );
+ sc = rtems_termios_device_install( "/", &handler, NULL, NULL );
rtems_test_assert( sc == RTEMS_NO_MEMORY );
rtems_heap_greedy_free( greedy );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
- sc = rtems_termios_device_install(
- NULL,
- major,
- minor,
- &handler,
- NULL,
- NULL
- );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- sc = rtems_termios_device_install(
- NULL,
- major,
- minor,
- &handler,
- NULL,
- NULL
- );
- rtems_test_assert( sc == RTEMS_RESOURCE_IN_USE );
-
- sc = rtems_termios_device_remove( NULL, major, minor );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
-
- sc = rtems_termios_device_install( "/", major, minor, &handler, NULL, NULL );
+ sc = rtems_termios_device_install( "/", &handler, NULL, NULL );
rtems_test_assert( sc == RTEMS_UNSATISFIED );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
- sc = rtems_termios_device_remove( NULL, major, minor );
- rtems_test_assert( sc == RTEMS_INVALID_ID );
-
- sc = rtems_termios_device_install(
- &dev[0],
- major,
- minor,
- &handler,
- NULL,
- NULL
- );
+ sc = rtems_termios_device_install( &dev[0], &handler, NULL, NULL );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
- sc = rtems_termios_device_remove( "/barfoo", major, minor );
- rtems_test_assert( sc == RTEMS_UNSATISFIED );
-
- sc = rtems_termios_device_open( major, minor, &args );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- sc = rtems_termios_device_remove( &dev[0], major, minor );
- rtems_test_assert( sc == RTEMS_RESOURCE_IN_USE );
-
- sc = rtems_termios_device_close( &args );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- sc = rtems_termios_device_remove( &dev[0], major, minor );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ rv = unlink( &dev[0] );
+ rtems_test_assert( rv == 0 );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
}
@@ -656,14 +614,12 @@ static void test_first_open_error(void)
static const rtems_termios_device_handler handler = {
.first_open = first_open_error
};
- static const rtems_device_major_number major = 123456789;
- static const rtems_device_minor_number minor = 0xdeadbeef;
static const char dev[] = "/foobar";
rtems_resource_snapshot snapshot;
rtems_status_code sc;
- rtems_libio_t iop;
- rtems_libio_open_close_args_t args;
+ int fd;
+ int rv;
device_context ctx = {
.base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "abc" ),
.done = false
@@ -671,27 +627,18 @@ static void test_first_open_error(void)
rtems_resource_snapshot_take( &snapshot );
- sc = rtems_termios_device_install(
- &dev[0],
- major,
- minor,
- &handler,
- NULL,
- &ctx.base
- );
+ sc = rtems_termios_device_install( &dev[0], &handler, NULL, &ctx.base );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
- memset( &iop, 0, sizeof( iop ) );
- memset( &args, 0, sizeof( args ) );
- args.iop = &iop;
-
rtems_test_assert( !ctx.done );
- sc = rtems_termios_device_open( major, minor, &args );
- rtems_test_assert( sc == RTEMS_NO_MEMORY );
+ errno = 0;
+ fd = open( &dev[0], O_RDWR );
+ rtems_test_assert( fd == -1 );
+ rtems_test_assert( errno == ENOMEM );
rtems_test_assert( ctx.done );
- sc = rtems_termios_device_remove( &dev[0], major, minor );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ rv = unlink( &dev[0] );
+ rtems_test_assert( rv == 0 );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
}
@@ -715,55 +662,38 @@ static void test_set_attributes_error(void)
static const rtems_termios_device_handler handler = {
.set_attributes = set_attributes_error
};
- static const rtems_device_major_number major = 123456789;
- static const rtems_device_minor_number minor = 0xdeadbeef;
static const char dev[] = "/foobar";
rtems_resource_snapshot snapshot;
rtems_status_code sc;
- rtems_libio_t iop;
- rtems_libio_open_close_args_t oc_args;
- rtems_libio_ioctl_args_t io_args;
struct termios term;
device_context ctx = {
.base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "abc" ),
.done = false
};
+ int fd;
+ int rv;
rtems_resource_snapshot_take( &snapshot );
- sc = rtems_termios_device_install(
- &dev[0],
- major,
- minor,
- &handler,
- NULL,
- &ctx.base
- );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
-
- memset( &iop, 0, sizeof( iop ) );
- memset( &oc_args, 0, sizeof( oc_args ) );
- oc_args.iop = &iop;
-
- sc = rtems_termios_device_open( major, minor, &oc_args );
+ sc = rtems_termios_device_install( &dev[0], &handler, NULL, &ctx.base );
rtems_test_assert( sc == RTEMS_SUCCESSFUL );
- memset( &io_args, 0, sizeof( io_args ) );
- io_args.iop = &iop;
- io_args.command = RTEMS_IO_SET_ATTRIBUTES;
- io_args.buffer = &term;
+ fd = open( &dev[0], O_RDWR );
+ rtems_test_assert( fd >= 0 );
rtems_test_assert( !ctx.done );
- sc = rtems_termios_ioctl( &io_args );
- rtems_test_assert( sc == RTEMS_IO_ERROR );
+ errno = 0;
+ rv = ioctl( fd, RTEMS_IO_SET_ATTRIBUTES, &term );
+ rtems_test_assert( rv == -1 );
+ rtems_test_assert( errno == EIO );
rtems_test_assert( ctx.done );
- sc = rtems_termios_device_close( &oc_args );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ rv = close( fd );
+ rtems_test_assert( rv == 0 );
- sc = rtems_termios_device_remove( &dev[0], major, minor );
- rtems_test_assert( sc == RTEMS_SUCCESSFUL );
+ rv = unlink( &dev[0] );
+ rtems_test_assert( rv == 0 );
rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) );
}
@@ -982,7 +912,7 @@ static rtems_task Init(
/* configuration information */
#define CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS \
- { .initialization_entry = test_early_device_install_remove }
+ { .initialization_entry = test_early_device_install }
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER