Skip to content

Commit 51ac968

Browse files
committed
Use ORM to manage encryption keys in tests
1 parent d22bb82 commit 51ac968

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

tests/encryption_/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,11 @@ class SmallIntegerModel(EncryptedTestModel):
165165

166166
class TimeModel(EncryptedTestModel):
167167
value = EncryptedTimeField(queries={"queryType": "range"})
168+
169+
170+
class EncryptionKey(models.Model):
171+
key_alt_name = models.CharField(max_length=500, db_column="keyAltNames")
172+
173+
class Meta:
174+
db_table = "__keyVault"
175+
managed = False

tests/encryption_/test_schema.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from django.db import connections
33

44
from . import models
5+
from .models import EncryptionKey
56
from .test_base import EncryptionTestCase
67

78

@@ -113,28 +114,20 @@ def test_key_creation_and_lookup(self):
113114
generate and store a data key in the vault, then
114115
query the vault with the keyAltName.
115116
"""
116-
connection = connections["encrypted"]
117-
client = connection.connection
118-
auto_encryption_opts = client._options.auto_encryption_opts
119-
120-
key_vault_db, key_vault_coll = auto_encryption_opts._key_vault_namespace.split(".", 1)
121-
vault_coll = client[key_vault_db][key_vault_coll]
122-
123117
model_class = models.CharModel
124118
test_key_alt_name = f"{model_class._meta.db_table}.value"
125-
vault_coll.delete_many({"keyAltNames": test_key_alt_name})
126-
127-
with connection.schema_editor() as editor:
119+
# Delete the test key and verify it's gone.
120+
EncryptionKey.objects.filter(key_alt_name=test_key_alt_name).delete()
121+
with self.assertRaises(EncryptionKey.DoesNotExist):
122+
EncryptionKey.objects.get(key_alt_name=test_key_alt_name)
123+
# Regenerate the keyId.
124+
with connections["encrypted"].schema_editor() as editor:
128125
encrypted_fields = editor._get_encrypted_fields(model_class)
129-
130-
# Validate schema contains a keyId for our field
131-
self.assertTrue(encrypted_fields["fields"])
126+
# Validate schema contains a keyId for the field.
132127
field_info = encrypted_fields["fields"][0]
133128
self.assertEqual(field_info["path"], "value")
134129
self.assertIsInstance(field_info["keyId"], Binary)
135-
136-
# Lookup in key vault by the keyAltName created
137-
key_doc = vault_coll.find_one({"keyAltNames": test_key_alt_name})
138-
self.assertIsNotNone(key_doc, "Key should exist in vault")
139-
self.assertEqual(key_doc["_id"], field_info["keyId"])
140-
self.assertIn(test_key_alt_name, key_doc["keyAltNames"])
130+
# Lookup in key vault by the keyAltName.
131+
key = EncryptionKey.objects.get(key_alt_name=test_key_alt_name)
132+
self.assertEqual(key.id, field_info["keyId"])
133+
self.assertEqual(key.key_alt_name, [test_key_alt_name])

0 commit comments

Comments
 (0)