Test config merging with partial service configs too
Marco Ricci

Marco Ricci commited on 2024-12-12 11:59:47
Zeige 1 geänderte Dateien mit 44 Einfügungen und 3 Löschungen.


Using larger numbers of settings (and services) leads to a very low
probability of actually finding a viable path of action in the state
machine; the run is a no-op, save for the initial setup.  Presumably, we
need a larger pool of readily-assembled and/or more cross-compatible
objects, instead of the stepwise approach employed here with service
names, settings, and configurations.  This needs to be addressed in
a future commit, however.
... ...
@@ -2390,12 +2390,53 @@ class ConfigMergingStateMachine(stateful.RuleBasedStateMachine):
2390 2390
         target=settings,
2391 2391
         settings_list=strategies.lists(
2392 2392
             tests.vault_full_service_config(),
2393
-            min_size=10,
2394
-            max_size=10,
2393
+            min_size=5,
2394
+            max_size=5,
2395 2395
             unique_by=lambda obj: json.dumps(obj, sort_keys=True),
2396 2396
         ),
2397 2397
     )
2398
-    def init_random_settings(
2398
+    def init_random_full_settings(
2399
+        self, settings_list: list[_types.VaultConfigGlobalSettings]
2400
+    ) -> Iterable[_types.VaultConfigGlobalSettings]:
2401
+        return stateful.multiple(*settings_list)
2402
+
2403
+    @staticmethod
2404
+    def build_reduced_vault_config_settings(
2405
+        config: _types.VaultConfigGlobalSettings,
2406
+        keys_to_purge: frozenset[str],
2407
+    ) -> _types.VaultConfigGlobalSettings:
2408
+        config2 = copy.deepcopy(config)
2409
+        for key in keys_to_purge:
2410
+            config2.pop(key, None)  # type: ignore[misc]
2411
+        return config2
2412
+
2413
+    # See comment on `init_random_full_settings`.
2414
+    @stateful.initialize(
2415
+        target=settings,
2416
+        settings_list=strategies.lists(
2417
+            strategies.builds(
2418
+                build_reduced_vault_config_settings,
2419
+                tests.vault_full_service_config(),
2420
+                strategies.sets(
2421
+                    strategies.sampled_from([
2422
+                        'length',
2423
+                        'repeat',
2424
+                        'upper',
2425
+                        'lower',
2426
+                        'number',
2427
+                        'space',
2428
+                        'dash',
2429
+                        'symbol',
2430
+                    ]),
2431
+                    max_size=7,
2432
+                ),
2433
+            ),
2434
+            min_size=5,
2435
+            max_size=5,
2436
+            unique_by=lambda obj: json.dumps(obj, sort_keys=True),
2437
+        ).filter(bool),
2438
+    )
2439
+    def init_random_partial_settings(
2399 2440
         self, settings_list: list[_types.VaultConfigGlobalSettings]
2400 2441
     ) -> Iterable[_types.VaultConfigGlobalSettings]:
2401 2442
         return stateful.multiple(*settings_list)
2402 2443