Feature #2964
Updated by Junxiao Shi over 9 years ago
Develop `infoedit`, a programmatic INFO-format configuration file editor for use in [[IntegrationTests]].
**Background**
Many scenario requires editing the NFD configuration file.
There are two approaches:
* Embed a complete NFD configuration file in the scenario code.
* Benefit: The complete configuration file is visible.
* Drawback: It's not obvious what are the significant changes that differ from the default configuration.
* Drawback: When NFD configuration file introduces a backwards-incompatible change, scenarios designed in this way will be broken.
* Use an `awk` or `sed` script to modify the default configuration file.
* Benefit: It's easy to see what changes are needed.
* Drawback: To perform a complex modification, the script gets tricky and becomes unreadable.
* Drawback: Neither `awk` nor `sed` understands INFO format, so the script isn't robust to formatting changes.
**Feature**
This feature is to develop `infoedit`, a command line utility that programmatically edits a configuration file.
Command line options:
* `-f file`: specifies a file to edit
* `-s path`: specifies a property-tree path to modify
* `-v value`: used with `-s path`, sets the value at the path
* `-d path`: deletes all subtrees matching the path
* `-a path`: adds a subtree at the path; the subtree is read from stdin
* `-r path`: replaces a subtree at the path; equivalent to `-d path` followed by `-a path`
Every invocation performs one edit.
The file is modified in place.
To perform multiple edits, invoke the utility multiple times on the same file.
Sample command lines:
```
./infoedit -f nfd.conf -s general.user -v ndn.user
./infoedit -f nfd.conf -s tables.strategy_choice./site -v /localhost/nfd/strategy/broadcast
./infoedit -f nfd.conf -d tables.strategy_choice./
./infoedit -f nfd.conf -d authorizations
./infoedit -f nfd.conf -a rib.localhost_security <<<EOT
trust-anchor
{
type any
}
EOT
```
**Placement**
`infoedit` design is tailored to integration tests.
It should live in integration-tests repository, and compiled in a step of `install_apps.py`.