1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-13 08:40:26 +01:00

tests/core/msg_queue_print: test for special cases

This commit is contained in:
Mikolai Gütschow 2024-11-27 16:01:38 +01:00
parent 850a827c24
commit e843514510
No known key found for this signature in database
GPG Key ID: 943E2F37AA659AD5
3 changed files with 74 additions and 21 deletions

View File

@ -1,3 +1,10 @@
include ../Makefile.core_common include ../Makefile.core_common
CONFIG_MSG_QUEUE_PRINT_MAX ?= 6
CFLAGS += -DCONFIG_MSG_QUEUE_PRINT_MAX=$(CONFIG_MSG_QUEUE_PRINT_MAX)
include $(RIOTBASE)/Makefile.include include $(RIOTBASE)/Makefile.include
# Make config available in Python test script via environment variables
export CONFIG_MSG_QUEUE_PRINT_MAX

View File

@ -1,5 +1,6 @@
/* /*
* Copyright (C) 2021 Freie Universität Berlin, * Copyright (C) 2021 Freie Universität Berlin
* Copyright (C) 2024 TU Dresden
* *
* This file is subject to the terms and conditions of the GNU Lesser * 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 * General Public License v2.1. See the file LICENSE in the top level
@ -15,6 +16,7 @@
* *
* *
* @author Julian Holzwarth <julian.holzwarth@fu-berlin.de> * @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
* @author Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
* *
*/ */
@ -29,19 +31,37 @@ msg_t msg_queue[QUEUE_SIZE];
int main(void) int main(void)
{ {
msg_t messages[QUEUE_SIZE]; msg_t msg;
msg_queue_print(); msg_queue_print();
msg_init_queue(msg_queue, QUEUE_SIZE); msg_init_queue(msg_queue, QUEUE_SIZE);
msg_queue_print(); msg_queue_print();
/* fill message queue */
for (uintptr_t i = 0; i < QUEUE_SIZE; i++) { for (uintptr_t i = 0; i < QUEUE_SIZE; i++) {
messages[i].type = i; msg.type = i;
messages[i].content.ptr = (void *) i; msg.content.ptr = (void *) i;
msg_send_to_self(&messages[i]); msg_send_to_self(&msg);
} }
msg_queue_print(); msg_queue_print();
/* drain half of message queue */
for (uintptr_t i = 0; i < QUEUE_SIZE/2; i++) {
msg_receive(&msg);
}
msg_queue_print();
/* fill up message queue again */
for (uintptr_t i = QUEUE_SIZE; i < QUEUE_SIZE + QUEUE_SIZE/2; i++) {
msg.type = i;
msg.content.ptr = (void *) i;
msg_send_to_self(&msg);
}
msg_queue_print();
puts("DONE"); puts("DONE");
return 0; return 0;
} }

View File

@ -1,34 +1,60 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Copyright (C) 2021 Freie Universität Berlin, # Copyright (C) 2021 Freie Universität Berlin
# Copyright (C) 2024 TU Dresden
# #
# This file is subject to the terms and conditions of the GNU Lesser # 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 # General Public License v2.1. See the file LICENSE in the top level
# directory for more details. # directory for more details.
# @author Julian Holzwarth <julian.holzwarth@fu-berlin.de> # @author Julian Holzwarth <julian.holzwarth@fu-berlin.de>
# @author Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
import os import os
import sys import sys
from testrunner import run from testrunner import run
PRINT_MAX = int(os.getenv('CONFIG_MSG_QUEUE_PRINT_MAX'))
def expect_none(child):
child.expect("No messages or no message queue")
def expect_some(child, size, avail, range_start):
child.expect(r"Message queue of thread \d+\r\n")
child.expect_exact(f'size: {size} (avail: {avail})')
expect_less = avail > PRINT_MAX
if expect_less:
range_end = range_start + PRINT_MAX
else:
range_end = range_start + avail
for counter in range(range_start, range_end):
expect_content(child, counter)
if expect_less:
child.expect('...')
def expect_content(child, counter):
if counter == 0:
if os.environ.get('BOARD') in ['native', 'native64']:
child.expect_exact('type: 0x0000, content: 0 ((nil))')
else:
child.expect(r'type: 0x0000, content: 0 \((0x)?0+\)')
else:
child.expect_exact(f'type: 0x{counter:04x}, content: {counter} (0x{counter:x})')
def testfunc(child): def testfunc(child):
child.expect("No messages or no message queue") expect_none(child)
child.expect("No messages or no message queue") expect_none(child)
child.expect(r"Message queue of thread \d+\r\n") expect_some(child, 8, 8, 0)
child.expect_exact('size: 8 (avail: 8)') expect_some(child, 8, 4, 4)
if os.environ.get('BOARD') in ['native', 'native64']: expect_some(child, 8, 8, 4)
child.expect_exact('type: 0x0000, content: 0 ((nil))')
else:
child.expect(r'type: 0x0000, content: 0 \((0x)?0+\)')
child.expect_exact('type: 0x0001, content: 1 (0x1)')
child.expect_exact('type: 0x0002, content: 2 (0x2)')
child.expect_exact('type: 0x0003, content: 3 (0x3)')
child.expect_exact('type: 0x0004, content: 4 (0x4)')
child.expect_exact('type: 0x0005, content: 5 (0x5)')
child.expect_exact('type: 0x0006, content: 6 (0x6)')
child.expect_exact('type: 0x0007, content: 7 (0x7)')
child.expect_exact('DONE') child.expect_exact('DONE')