1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-17 18:12:46 +01:00

test_utils_interactive_sync: add a helper for synchronizing tests

Add an implementation that waits for 's' to print 'START' and return.
If 'r' is given is prints 'READY' to allow querying for state.

The help and answered string have to be different to not match the other.
Using puts/getchar was smaller than using `stdio_read/stdio_write` on the
example I tested with `esp32`.
This commit is contained in:
Gaëtan Harter 2019-03-23 14:20:18 +01:00
parent 3e753834e7
commit 027426793c
No known key found for this signature in database
GPG Key ID: 76DF6BCF1B1F883B
6 changed files with 73 additions and 0 deletions

View File

@ -25,6 +25,9 @@ endif
ifneq (,$(filter shell_commands,$(USEMODULE))) ifneq (,$(filter shell_commands,$(USEMODULE)))
DIRS += shell/commands DIRS += shell/commands
endif endif
ifneq (,$(filter test_utils_interactive_sync,$(USEMODULE)))
DIRS += test_utils/interactive_sync
endif
ifneq (,$(filter net_help,$(USEMODULE))) ifneq (,$(filter net_help,$(USEMODULE)))
DIRS += net/crosslayer/net_help DIRS += net/crosslayer/net_help
endif endif

View File

@ -9,3 +9,5 @@ endif
ifneq (,$(filter prng_fortuna,$(USEMODULE))) ifneq (,$(filter prng_fortuna,$(USEMODULE)))
CFLAGS += -DCRYPTO_AES CFLAGS += -DCRYPTO_AES
endif endif
include $(RIOTBASE)/sys/test_utils/Makefile.dep

View File

@ -0,0 +1,42 @@
/*
* Copyright (C) 2019 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup test_utils_interactive_sync Test interactive synchronization
* @ingroup sys
* @brief Utility function for synchronizing before a test
*
* @{
* @file
* @brief Synchronization for normally non interactive tests
*
* @author Gaëtan Harter <gaetan.harter@fu-berlin.de>
*/
#ifndef TEST_UTILS_INTERACTIVE_SYNC_H
#define TEST_UTILS_INTERACTIVE_SYNC_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Wait for the tester to start test
*
* @details Wait for a 's' character to return
*
*/
void test_utils_interactive_sync(void);
#ifdef __cplusplus
}
#endif
#endif /* TEST_UTILS_INTERACTIVE_SYNC_H */
/** @} */

View File

@ -0,0 +1,3 @@
ifneq (,$(filter test_utils_interactive_sync,$(USEMODULE)))
USEMODULE += stdin
endif

View File

@ -0,0 +1,3 @@
MODULE = test_utils_interactive_sync
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,20 @@
#include <stdio.h>
#include "test_utils/interactive_sync.h"
void test_utils_interactive_sync(void)
{
char c = '\0'; /* Print help on first loop */
do {
if (c == 'r') {
/* This one should have a different case than the help message
* otherwise we match it when using 'expect' */
puts("READY");
}
else if (c != '\n' && c != '\r') {
puts("Help: Press s to start test, r to print it is ready");
}
c = getchar();
} while (c != 's');
puts("START");
}