1 # Parameter Framework (PF) test plan 2 3 ## Notes 4 - The unit test code MAY be able to list implemented scenarios 5 in this same BDD format in order to check scenario coverage. 6 - All scenarios implicitly start by _"GIVEN a parameter framework"_. 7 - If a scenario does not specify a config files, 8 the following minimal files SHOULD be used: 9 10 Top level file (replace `{structurePath}` by its value): 11 ~~~ xml 12 <?xml version='1.0' encoding='UTF-8'?> 13 <ParameterFrameworkConfiguration SystemClassName='test' 14 TuningAllowed='false' ServerPort='1'> 15 <SubsystemPlugins/> 16 <StructureDescriptionFileLocation Path='{structurePath}'/> 17 </ParameterFrameworkConfiguration> 18 ~~~ 19 20 Structure file: 21 ~~~ xml 22 <?xml version='1.0' encoding='UTF-8'?> 23 <SystemClass Name='test'> 24 <Subsystem Name='test' Type='Virtual'> 25 <ComponentLibrary/> 26 <InstanceDefinition> 27 <BooleanParameter Name="placeholder"/> 28 </InstanceDefinition> 29 </Subsystem> 30 </SystemClass> 31 ~~~ 32 33 ## Starting the Parameter Framework 34 35 - set a logger 36 - [X] Scenario: Default logger 37 * WHEN no logger is set 38 * THEN start should succeed 39 40 - [X] Scenario: No logger 41 * WHEN a nullptr logger is set 42 * THEN start should succeed 43 44 - [X] Scenario: Logger should receive info and warnings 45 * GIVEN config files that emit warnings 46 * GIVEN a logger that store logs 47 * WHEN the record logger is set 48 * THEN start should succeed 49 * AND_THEN the logger should have stored info and warning log 50 51 - [X] Scenario: Unset logger 52 * GIVEN config files that emit warnings 53 * GIVEN a logger that store logs 54 * WHEN the record logger is set 55 * AND_WHEN a nullptr logger is set 56 * THEN start should succeed 57 * AND_THEN the record logger should NOT have stored any info or warning log 58 59 - set/get various properties before startup: 60 - "force no remote interface" 61 - [ ] Scenario: Tuning OK 62 * GIVEN config files with tuning enabled on a valid port 63 * WHEN the remote interface is NOT forbiden 64 * THEN start should succeed 65 66 - [ ] Scenario: Invalid tunning 67 * GIVEN config files with tuning enabled on an invalid port (0?) 68 * WHEN the remote interface is NOT forbiden 69 * THEN start should fail 70 71 - [ ] Scenario: Forbiden invalid tunning 72 * GIVEN config files with tuning enabled on an invalid port (0?) 73 * WHEN the remote interface is forbiden 74 * THEN start should succeed 75 76 - "failure on missing subsystem" 77 - [ ] Scenario: Plugin OK 78 * GIVEN config files with a valid plugin 79 * WHEN the missing subsystem policy is set to failure 80 * THEN start should succeed 81 82 - [X] Scenario: Wrong plugin 83 * GIVEN config files with a invalid plugin 84 * WHEN the missing subsystem policy is set to failure 85 * THEN start should fail 86 87 - [ ] Scenario: Wrong plugin but fallback 88 * GIVEN config files with a invalid plugin 89 * WHEN the missing subsystem policy is set to success 90 * THEN start should succeed 91 92 - "failure on failed settings load" 93 - [X] Scenario: Settings OK 94 * GIVEN config files with a valid settings file 95 * WHEN settings load failure is requested to abort start 96 * THEN start should succeed 97 98 - [X] Scenario: Wrong settings 99 * GIVEN config files with a invalid (non existant?) settings file 100 * WHEN settings load failure is requested to abort start 101 * THEN start should fail 102 103 - [X] Scenario: Wrong settings but ignore 104 * GIVEN config files with a invalid (non existant?) settings file 105 * WHEN settings load failure is requested to abort start 106 * THEN start should succeed 107 108 - "schema folder location" and "validate schema on start" 109 - [ ] Scenario: Schema OK 110 * GIVEN config files with correct default schema location 111 * WHEN schema folder location is left to default 112 * WHEN schema validation is enabled 113 * THEN start should succeed 114 115 - [ ] Scenario: Inexisting schemas 116 * GIVEN config files with correct default schema location 117 * WHEN schema folder location is set to an invalid location (/doesNotExist ?) 118 * WHEN schema validation is enabled 119 * THEN start should fail 120 121 - [ ] Scenario: Inexisting ignored schemas 122 * GIVEN config files with correct default schema location 123 * WHEN schema folder location is set to an invalid location (/doesNotExist ?) 124 * WHEN schema validation is disabled 125 * THEN start should succeed 126 127 - [ ] Scenario: Inexisting used schemas 128 * GIVEN config files with custom schema location (./shemaCustomFolderName) 129 * WHEN schema folder location is set to the custom shema location 130 * WHEN schema validation is enabled 131 * THEN start should succeed 132 133 - [ ] Scenario: Schema OK, config KO 134 * GIVEN incorect config files with correct default schema location 135 * WHEN schema validation is enabled 136 * THEN start should fail 137 138 ### Error cases/special cases 139 140 - invalid configuration or a file can't be read: 141 - [X] Scenario: invalid top level config file 142 * GIVEN an incorect (empty ? wrong balisa ?) config top level file. 143 * THEN start should fail 144 145 - [X] Scenario: invalid structure 146 * GIVEN an incorect (empty ? wrong balisa ?) structure file. 147 * THEN start should fail 148 149 - [X] Scenario: invalid settings 150 * GIVEN an incorect (empty ? wrong balisa ?) settings file. 151 * THEN start should fail 152 153 - plugins can't be found (unless silenced by the user) 154 - Done in "failure on missing subsystem" 155 156 - usage of `<xi:include .../>` 157 - [ ] Scenario: Arbitrary xincluded node 158 * GIVEN a top level file xincluding a file with the "SettingsConfiguration" balisa 159 * THEN start should succeed 160 161 - plugins: 162 - non-empty "Location" attribute 163 - [ ] Scenario: Plugin location OK 164 * GIVEN a top level file with a plugin folder location attribute 165 * THEN start should succeed 166 - empty "Location" attribute 167 - relative path 168 - [ ] Scenario: Empty Location, standard plugin install 169 * GIVEN config files with an empty location attribute 170 * GIVEN a plugin installed in a dlopen standard path 171 * GIVEN that "Location/Plugin[name]" is the plugin name 172 * THEN start should succeed 173 174 - [ ] Scenario: Empty Location, non standard plugin install 175 * GIVEN config files with an empty location attribute 176 * GIVEN a plugin NOT installed in a dlopen standard path 177 * GIVEN that "Location/Plugin[name]" is the plugin name 178 * THEN start should fail 179 180 - absolute path 181 - [ ] Scenario: Empty Location, plugin absolute path 182 * GIVEN config files with an empty location attribute 183 * GIVEN a plugin 184 * GIVEN that "Location/Plugin[name]" is the plugin absolute path 185 * THEN start should succeed 186 187 - [ ] Scenario: Empty Location, plugin non existing path 188 * GIVEN config files with an empty location attribute 189 * GIVEN that "Location/Plugin[name]" is an non existing path (/libDoesNotExist.so?) 190 * THEN start should fail 191 192 * * * 193 194 ## Logging 195 196 - info and warning 197 - Partly covered by the "set a logger" section 198 - [ ] Scenario: Plugin info and warning log 199 * GIVEN a plugin that log a unique string as info and warning 200 * GIVEN a logger that store logs 201 * WHEN the record logger is set 202 * THEN start should succeed 203 * AND_THEN the logger should have stored the plugin specific info and warning log 204 205 * * * 206 207 ## Basic Domains & Configurations management 208 209 - [ ] Scenario: create and delete an empty domain 210 * GIVEN a started parameter framework without domains 211 * THEN creating a domain with an arbitrary name ("domain1"?) should succeed 212 * (AND_THEN the domain list should contain the domain name) 213 * THEN deleting the domain should succeed 214 215 - [ ] Scenario: create and delete a configuration 216 * GIVEN a started parameter framework with a domain 217 * THEN creating a configuration in this domain with an arbitrary name ("config1") should succeed 218 * (AND_THEN the domain configuration list should contain the configuration name) 219 * THEN deleting the configuration should succeed 220 * (AND_THEN the domain configuration list should not contain the configuration name) 221 222 - [ ] Scenario: delete a domain with configurations 223 * GIVEN a started parameter framework with a domain and several configuration (3?) 224 * THEN deleting the domain should succeed 225 * (AND_THEN the domain list should not contain the domain name) 226 227 - [ ] Scenario: delete all domains 228 * GIVEN a started parameter framework with several domains 229 * THEN deleting all domains should succeed 230 * (AND_THEN the domain list should be empty) 231 232 - [ ] Scenario: rename a domain 233 * GIVEN a started parameter framework with a domain and several configuration (3?) 234 * THEN renaming the domain to an arbitrary name should succeed 235 236 237 ### Error cases/special cases 238 239 - [ ] Scenario: create a domain with an already-existing name 240 * GIVEN a started parameter framework with a domain (arbitrary name) 241 * THEN creating a second domain with the same name than the first should fail 242 243 - [ ] Scenario: create a configuration with an already-existing name 244 * GIVEN a started parameter framework with a domain 245 containing one configuration (arbitrary name) 246 * THEN creating a second configuration in this domain 247 with the same name than the fist should fail 248 249 - [ ] delete a non-existent domain 250 * GIVEN a started parameter framework without domain 251 * THEN deleting an arbitrary named domain should fail 252 253 - [ ] delete a non-existent configuration 254 * GIVEN a started parameter framework one domain 255 * THEN deleting in this domain a arbitrary named configuration should fail 256 257 - [ ] list configuration of a unknown domain 258 * GIVEN a started parameter framework without domain 259 * THEN listing configuration of an arbitrary named domain should fail 260 261 - [ ] Scenario: rename a domain to an already used name 262 * GIVEN a started parameter framework with two domains 263 with arbitrary different names ("domain1" and "domain2") 264 * THEN renaming first domain ("domain1") to the name of the second one ("domain2") should fail 265 266 - [ ] Scenario: rename a configuration to an already used name 267 * GIVEN a started parameter framework with one domain containing two configuration 268 with arbitrary different names ("config1" and "config2") 269 * THEN renaming first configuration ("config1") 270 to the name of the second one ("config2") should fail 271 272 - [ ] Scenario: rename a domain to its own name 273 * GIVEN a started parameter framework one arbitrary named domain 274 * THEN renaming the domain to its own name should succeed 275 276 - [ ] rename a configuration to its own name 277 * GIVEN a started parameter framework a domain and one configuration 278 * THEN renaming the configuration to its own name should succeed 279 280 * * * 281 282 ## Domain modification 283 284 - set/get sequence awareness 285 - add/list/remove elements to a domain 286 - *(split domain ?)* 287 - *(listBelongingDomains ?)* 288 - *(listAssociatedDomains ?)* 289 - *(listAssociatedElements ?)* 290 - *(listConflictingElements ?)* 291 - *(listRogueElements ?)* 292 293 ### Error cases/special cases 294 295 - add (or remove) a non-existent element 296 - add (or remove) a parameter to (or from) a non-existent domain 297 298 * * * 299 300 ## Configurations modification 301 302 - set a configuration rule; get it back 303 - trivial rules, complex rules (fuzzing ?) 304 - clear a rule 305 - save/restore a configuration 306 - set/get element sequence 307 - set/get a parameter for a given configuration 308 - set a parameter belonging to a domain and save a configuration 309 310 ### Error cases 311 312 - set a wrongly-formatted rule 313 - set a rule using an unknown criterion (or unknown criterion value) 314 - set/get a rule to a non-existent domain (or configuration) 315 316 * * * 317 318 ## Criteria 319 320 - create a criterion 321 - exclusive 322 - inclusive 323 - *(list criteria)* 324 - set a criterion; get a criterion value 325 - exclusive criterion 326 - inclusive criterion 327 - special case: "none" value 328 329 ### Error cases/special cases 330 331 - duplicated criterion name (with the same type/with a different type) 332 - duplicated criterion value 333 - max supported number of criterion values 334 335 * * * 336 337 ## Settings Import/Export 338 339 - import xml domains 340 - w/ or w/o settings 341 - from a file/from a string 342 - all/single 343 - export xml domains 344 - w/ or w/o settings 345 - to a file/from a string 346 - all/single 347 348 ### Error case/special cases 349 350 - invalid settings 351 - invalid xml (should we use a fuzzing framework ?) 352 - valid xml but not matching the XSD (ditto) 353 - valid but unusable data: 354 - unknown criterion/criterion values 355 - unknown parameters 356 - unreadable/unwritable file 357 - single domain import overwrite 358 - fail if overwrite not requested 359 - succeed if overwrite requested 360 361 * * * 362 363 ## Parameters 364 365 - structures are correctly instantiated 366 - parameters in the "instance definition" 367 - component types instantiation 368 - parameter blocks 369 - bit blocks 370 - arrays 371 - check parameter mappings are correctly applied 372 - at all levels possible (subsystem, component type, component instance, 373 block, parameter...) 374 - context mappings, amends, instantiation mappings 375 - set/get a parameter 376 - parameter handles 377 - test on parameter values 378 - booleans 379 - bit blocks 380 - numeric types ranges 381 - fixed-point tests 382 - string length 383 384 * * * 385 386 ## Configuration application 387 388 - apply configurations 389 - sequence aware domains 390 - forced sync 391 392 * * * 393 394 ## Misc/to be classified 395 396 - tuning mode 397 - auto sync 398 - remote interface instantiation 399 - value space (raw/real)/format (dec/hex) 400 401 ### Error cases 402 403