forked from Imagelibrary/rtems
libtests/block16: New test
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
ACLOCAL_AMFLAGS = -I ../aclocal
|
||||
|
||||
SUBDIRS = POSIX
|
||||
SUBDIRS += block16
|
||||
SUBDIRS += block15
|
||||
SUBDIRS += block14
|
||||
SUBDIRS += block13
|
||||
|
||||
19
testsuites/libtests/block16/Makefile.am
Normal file
19
testsuites/libtests/block16/Makefile.am
Normal file
@@ -0,0 +1,19 @@
|
||||
rtems_tests_PROGRAMS = block16
|
||||
block16_SOURCES = init.c
|
||||
|
||||
dist_rtems_tests_DATA = block16.scn block16.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
|
||||
|
||||
LINK_OBJS = $(block16_OBJECTS)
|
||||
LINK_LIBS = $(block16_LDLIBS)
|
||||
|
||||
block16$(EXEEXT): $(block16_OBJECTS) $(block16_DEPENDENCIES)
|
||||
@rm -f block16$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
11
testsuites/libtests/block16/block16.doc
Normal file
11
testsuites/libtests/block16/block16.doc
Normal file
@@ -0,0 +1,11 @@
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: block16
|
||||
|
||||
directives:
|
||||
|
||||
TBD
|
||||
|
||||
concepts:
|
||||
|
||||
- Ensure that set block size will synchronize and purge the disk
|
||||
2
testsuites/libtests/block16/block16.scn
Normal file
2
testsuites/libtests/block16/block16.scn
Normal file
@@ -0,0 +1,2 @@
|
||||
*** TEST BLOCK 16 ***
|
||||
*** END OF TEST BLOCK 16 ***
|
||||
153
testsuites/libtests/block16/init.c
Normal file
153
testsuites/libtests/block16/init.c
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright (c) 2012 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Obere Lagerstr. 30
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <rtems@embedded-brains.de>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "tmacros.h"
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <rtems/ramdisk.h>
|
||||
#include <rtems/bdbuf.h>
|
||||
|
||||
#define ASSERT_SC(sc) rtems_test_assert((sc) == RTEMS_SUCCESSFUL)
|
||||
|
||||
static void test(void)
|
||||
{
|
||||
static const char device [] = "/dev/rda";
|
||||
rtems_status_code sc;
|
||||
int fd;
|
||||
int rv;
|
||||
rtems_disk_device *dd;
|
||||
ramdisk *rd;
|
||||
unsigned char buf [8];
|
||||
uint32_t media_block_size = sizeof(buf [0]);
|
||||
rtems_blkdev_bnum media_block_count = sizeof(buf) / sizeof(buf [0]);
|
||||
rtems_blkdev_bnum media_size = media_block_size * media_block_count;
|
||||
rtems_bdbuf_buffer *media_bd [media_block_count];
|
||||
rtems_bdbuf_buffer *large_bd;
|
||||
rtems_blkdev_bnum i;
|
||||
|
||||
sc = rtems_disk_io_initialize();
|
||||
ASSERT_SC(sc);
|
||||
|
||||
for (i = 0; i < media_block_count; ++i) {
|
||||
buf [i] = i;
|
||||
}
|
||||
|
||||
rd = ramdisk_allocate(buf, media_block_size, media_block_count, false);
|
||||
rtems_test_assert(rd != NULL);
|
||||
|
||||
sc = rtems_blkdev_create(
|
||||
device,
|
||||
media_block_size,
|
||||
media_block_count,
|
||||
ramdisk_ioctl,
|
||||
rd
|
||||
);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
fd = open(device, O_RDWR);
|
||||
rtems_test_assert(fd >= 0);
|
||||
|
||||
rv = rtems_disk_fd_get_disk_device(fd, &dd);
|
||||
rtems_test_assert(rv == 0);
|
||||
|
||||
for (i = 0; i < media_block_count; ++i) {
|
||||
sc = rtems_bdbuf_read(dd, i, &media_bd [i]);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
rtems_test_assert(media_bd [i]->buffer [0] == buf [i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < media_block_count; ++i) {
|
||||
media_bd [i]->buffer [0] += media_block_count;
|
||||
|
||||
sc = rtems_bdbuf_release_modified(media_bd [i]);
|
||||
ASSERT_SC(sc);
|
||||
}
|
||||
|
||||
for (i = 0; i < media_block_count; i += 2) {
|
||||
sc = rtems_bdbuf_read(dd, i, &media_bd [i]);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
rtems_test_assert(media_bd [i]->buffer [0] == buf [i] + media_block_count);
|
||||
}
|
||||
|
||||
sc = rtems_bdbuf_set_block_size(dd, media_size);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
for (i = 0; i < media_block_count; i += 2) {
|
||||
rtems_test_assert(media_bd [i]->state == RTEMS_BDBUF_STATE_ACCESS_PURGED);
|
||||
rtems_test_assert(media_bd [i + 1]->state == RTEMS_BDBUF_STATE_FREE);
|
||||
|
||||
rtems_test_assert(media_bd [i]->buffer [0] == buf [i] + media_block_count);
|
||||
rtems_test_assert(media_bd [i + 1]->buffer [0] == buf [i + 1]);
|
||||
|
||||
sc = rtems_bdbuf_release(media_bd [i]);
|
||||
ASSERT_SC(sc);
|
||||
}
|
||||
|
||||
sc = rtems_bdbuf_read(dd, 0, &large_bd);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
rtems_test_assert(memcmp(buf, large_bd->buffer, media_size) == 0);
|
||||
|
||||
sc = rtems_bdbuf_release(large_bd);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
rv = close(fd);
|
||||
rtems_test_assert(rv == 0);
|
||||
|
||||
rv = unlink(device);
|
||||
rtems_test_assert(rv == 0);
|
||||
}
|
||||
|
||||
static void Init(rtems_task_argument arg)
|
||||
{
|
||||
puts("\n\n*** TEST BLOCK 16 ***");
|
||||
|
||||
test();
|
||||
|
||||
puts("*** END OF TEST BLOCK 16 ***");
|
||||
|
||||
rtems_test_exit(0);
|
||||
}
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
|
||||
|
||||
#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE 1
|
||||
#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE 8
|
||||
#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE 8
|
||||
|
||||
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
|
||||
|
||||
#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>
|
||||
@@ -43,6 +43,7 @@ AM_CONDITIONAL(HAS_POSIX,test x"${rtems_cv_RTEMS_POSIX_API}" = x"yes")
|
||||
|
||||
# Explicitly list all Makefiles here
|
||||
AC_CONFIG_FILES([Makefile
|
||||
block16/Makefile
|
||||
mghttpd01/Makefile
|
||||
block15/Makefile
|
||||
block14/Makefile
|
||||
|
||||
Reference in New Issue
Block a user