From 14c917ca94157afbf1abf0a2743abf7e5d9baf32 Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Fri, 11 Jul 2025 13:28:33 +1200 Subject: [PATCH] pytest: add key_credential_link_Dn tests Signed-off-by: Douglas Bagnall Reviewed-by: Gary Lockyer --- python/samba/tests/dsdb_dn.py | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/python/samba/tests/dsdb_dn.py b/python/samba/tests/dsdb_dn.py index 50965cef33a..4670775ff88 100644 --- a/python/samba/tests/dsdb_dn.py +++ b/python/samba/tests/dsdb_dn.py @@ -20,6 +20,7 @@ import os import samba from samba.samdb import BinaryDn, PlainDn, StringDn +from samba.key_credential_link import KeyCredentialLinkDn from samba.tests import TestCaseInTempDir @@ -66,6 +67,88 @@ class DsdbDnTests(TestCaseInTempDir): dn2.prefix = badstring self.assertIn(errmsg, str(cm.exception)) + def test_KeyCredentialLinkDn_valid(self): + """Simple KeyCredentialLinkDn objects.""" + sam = self._temp_ldb() + for name, dnstring, count in [ + ('empty', "B:8:00020000:DC=example,DC=com", 0), + ('key id', + "B:78:00020000" + "2000" "01" # length, key id + "000102030405060708090A0B0C0D0E0F" + "101112131415161718191A1B1C1D1E1F" + ":DC=example,DC=com", 1), + ('key hash', + "B:78:00020000" + "2000" "02" # length, key hash + "000102030405060708090A0B0C0D0E0F" + "101112131415161718191A1B1C1D1E1F" + ":DC=example,DC=com", 1), + ('key usage', + "B:16:00020000" + "0100" "04" # length, key_usage + "01" + ":DC=example,DC=com", 1), + ]: + print(f"{name}: {dnstring}") + k = KeyCredentialLinkDn(sam, dnstring) + self.assertEqual(k.blob.count, count) + b = BinaryDn(sam, dnstring) + self.assertEqual(k, b) + self.assertEqual(str(k), str(b)) + self.assertEqual(str(k).upper(), dnstring.upper()) + + def test_KeyCredentialLinkDn_invalid(self): + """KeyCredentialLinkDn objects that should fail.""" + sam = self._temp_ldb() + for name, dnstring, valid_binary in [ + ('bad version', "B:8:00030000:DC=example,DC=com", True), + ('length mismatch 1', + "B:78:00020000" + "2200" "01" # length, key_id + "000102030405060708090A0B0C0D0E0F" + "101112131415161718191A1B1C1D1E1F" + ":DC=example,DC=com", True), + ('length mismatch 2', + "B:80:00020000" + "2000" "01" # length, key_id + "000102030405060708090A0B0C0D0E0F" + "101112131415161718191A1B1C1D1E1F00" + ":DC=example,DC=com", True), + ('binary length mismatch', + "B:10:00020000" + ":DC=example,DC=com", False), + #('bad key usage', + # "B:16:00020000" + # "0100" "04" # length, key_usage + # "FF" + # ":DC=example,DC=com", True), + ('bad entry id 00', + "B:16:00020000" + "0100" "00" # length, invalid + "FF" + ":DC=example,DC=com", True), + ('bad entry id ff', + "B:16:00020000" + "0100" "FF" # length, invalid + "FF" + ":DC=example,DC=com", True), + ]: + print(name) + with self.assertRaises(ValueError) as cm: + k = KeyCredentialLinkDn(sam, dnstring) + + print(cm.exception) + try: + b = BinaryDn(sam, dnstring) + except ValueError: + if valid_binary: + self.fail(f"{name}: expected {dnstring} to be valid binary dn") + else: + if not valid_binary: + self.fail(f"{name}: expected {dnstring} to be invalid binary dn, " + f"got {b}") + def test_PlainDn(self): sam = self._temp_ldb("test_PlainDn.ldb") url = self.tempdir + "/test_PlainDn.ldb" -- 2.47.2