Test the export handler dispatcher as well as the handlers directly
Marco Ricci

Marco Ricci commited on 2025-01-11 19:04:57
Zeige 1 geänderte Dateien mit 49 Einfügungen und 9 Löschungen.


For each test calling an export handler directly, also perform the test
when calling the export handler dispatcher.
... ...
@@ -267,11 +267,19 @@ class TestStoreroom:
267 267
             ),
268 268
         ],
269 269
     )
270
+    @pytest.mark.parametrize(
271
+        'handler',
272
+        [
273
+            pytest.param(storeroom.export_storeroom_data, id='handler'),
274
+            pytest.param(exporter.export_vault_config_data, id='dispatcher'),
275
+        ],
276
+    )
270 277
     def test_200_export_data_path_and_keys_type(
271 278
         self,
272 279
         monkeypatch: pytest.MonkeyPatch,
273 280
         path: str | None,
274 281
         key: str | Buffer | None,
282
+        handler: exporter.ExportVaultConfigDataFunction,
275 283
     ) -> None:
276 284
         runner = click.testing.CliRunner(mix_stderr=False)
277 285
         with tests.isolated_vault_exporter_config(
... ...
@@ -281,7 +289,7 @@ class TestStoreroom:
281 289
             vault_key=tests.VAULT_MASTER_KEY,
282 290
         ):
283 291
             assert (
284
-                storeroom.export_storeroom_data(path, key)
292
+                handler(path, key, format='storeroom')
285 293
                 == tests.VAULT_STOREROOM_CONFIG_DATA
286 294
             )
287 295
 
... ...
@@ -327,11 +335,19 @@ class TestStoreroom:
327 335
             ('{"version": 1}\nAAAA', 'cannot handle version 0 encrypted keys'),
328 336
         ],
329 337
     )
338
+    @pytest.mark.parametrize(
339
+        'handler',
340
+        [
341
+            pytest.param(storeroom.export_storeroom_data, id='handler'),
342
+            pytest.param(exporter.export_vault_config_data, id='dispatcher'),
343
+        ],
344
+    )
330 345
     def test_402_export_storeroom_data_bad_master_keys_file(
331 346
         self,
332 347
         monkeypatch: pytest.MonkeyPatch,
333 348
         data: str,
334 349
         err_msg: str,
350
+        handler: exporter.ExportVaultConfigDataFunction,
335 351
     ) -> None:
336 352
         runner = click.testing.CliRunner(mix_stderr=False)
337 353
         with tests.isolated_vault_exporter_config(
... ...
@@ -343,7 +359,7 @@ class TestStoreroom:
343 359
             with open('.vault/.keys', 'w', encoding='UTF-8') as outfile:
344 360
                 print(data, file=outfile)
345 361
             with pytest.raises(RuntimeError, match=err_msg):
346
-                storeroom.export_storeroom_data()
362
+                handler(format='storeroom')
347 363
 
348 364
     @pytest.mark.parametrize(
349 365
         ['zipped_config', 'error_text'],
... ...
@@ -370,11 +386,19 @@ class TestStoreroom:
370 386
             ),
371 387
         ],
372 388
     )
389
+    @pytest.mark.parametrize(
390
+        'handler',
391
+        [
392
+            pytest.param(storeroom.export_storeroom_data, id='handler'),
393
+            pytest.param(exporter.export_vault_config_data, id='dispatcher'),
394
+        ],
395
+    )
373 396
     def test_403_export_storeroom_data_bad_directory_listing(
374 397
         self,
375 398
         monkeypatch: pytest.MonkeyPatch,
376 399
         zipped_config: bytes,
377 400
         error_text: str,
401
+        handler: exporter.ExportVaultConfigDataFunction,
378 402
     ) -> None:
379 403
         runner = click.testing.CliRunner(mix_stderr=False)
380 404
         # Use parenthesized context manager expressions once Python 3.9
... ...
@@ -389,7 +413,7 @@ class TestStoreroom:
389 413
                 )
390 414
             )
391 415
             stack.enter_context(pytest.raises(RuntimeError, match=error_text))
392
-            storeroom.export_storeroom_data()
416
+            handler(format='storeroom')
393 417
 
394 418
     def test_404_decrypt_keys_wrong_data_length(self) -> None:
395 419
         payload = (
... ...
@@ -506,12 +530,20 @@ class TestVaultNativeConfig:
506 530
             ),
507 531
         ],
508 532
     )
533
+    @pytest.mark.parametrize(
534
+        'handler',
535
+        [
536
+            pytest.param(vault_native.export_vault_native_data, id='handler'),
537
+            pytest.param(exporter.export_vault_config_data, id='dispatcher'),
538
+        ],
539
+    )
509 540
     def test_201_export_vault_native_data_no_arguments(
510 541
         self,
511 542
         monkeypatch: pytest.MonkeyPatch,
512 543
         config: str,
513 544
         format: Literal['v0.2', 'v0.3'],
514 545
         result: _types.VaultConfig | type[Exception],
546
+        handler: exporter.ExportVaultConfigDataFunction,
515 547
     ) -> None:
516 548
         runner = click.testing.CliRunner(mix_stderr=False)
517 549
         with tests.isolated_vault_exporter_config(
... ...
@@ -522,11 +554,9 @@ class TestVaultNativeConfig:
522 554
         ):
523 555
             if isinstance(result, type):
524 556
                 with pytest.raises(result):
525
-                    vault_native.export_vault_native_data(None, format=format)
557
+                    handler(None, format=format)
526 558
             else:
527
-                parsed_config = vault_native.export_vault_native_data(
528
-                    None, format=format
529
-                )
559
+                parsed_config = handler(None, format=format)
530 560
                 assert parsed_config == result
531 561
 
532 562
     @pytest.mark.parametrize('path', ['.vault', None])
... ...
@@ -546,11 +576,19 @@ class TestVaultNativeConfig:
546 576
             ),
547 577
         ],
548 578
     )
579
+    @pytest.mark.parametrize(
580
+        'handler',
581
+        [
582
+            pytest.param(vault_native.export_vault_native_data, id='handler'),
583
+            pytest.param(exporter.export_vault_config_data, id='dispatcher'),
584
+        ],
585
+    )
549 586
     def test_202_export_data_path_and_keys_type(
550 587
         self,
551 588
         monkeypatch: pytest.MonkeyPatch,
552 589
         path: str | None,
553 590
         key: str | Buffer | None,
591
+        handler: exporter.ExportVaultConfigDataFunction,
554 592
     ) -> None:
555 593
         runner = click.testing.CliRunner(mix_stderr=False)
556 594
         with tests.isolated_vault_exporter_config(
... ...
@@ -559,8 +597,10 @@ class TestVaultNativeConfig:
559 597
             vault_config=tests.VAULT_V03_CONFIG,
560 598
             vault_key=tests.VAULT_MASTER_KEY,
561 599
         ):
562
-            parsed_config = vault_native.export_vault_native_data(None)
563
-        assert parsed_config == tests.VAULT_V03_CONFIG_DATA
600
+            assert (
601
+                handler(path, key, format='v0.3')
602
+                == tests.VAULT_V03_CONFIG_DATA
603
+            )
564 604
 
565 605
     @pytest.mark.parametrize(
566 606
         ['parser_class', 'config', 'result'],
567 607