Add hypothesis-based service name type tests for the "vault" module
Marco Ricci

Marco Ricci commited on 2025-01-27 00:35:36
Zeige 1 geänderte Dateien mit 27 Einfügungen und 2 Löschungen.


Check that equivalent service name strings, byte strings and byte arrays
all derive the same passphrases.
... ...
@@ -59,18 +59,43 @@ class TestVault:
59 59
             == b'n+oIz6sL>K*lTEWYRO%7'
60 60
         )
61 61
 
62
-    def test_202_reproducibility_and_bytes_service_name(self) -> None:
62
+    def test_202a_reproducibility_and_bytes_service_name(self) -> None:
63 63
         """Deriving a passphrase works equally for byte strings."""
64 64
         assert Vault(phrase=self.phrase).generate(b'google') == Vault(
65 65
             phrase=self.phrase
66 66
         ).generate('google')
67 67
 
68
-    def test_203_reproducibility_and_bytearray_service_name(self) -> None:
68
+    def test_202b_reproducibility_and_bytearray_service_name(self) -> None:
69 69
         """Deriving a passphrase works equally for byte arrays."""
70 70
         assert Vault(phrase=self.phrase).generate(b'google') == Vault(
71 71
             phrase=self.phrase
72 72
         ).generate(bytearray(b'google'))
73 73
 
74
+    @hypothesis.given(
75
+        phrase=strategies.text(
76
+            strategies.characters(min_codepoint=32, max_codepoint=126),
77
+            min_size=1,
78
+            max_size=32,
79
+        ),
80
+        service=strategies.text(
81
+            strategies.characters(min_codepoint=32, max_codepoint=126),
82
+            min_size=1,
83
+            max_size=32,
84
+        ),
85
+    )
86
+    def test_202c_reproducibility_and_binary_service_name(
87
+        self,
88
+        phrase: str,
89
+        service: str,
90
+    ) -> None:
91
+        """Deriving a passphrase works equally for byte arrays/strings."""
92
+        assert Vault(phrase=phrase).generate(service) == Vault(
93
+            phrase=phrase
94
+        ).generate(service.encode('utf-8'))
95
+        assert Vault(phrase=phrase).generate(service) == Vault(
96
+            phrase=phrase
97
+        ).generate(bytearray(service.encode('utf-8')))
98
+
74 99
     def test_210_nonstandard_length(self) -> None:
75 100
         """Deriving a passphrase adheres to imposed length limits."""
76 101
         assert (
77 102