README.md : Updates to document utilities and tests provided by main.cpp/main.cfg.
This commit is contained in:
parent
30721b0746
commit
20bc84c856
157
README.md
157
README.md
@ -1,4 +1,159 @@
|
||||
libcw Testing and Development App
|
||||
# libcw Testing and Development App
|
||||
|
||||
Command line:
|
||||
```
|
||||
cwtest <file.cfg> <label>
|
||||
```
|
||||
|
||||
Where `<file.cfg>` refers to a libcw configuration file file with the form:
|
||||
```
|
||||
{
|
||||
test: {
|
||||
|
||||
`program_0`: {
|
||||
a:1
|
||||
b:"hello"
|
||||
},
|
||||
|
||||
`program_1`: {
|
||||
arg0:["abc","def"]
|
||||
b:{ a:73, z:[19] }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`<label>` refers to a specific set of parameters which are associated with a library function.
|
||||
See `main.cpp` `mode_array[]` for the mapping of labels to functions.
|
||||
|
||||
The goal of `cwtest` is to be able to easily exercize `libcw` functions with a flexible
|
||||
sets of parameters. The configuration file provides the parameters.
|
||||
|
||||
|
||||
## MIDI
|
||||
|
||||
# midiDeviceReport
|
||||
|
||||
List The current set of MIID hardware devices and their ports.
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg midiDeviceReport
|
||||
```
|
||||
|
||||
# midiDevice
|
||||
|
||||
Interactive testing of the MIDI input file device start/pause/unpause/stop functions.
|
||||
Compares the time between MIDI events as generated by the device to the actual time between the
|
||||
events as listed in the file.
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg midiDevice
|
||||
```
|
||||
|
||||
## Serial
|
||||
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg midiDeviceReport
|
||||
```
|
||||
|
||||
See `serialPortSrvTest()` in `cwSerialPortSrv.cpp`.
|
||||
|
||||
This is an interactive test of the serial port send/receive functions.
|
||||
The test function continuously transmits ASCII values '0' through 'z' to external devices `/dev/ttyACM0` and '/dev/ttyACM1`.
|
||||
Those devices should increment the received value and send it back, where it is receieved and printed to the console.
|
||||
Firmware to run on ATMEGA328 based devices, like the Arduino Uno, is provided in `study/serial/arduino_xmt_recv/main.c`.
|
||||
|
||||
## wesockSrv
|
||||
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg websockSrv
|
||||
```
|
||||
|
||||
See `websockSrvTest()` in `cwWebSockSvr.cpp`.
|
||||
|
||||
Interactive websocket server testing application.
|
||||
Run the app and navigate in a web browser to `localhost:5687` to run the application.
|
||||
|
||||
## nbmpscQueue
|
||||
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg nbmpscQueue
|
||||
```
|
||||
|
||||
See `test()` in cwNbMpScQueue.cpp.
|
||||
|
||||
Run the non-blocking, multiple producer, single consumer queue for 'testDurMs' millisecdons
|
||||
and write the result into 'out_fname'. This is the queue used by the websocket implementation
|
||||
(See cwWebSock) to support incoming calls form multiple threads without blocking the calling threads.
|
||||
|
||||
## audioDevAlsa
|
||||
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg audioDevAlsa
|
||||
```
|
||||
|
||||
See `report()` in `cwAudioDeviceAlsa.cpp`.
|
||||
|
||||
Generate a list of devices and device attributes directly from the ALSA sub-system.
|
||||
|
||||
|
||||
## audioDevRpt
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/main.cfg audioDevRpt
|
||||
```
|
||||
|
||||
See `report()` in `cwAudioDevice.cpp`.
|
||||
|
||||
Generate a list of devices and device attributes from libcw. This will include audio file based devices.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Run Unit Tests:
|
||||
|
||||
These test are run by the libcw testing framework in cwTest.h/cpp.
|
||||
The configuraton for the unit tests is in `src/cwtest/src/cfg/test/main.cfg`.
|
||||
|
||||
1. Add a new test:
|
||||
- Create a function like this: rc_t my_test_func(const test_args_t& args);
|
||||
- Add the module name, function pair to the `_test_map[]` in cwTest.cpp.
|
||||
- Add an entry to the test parameters cfg. below.
|
||||
+ Name the test case (e.g. `test_0`) and give the test parameters.
|
||||
+ On the call to my_test_func() the args.module_args is set to the 'module_args' dictionary defined in the cfg.
|
||||
+ Likewise args.test_args is set to the 'test_args' dictionary referenced by the test name label 'e.g. test_0:{ my_arg:1 }'.
|
||||
|
||||
- Run the test like this: `cwtest test/main.cfg test /my_module test_0 echo` to see the results of the test run.
|
||||
The results of this run will be written into `/cur/my_test/test_0/log.txt`
|
||||
|
||||
- Once the results have been validated copy the output from 'cur' to the `/ref/my_test/test_0/log.txt.`
|
||||
|
||||
- Verify that the test passes: `cwtest test/main.cfg test /my_module test_0 compare`
|
||||
|
||||
|
||||
2. The test spec. is recursive. Modules can be listed inside of modules. (e.g. 'lex' and 'flow').
|
||||
|
||||
3. If a module spec. does not have an embedded
|
||||
'module' or 'module_args' then the cases may
|
||||
be listed without a 'cases' label.
|
||||
(e.g. 'filesys','object', 'vop')
|
||||
|
||||
4. Command line args:
|
||||
|
||||
Parameter | Description
|
||||
----------------|------------------------------------------------------------------
|
||||
<module_path> | 'all' (required) The module path always begins with a '/'.
|
||||
<test_label> | 'all' (required)
|
||||
'gen_report' | Print modulue/test label.
|
||||
'compare' | Run compare pass.
|
||||
'echo' | Print the generated test output to the console.
|
||||
'args' | All command line args after 'args' are passed to the tests.
|
||||
|
||||
5. Example command lines:
|
||||
```
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/test/main.cfg test /lex test_0 gen
|
||||
cwtest ~/src/cwtest/src/cwtest/cfg/test/main.cfg test /flow test_0 compare
|
||||
```
|
||||
|
||||
|
||||
|
||||
# GDB Setup:
|
||||
|
Loading…
Reference in New Issue
Block a user