Skip to content

Commit 3973a4e

Browse files
committed
Add test to verify correct key_alt_names in vault
1 parent e4b2926 commit 3973a4e

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

tests/encryption_/test_schema.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from bson.binary import Binary
12
from django.db import connections
23

34
from . import models
@@ -101,3 +102,36 @@ def test_get_encrypted_fields_all_models(self):
101102
for field in encrypted_fields["fields"]:
102103
field.pop("keyId", None) # Remove dynamic value
103104
self.assertEqual(encrypted_fields, expected)
105+
106+
def test_key_creation_and_lookup(self):
107+
"""
108+
Use _get_encrypted_fields(create_data_keys=True) to
109+
generate and store a data key in the vault, then
110+
query the vault with the keyAltName.
111+
"""
112+
connection = connections["encrypted"]
113+
client = connection.connection
114+
auto_encryption_opts = client._options.auto_encryption_opts
115+
116+
key_vault_db, key_vault_coll = auto_encryption_opts._key_vault_namespace.split(".", 1)
117+
vault_coll = client[key_vault_db][key_vault_coll]
118+
119+
model_class = models.EncryptedCharTest
120+
test_key_alt_name = f"{model_class._meta.db_table}.value"
121+
vault_coll.delete_many({"keyAltNames": test_key_alt_name})
122+
123+
# Call _get_encrypted_fields with create_data_keys=True
124+
with connection.schema_editor() as editor:
125+
encrypted_fields = editor._get_encrypted_fields(model_class, create_data_keys=True)
126+
127+
# Validate schema contains a keyId for our field
128+
self.assertTrue(encrypted_fields["fields"])
129+
field_info = encrypted_fields["fields"][0]
130+
self.assertEqual(field_info["path"], "value")
131+
self.assertIsInstance(field_info["keyId"], Binary)
132+
133+
# Lookup in key vault by the keyAltName created
134+
key_doc = vault_coll.find_one({"keyAltNames": test_key_alt_name})
135+
self.assertIsNotNone(key_doc, "Key should exist in vault")
136+
self.assertEqual(key_doc["_id"], field_info["keyId"])
137+
self.assertIn(test_key_alt_name, key_doc["keyAltNames"])

0 commit comments

Comments
 (0)