getentropy: Add test.

Update #3239.
This commit is contained in:
Christian Mauderer
2017-11-13 09:21:30 +01:00
committed by Sebastian Huber
parent ca4895cb9c
commit 1358d4c824
6 changed files with 142 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ _SUBDIRS += newlib01
_SUBDIRS += putenvtest
_SUBDIRS += pwdgrp01
_SUBDIRS += pwdgrp02
_SUBDIRS += getentropy01
_SUBDIRS += rbheap01
_SUBDIRS += rtmonuse
_SUBDIRS += sha

View File

@@ -155,6 +155,7 @@ newlib01/Makefile
putenvtest/Makefile
pwdgrp01/Makefile
pwdgrp02/Makefile
getentropy01/Makefile
rbheap01/Makefile
rtmonuse/Makefile
sha/Makefile

View File

@@ -0,0 +1,19 @@
rtems_tests_PROGRAMS = getentropy01
getentropy01_SOURCES = init.c
dist_rtems_tests_DATA = getentropy01.scn getentropy01.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 = $(getentropy01_OBJECTS)
LINK_LIBS = $(getentropy01_LDLIBS)
getentropy01$(EXEEXT): $(getentropy01_OBJECTS) $(getentropy01_DEPENDENCIES)
@rm -f getentropy01$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am

View File

@@ -0,0 +1,17 @@
This file describes the directives and concepts tested by this test set.
test set name: random01
directives:
getentropy
concepts:
Ensure that getentropy() works with different sizes of arrays and delivers
different values on multiple calls. It is mainly a check that the function
does anything at all and does not write over the end of the buffer.
Note that this test doesn't check any quality of the random numbers. If you
need some reliable information about quality you should use something like the
Diehard tests.

View File

@@ -0,0 +1,2 @@
*** TEST GETENTROPY 1 ***
*** END OF TEST GETENTROPY 1 ***

View File

@@ -0,0 +1,102 @@
/*
* Copyright (c) 2017 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 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.org/license/LICENSE.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "tmacros.h"
#include <rtems.h>
#include <unistd.h>
#include <assert.h>
const char rtems_test_name[] = "GETENTROPY 1";
#define TEST_MAX_BYTES 32
#define TEST_GUARD_BYTES 32
#define TEST_GUARD 0xA5
static char entropy_buffer1 [TEST_MAX_BYTES + TEST_GUARD_BYTES];
static char entropy_buffer2 [TEST_MAX_BYTES + TEST_GUARD_BYTES];
static char guard_buffer [TEST_MAX_BYTES + TEST_GUARD_BYTES];
static void test_getentropy(size_t nr_bytes)
{
int rv;
size_t try = 1;
/*
* For very small patterns, the probability that two random patterns are the
* same is quite high. Therefore retry the test for these a few times.
*/
if (nr_bytes < 4) {
try = 4;
}
do {
--try;
/* Fill buffers with guard pattern */
memset(entropy_buffer1, TEST_GUARD, sizeof(entropy_buffer1));
memset(entropy_buffer2, TEST_GUARD, sizeof(entropy_buffer2));
memset(guard_buffer, TEST_GUARD, sizeof(entropy_buffer2));
/* Get entropy with the given size */
rv = getentropy(entropy_buffer1, nr_bytes);
assert(rv == 0);
rv = getentropy(entropy_buffer2, nr_bytes);
assert(rv == 0);
/* Check guard pattern */
rv = memcmp(entropy_buffer1 + nr_bytes, guard_buffer + nr_bytes,
sizeof(entropy_buffer1) - nr_bytes);
assert(rv == 0);
rv = memcmp(entropy_buffer2 + nr_bytes, guard_buffer + nr_bytes,
sizeof(entropy_buffer2) - nr_bytes);
assert(rv == 0);
/* Make sure that buffers are not the same */
rv = memcmp(entropy_buffer1, entropy_buffer2, sizeof(entropy_buffer1));
} while (try > 0 && rv == 0);
assert(rv != 0);
}
static void Init(rtems_task_argument arg)
{
size_t i;
TEST_BEGIN();
for (i = 1; i <= TEST_MAX_BYTES; ++i) {
test_getentropy(i);
}
TEST_END();
rtems_test_exit(0);
}
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT
#include <rtems/confdefs.h>