zephyr/samples/nanokernel/test/test_fifo
Benjamin Walsh 2b429de7f3 test_fifo: test timeout APIs
Test the nano_xxx_fifo_wait_timeout() APIs.

First, the task waits with a timeout and times out. Then it wait with a
timeout, but gets the data in time.

Then, multiple timeout tests are done for the fibers, to test the ordering
of queueing/dequeueing when timeout occurs, first on one fifo, then on
multiple fifos.

Finally, multiple fibers pend on one fifo, and they all get the
data in time, except the last one: this tests that the timeout is
recomputed correctly when timeouts are aborted.

NOTE: The timeout APIs test is contained within its own file so that it
is easily reusable by a microkernel test that verifies that nano
timeouts and microkernel timers can coexist.

Change-Id: I5aae2d89651914fb6c39d8d09a56c7fa54533453
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
2016-02-05 20:14:22 -05:00
..
src test_fifo: test timeout APIs 2016-02-05 20:14:22 -05:00
Makefile Rename TIMO -> ZEPHYR 2016-02-05 20:14:16 -05:00
README.txt test_fifo: test timeout APIs 2016-02-05 20:14:22 -05:00
prj_arm.conf test_fifo: test timeout APIs 2016-02-05 20:14:22 -05:00
prj_x86.conf test_fifo: test timeout APIs 2016-02-05 20:14:22 -05:00

README.txt

Title: test_fifo

Description:

This test verifies that the nanokernel FIFO APIs operate as expected.

---------------------------------------------------------------------------

Building and Running Project:

This nanokernel project outputs to the console.  It can be built and executed
on QEMU as follows:

    make qemu

---------------------------------------------------------------------------

Troubleshooting:

Problems caused by out-dated project information can be addressed by
issuing one of the following commands then rebuilding the project:

    make clean          # discard results of previous builds
                        # but keep existing configuration info
or
    make pristine       # discard results of previous builds
                        # and restore pre-defined configuration info

---------------------------------------------------------------------------

Sample Output:

tc_start() - Test Nanokernel FIFO
Test Task FIFO Put

TASK FIFO Put Order:  001056dc, 00104ed4, 001046c0, 00103e80,
===================================================================
Test Fiber FIFO Get

FIBER FIFO Get: count = 0, ptr is 001056dc
FIBER FIFO Get: count = 1, ptr is 00104ed4
FIBER FIFO Get: count = 2, ptr is 001046c0
FIBER FIFO Get: count = 3, ptr is 00103e80
PASS - fiber1.
===================================================================
Test Fiber FIFO Put

FIBER FIFO Put Order:  00103e80, 001046c0, 00104ed4, 001056dc,
===================================================================
Test Task FIFO Get
TASK FIFO Get: count = 0, ptr is 00103e80
TASK FIFO Get: count = 1, ptr is 001046c0
TASK FIFO Get: count = 2, ptr is 00104ed4
TASK FIFO Get: count = 3, ptr is 001056dc
===================================================================
Test Task FIFO Get Wait Interfaces

TASK FIFO Put to queue2: 001056dc
Test Fiber FIFO Get Wait Interfaces

FIBER FIFO Get from queue2: 001056dc
FIBER FIFO Put to queue1: 00104ed4
TASK FIFO Get from queue1: 00104ed4
TASK FIFO Put to queue2: 001046c0
FIBER FIFO Get from queue2: 001046c0
FIBER FIFO Put to queue1: 00103e80
PASS - testFiberFifoGetW.
===================================================================
Test ISR FIFO (invoked from Fiber)

ISR FIFO Get from queue1: 00103e80

ISR FIFO (running in fiber context) Put Order:
 001056dc, 00104ed4, 001046c0, 00103e80,
PASS - testIsrFifoFromFiber.
PASS - fiber2.
PASS - testTaskFifoGetW.
===================================================================
Test ISR FIFO (invoked from Task)

Get from queue1: count = 0, ptr is 001056dc
Get from queue1: count = 1, ptr is 00104ed4
Get from queue1: count = 2, ptr is 001046c0
Get from queue1: count = 3, ptr is 00103e80

Test ISR FIFO (invoked from Task) - put 001056dc and get back 001056dc
PASS - testIsrFifoFromTask.
===================================================================
test nano_task_fifo_get_wait_timeout with timeout > 0
nano_task_fifo_get_wait_timeout timed out as expected
nano_task_fifo_get_wait_timeout got fifo in time, as expected
testing timeouts of 5 fibers on same fifo
 got fiber (q order: 2, t/o: 10, fifo 200049c0) as expected
 got fiber (q order: 3, t/o: 15, fifo 200049c0) as expected
 got fiber (q order: 0, t/o: 20, fifo 200049c0) as expected
 got fiber (q order: 4, t/o: 25, fifo 200049c0) as expected
 got fiber (q order: 1, t/o: 30, fifo 200049c0) as expected
testing timeouts of 9 fibers on different fifos
 got fiber (q order: 0, t/o: 10, fifo 200049cc) as expected
 got fiber (q order: 5, t/o: 15, fifo 200049c0) as expected
 got fiber (q order: 7, t/o: 20, fifo 200049c0) as expected
 got fiber (q order: 1, t/o: 25, fifo 200049c0) as expected
 got fiber (q order: 8, t/o: 30, fifo 200049cc) as expected
 got fiber (q order: 2, t/o: 35, fifo 200049c0) as expected
 got fiber (q order: 6, t/o: 40, fifo 200049c0) as expected
 got fiber (q order: 4, t/o: 45, fifo 200049cc) as expected
 got fiber (q order: 3, t/o: 50, fifo 200049cc) as expected
testing 5 fibers timing out, but obtaining the data in time
(except the last one, which times out)
 got fiber (q order: 0, t/o: 20, fifo 200049c0) as expected
 got fiber (q order: 1, t/o: 30, fifo 200049c0) as expected
 got fiber (q order: 2, t/o: 10, fifo 200049c0) as expected
 got fiber (q order: 3, t/o: 15, fifo 200049c0) as expected
 got fiber (q order: 4, t/o: 25, fifo 200049c0) as expected
===================================================================
PASS - test_timeout.
===================================================================
===================================================================
PASS - main.
===================================================================
PROJECT EXECUTION SUCCESSFUL