- Use DejaGnu to test the program with different configurations and inputs.
- Use Mull to perfrom mutation testing on the code.
- Use KLEE to perform symbolic execution on the code.
- Use gcov to generate coverage reports.
- [-] Use fuzzing to test the program with random inputs. It can be done with AFL or libFuzzer.
- SIGINT should enter the interactive console
- SIGINFO/SIGPWR should display status or statistics
- [-] SIGSTP/SIGUSR1 should enter "busy" mode - can be used for synchronization between different instances
It will be useful if configuration will define some sort of scriptlets that specify how frobd should react to different messages and conditions.
What shall be considered:
- Enabled protocols versions and attached devices parameters to respond to
Tx
andD4
. - [-] Timeouts and re-transmission policy, eg don't re-transmit non-idempotent
messages like
S1
. - Periodic ping using
T1
message. - Chat scenarios
- Configurable number of channels and instructions on where each message type should go. This can be achieved eg by embeding a scripting language like GNU Guile or Lua or something less common; or alternatively by executing external shell script.
- Use stderr for human readable error output and stdlog (fd 3) to error messages ment for logging systems
Write GUI that uses REPL from SIGINT. It should be able to connect to a remote live ECR or EFT.
Add line edit interface to the debug console using rlwrap program.
Forward all normally auto-responded messages to a special channel with a rule system attached on the other side, for more inteligent reponses.
Sample rule (tbd):
When terminal is busy, then always reject any Kx
message with 993 response code
otherwise don't respond to K0
message at all, always respond with 0 to K1
message, and reject any other Kx
message with response code 999.
% Matches response message according to recevied one and current environment
env_received_sent(E, [type-[k,_]|_], [type-[k,0],result-993]) :-
env_property_value(E, busy, true).
env_received_sent(E, R, S) :-
env_property_value(E, busy, false),
received_sent_(R, S).
received_sent_([type-[k,0]|_], []).
received_sent_([type-[k,1]|_], [type-[k,0],result-0]).
received_sent_([type-[k,X]|_], [type-[k,0],result-999]) :-
maplist(dif(X), [0,1]).
Problems to solve:
- How to represent dependencies on previous messages?
Possible topics to have a look at: