| # Parameter Framework (PF) test plan |
| |
| ## Notes |
| - The unit test code MAY be able to list implemented scenarios |
| in this same BDD format in order to check scenario coverage. |
| - All scenarios implicitly start by _"GIVEN a parameter framework"_. |
| - If a scenario does not specify a config files, |
| the following minimal files SHOULD be used: |
| |
| Top level file (replace `{structurePath}` by its value): |
| ~~~ xml |
| <?xml version='1.0' encoding='UTF-8'?> |
| <ParameterFrameworkConfiguration SystemClassName='test' |
| TuningAllowed='false' ServerPort='1'> |
| <SubsystemPlugins/> |
| <StructureDescriptionFileLocation Path='{structurePath}'/> |
| </ParameterFrameworkConfiguration> |
| ~~~ |
| |
| Structure file: |
| ~~~ xml |
| <?xml version='1.0' encoding='UTF-8'?> |
| <SystemClass Name='test'> |
| <Subsystem Name='test' Type='Virtual'> |
| <ComponentLibrary/> |
| <InstanceDefinition> |
| <BooleanParameter Name="placeholder"/> |
| </InstanceDefinition> |
| </Subsystem> |
| </SystemClass> |
| ~~~ |
| |
| ## Starting the Parameter Framework |
| |
| - set a logger |
| - [X] Scenario: Default logger |
| * WHEN no logger is set |
| * THEN start should succeed |
| |
| - [X] Scenario: No logger |
| * WHEN a nullptr logger is set |
| * THEN start should succeed |
| |
| - [X] Scenario: Logger should receive info and warnings |
| * GIVEN config files that emit warnings |
| * GIVEN a logger that store logs |
| * WHEN the record logger is set |
| * THEN start should succeed |
| * AND_THEN the logger should have stored info and warning log |
| |
| - [X] Scenario: Unset logger |
| * GIVEN config files that emit warnings |
| * GIVEN a logger that store logs |
| * WHEN the record logger is set |
| * AND_WHEN a nullptr logger is set |
| * THEN start should succeed |
| * AND_THEN the record logger should NOT have stored any info or warning log |
| |
| - set/get various properties before startup: |
| - "force no remote interface" |
| - [ ] Scenario: Tuning OK |
| * GIVEN config files with tuning enabled on a valid port |
| * WHEN the remote interface is NOT forbiden |
| * THEN start should succeed |
| |
| - [ ] Scenario: Invalid tunning |
| * GIVEN config files with tuning enabled on an invalid port (0?) |
| * WHEN the remote interface is NOT forbiden |
| * THEN start should fail |
| |
| - [ ] Scenario: Forbiden invalid tunning |
| * GIVEN config files with tuning enabled on an invalid port (0?) |
| * WHEN the remote interface is forbiden |
| * THEN start should succeed |
| |
| - "failure on missing subsystem" |
| - [ ] Scenario: Plugin OK |
| * GIVEN config files with a valid plugin |
| * WHEN the missing subsystem policy is set to failure |
| * THEN start should succeed |
| |
| - [X] Scenario: Wrong plugin |
| * GIVEN config files with a invalid plugin |
| * WHEN the missing subsystem policy is set to failure |
| * THEN start should fail |
| |
| - [ ] Scenario: Wrong plugin but fallback |
| * GIVEN config files with a invalid plugin |
| * WHEN the missing subsystem policy is set to success |
| * THEN start should succeed |
| |
| - "failure on failed settings load" |
| - [X] Scenario: Settings OK |
| * GIVEN config files with a valid settings file |
| * WHEN settings load failure is requested to abort start |
| * THEN start should succeed |
| |
| - [X] Scenario: Wrong settings |
| * GIVEN config files with a invalid (non existant?) settings file |
| * WHEN settings load failure is requested to abort start |
| * THEN start should fail |
| |
| - [X] Scenario: Wrong settings but ignore |
| * GIVEN config files with a invalid (non existant?) settings file |
| * WHEN settings load failure is requested to abort start |
| * THEN start should succeed |
| |
| - "schema folder location" and "validate schema on start" |
| - [ ] Scenario: Schema OK |
| * GIVEN config files with correct default schema location |
| * WHEN schema folder location is left to default |
| * WHEN schema validation is enabled |
| * THEN start should succeed |
| |
| - [ ] Scenario: Inexisting schemas |
| * GIVEN config files with correct default schema location |
| * WHEN schema folder location is set to an invalid location (/doesNotExist ?) |
| * WHEN schema validation is enabled |
| * THEN start should fail |
| |
| - [ ] Scenario: Inexisting ignored schemas |
| * GIVEN config files with correct default schema location |
| * WHEN schema folder location is set to an invalid location (/doesNotExist ?) |
| * WHEN schema validation is disabled |
| * THEN start should succeed |
| |
| - [ ] Scenario: Inexisting used schemas |
| * GIVEN config files with custom schema location (./shemaCustomFolderName) |
| * WHEN schema folder location is set to the custom shema location |
| * WHEN schema validation is enabled |
| * THEN start should succeed |
| |
| - [ ] Scenario: Schema OK, config KO |
| * GIVEN incorect config files with correct default schema location |
| * WHEN schema validation is enabled |
| * THEN start should fail |
| |
| ### Error cases/special cases |
| |
| - invalid configuration or a file can't be read: |
| - [X] Scenario: invalid top level config file |
| * GIVEN an incorect (empty ? wrong balisa ?) config top level file. |
| * THEN start should fail |
| |
| - [X] Scenario: invalid structure |
| * GIVEN an incorect (empty ? wrong balisa ?) structure file. |
| * THEN start should fail |
| |
| - [X] Scenario: invalid settings |
| * GIVEN an incorect (empty ? wrong balisa ?) settings file. |
| * THEN start should fail |
| |
| - plugins can't be found (unless silenced by the user) |
| - Done in "failure on missing subsystem" |
| |
| - usage of `<xi:include .../>` |
| - [ ] Scenario: Arbitrary xincluded node |
| * GIVEN a top level file xincluding a file with the "SettingsConfiguration" balisa |
| * THEN start should succeed |
| |
| - plugins: |
| - non-empty "Location" attribute |
| - [ ] Scenario: Plugin location OK |
| * GIVEN a top level file with a plugin folder location attribute |
| * THEN start should succeed |
| - empty "Location" attribute |
| - relative path |
| - [ ] Scenario: Empty Location, standard plugin install |
| * GIVEN config files with an empty location attribute |
| * GIVEN a plugin installed in a dlopen standard path |
| * GIVEN that "Location/Plugin[name]" is the plugin name |
| * THEN start should succeed |
| |
| - [ ] Scenario: Empty Location, non standard plugin install |
| * GIVEN config files with an empty location attribute |
| * GIVEN a plugin NOT installed in a dlopen standard path |
| * GIVEN that "Location/Plugin[name]" is the plugin name |
| * THEN start should fail |
| |
| - absolute path |
| - [ ] Scenario: Empty Location, plugin absolute path |
| * GIVEN config files with an empty location attribute |
| * GIVEN a plugin |
| * GIVEN that "Location/Plugin[name]" is the plugin absolute path |
| * THEN start should succeed |
| |
| - [ ] Scenario: Empty Location, plugin non existing path |
| * GIVEN config files with an empty location attribute |
| * GIVEN that "Location/Plugin[name]" is an non existing path (/libDoesNotExist.so?) |
| * THEN start should fail |
| |
| * * * |
| |
| ## Logging |
| |
| - info and warning |
| - Partly covered by the "set a logger" section |
| - [ ] Scenario: Plugin info and warning log |
| * GIVEN a plugin that log a unique string as info and warning |
| * GIVEN a logger that store logs |
| * WHEN the record logger is set |
| * THEN start should succeed |
| * AND_THEN the logger should have stored the plugin specific info and warning log |
| |
| * * * |
| |
| ## Basic Domains & Configurations management |
| |
| - [ ] Scenario: create and delete an empty domain |
| * GIVEN a started parameter framework without domains |
| * THEN creating a domain with an arbitrary name ("domain1"?) should succeed |
| * (AND_THEN the domain list should contain the domain name) |
| * THEN deleting the domain should succeed |
| |
| - [ ] Scenario: create and delete a configuration |
| * GIVEN a started parameter framework with a domain |
| * THEN creating a configuration in this domain with an arbitrary name ("config1") should succeed |
| * (AND_THEN the domain configuration list should contain the configuration name) |
| * THEN deleting the configuration should succeed |
| * (AND_THEN the domain configuration list should not contain the configuration name) |
| |
| - [ ] Scenario: delete a domain with configurations |
| * GIVEN a started parameter framework with a domain and several configuration (3?) |
| * THEN deleting the domain should succeed |
| * (AND_THEN the domain list should not contain the domain name) |
| |
| - [ ] Scenario: delete all domains |
| * GIVEN a started parameter framework with several domains |
| * THEN deleting all domains should succeed |
| * (AND_THEN the domain list should be empty) |
| |
| - [ ] Scenario: rename a domain |
| * GIVEN a started parameter framework with a domain and several configuration (3?) |
| * THEN renaming the domain to an arbitrary name should succeed |
| |
| |
| ### Error cases/special cases |
| |
| - [ ] Scenario: create a domain with an already-existing name |
| * GIVEN a started parameter framework with a domain (arbitrary name) |
| * THEN creating a second domain with the same name than the first should fail |
| |
| - [ ] Scenario: create a configuration with an already-existing name |
| * GIVEN a started parameter framework with a domain |
| containing one configuration (arbitrary name) |
| * THEN creating a second configuration in this domain |
| with the same name than the fist should fail |
| |
| - [ ] delete a non-existent domain |
| * GIVEN a started parameter framework without domain |
| * THEN deleting an arbitrary named domain should fail |
| |
| - [ ] delete a non-existent configuration |
| * GIVEN a started parameter framework one domain |
| * THEN deleting in this domain a arbitrary named configuration should fail |
| |
| - [ ] list configuration of a unknown domain |
| * GIVEN a started parameter framework without domain |
| * THEN listing configuration of an arbitrary named domain should fail |
| |
| - [ ] Scenario: rename a domain to an already used name |
| * GIVEN a started parameter framework with two domains |
| with arbitrary different names ("domain1" and "domain2") |
| * THEN renaming first domain ("domain1") to the name of the second one ("domain2") should fail |
| |
| - [ ] Scenario: rename a configuration to an already used name |
| * GIVEN a started parameter framework with one domain containing two configuration |
| with arbitrary different names ("config1" and "config2") |
| * THEN renaming first configuration ("config1") |
| to the name of the second one ("config2") should fail |
| |
| - [ ] Scenario: rename a domain to its own name |
| * GIVEN a started parameter framework one arbitrary named domain |
| * THEN renaming the domain to its own name should succeed |
| |
| - [ ] rename a configuration to its own name |
| * GIVEN a started parameter framework a domain and one configuration |
| * THEN renaming the configuration to its own name should succeed |
| |
| * * * |
| |
| ## Domain modification |
| |
| - set/get sequence awareness |
| - add/list/remove elements to a domain |
| - *(split domain ?)* |
| - *(listBelongingDomains ?)* |
| - *(listAssociatedDomains ?)* |
| - *(listAssociatedElements ?)* |
| - *(listConflictingElements ?)* |
| - *(listRogueElements ?)* |
| |
| ### Error cases/special cases |
| |
| - add (or remove) a non-existent element |
| - add (or remove) a parameter to (or from) a non-existent domain |
| |
| * * * |
| |
| ## Configurations modification |
| |
| - set a configuration rule; get it back |
| - trivial rules, complex rules (fuzzing ?) |
| - clear a rule |
| - save/restore a configuration |
| - set/get element sequence |
| - set/get a parameter for a given configuration |
| - set a parameter belonging to a domain and save a configuration |
| |
| ### Error cases |
| |
| - set a wrongly-formatted rule |
| - set a rule using an unknown criterion (or unknown criterion value) |
| - set/get a rule to a non-existent domain (or configuration) |
| |
| * * * |
| |
| ## Criteria |
| |
| - create a criterion |
| - exclusive |
| - inclusive |
| - *(list criteria)* |
| - set a criterion; get a criterion value |
| - exclusive criterion |
| - inclusive criterion |
| - special case: "none" value |
| |
| ### Error cases/special cases |
| |
| - duplicated criterion name (with the same type/with a different type) |
| - duplicated criterion value |
| - max supported number of criterion values |
| |
| * * * |
| |
| ## Settings Import/Export |
| |
| - import xml domains |
| - w/ or w/o settings |
| - from a file/from a string |
| - all/single |
| - export xml domains |
| - w/ or w/o settings |
| - to a file/from a string |
| - all/single |
| |
| ### Error case/special cases |
| |
| - invalid settings |
| - invalid xml (should we use a fuzzing framework ?) |
| - valid xml but not matching the XSD (ditto) |
| - valid but unusable data: |
| - unknown criterion/criterion values |
| - unknown parameters |
| - unreadable/unwritable file |
| - single domain import overwrite |
| - fail if overwrite not requested |
| - succeed if overwrite requested |
| |
| * * * |
| |
| ## Parameters |
| |
| - structures are correctly instantiated |
| - parameters in the "instance definition" |
| - component types instantiation |
| - parameter blocks |
| - bit blocks |
| - arrays |
| - check parameter mappings are correctly applied |
| - at all levels possible (subsystem, component type, component instance, |
| block, parameter...) |
| - context mappings, amends, instantiation mappings |
| - set/get a parameter |
| - parameter handles |
| - test on parameter values |
| - booleans |
| - bit blocks |
| - numeric types ranges |
| - fixed-point tests |
| - string length |
| |
| * * * |
| |
| ## Configuration application |
| |
| - apply configurations |
| - sequence aware domains |
| - forced sync |
| |
| * * * |
| |
| ## Misc/to be classified |
| |
| - tuning mode |
| - auto sync |
| - remote interface instantiation |
| - value space (raw/real)/format (dec/hex) |
| |
| ### Error cases |
| |