8000 split hmac.copy() test by implementation · python/cpython@fee15c1 · GitHub
[go: up one dir, main page]

Skip to content

Commit fee15c1

Browse files
committed
split hmac.copy() test by implementation
1 parent b874961 commit fee15c1

File tree

1 file changed

+64
-13
lines changed

1 file changed

+64
-13
lines changed

Lib/test/test_hmac.py

Lines changed: 64 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -973,37 +973,42 @@ def HMAC(self, key, msg=None):
973973
return self.hmac.new(key, msg, digestmod='sha256')
974974

975975

976+
class CopyBaseTestCase:
977+
978+
def test_attributes(self):
979+
raise NotImplementedError
980+
981+
def test_realcopy(self):
982+
raise NotImplementedError
983+
984+
976985
@hashlib_helper.requires_hashdigest('sha256')
977-
class CopyTestCase(unittest.TestCase):
986+
class PythonCopyTestCase(CopyBaseTestCase, unittest.TestCase):
978987

979-
def test_attributes_old(self):
988+
def test_attributes(self):
980989
# Testing if attributes are of same type.
981990
h1 = hmac.HMAC.__new__(hmac.HMAC)
982991
h1._init_old(b"key", b"msg", digestmod="sha256")
992+
self.assertIsNone(h1._hmac)
993+
self.assertIsNotNone(h1._inner)
994+
self.assertIsNotNone(h1._outer)
995+
983996
h2 = h1.copy()
997+
self.assertIsNotNone(h2._inner)
998+
self.assertIsNotNone(h2._outer)
984999
self.assertEqual(type(h1._inner), type(h2._inner))
9851000
self.assertEqual(type(h1._outer), type(h2._outer))
9861001

987-
def test_realcopy_old(self):
1002+
def test_realcopy(self):
9881003
# Testing if the copy method created a real copy.
9891004
h1 = hmac.HMAC.__new__(hmac.HMAC)
9901005
h1._init_old(b"key", b"msg", digestmod="sha256")
991-
self.assertIsNone(h1._hmac)
992-
9931006
h2 = h1.copy()
994-
self.assertIsNone(h2._hmac)
9951007
# Using id() in case somebody has overridden __eq__/__ne__.
9961008
self.assertNotEqual(id(h1), id(h2))
9971009
self.assertNotEqual(id(h1._inner), id(h2._inner))
9981010
self.assertNotEqual(id(h1._outer), id(h2._outer))
9991011

1000-
@hashlib_helper.requires_hashlib()
1001-
def test_realcopy_hmac(self):
1002-
h1 = hmac.HMAC.__new__(hmac.HMAC)
1003-
h1._init_hmac(b"key", b"msg", digestmod="sha256")
1004-
h2 = h1.copy()
1005-
self.assertNotEqual(id(h1._hmac), id(h2._hmac))
1006-
10071012
def test_equality(self):
10081013
# Testing if the copy has the same digests.
10091014
h1 = hmac.HMAC(b"key", digestmod="sha256")
@@ -1017,11 +1022,57 @@ def test_equality_new(self):
10171022
h1 = hmac.new(b"key", digestmod="sha256")
10181023
h1.update(b"some random text")
10191024
h2 = h1.copy()
1025+
# Using id() in case somebody has overridden __eq__/__ne__.
10201026
self.assertNotEqual(id(h1), id(h2))
10211027
self.assertEqual(h1.digest(), h2.digest())
10221028
self.assertEqual(h1.hexdigest(), h2.hexdigest())
10231029

10241030

1031+
class ExtensionCopyTestCase(CopyBaseTestCase):
1032+
1033+
def init(self, h):
1034+
"""Call the dedicate init() method to test."""
1035+
raise NotImplementedError
1036+
1037+
def test_attributes(self):
1038+
# Testing if attributes are of same type.
1039+
h1 = hmac.HMAC.__new__(hmac.HMAC)
1040+
1041+
self.init(h1)
1042+
self.assertIsNotNone(h1._hmac)
1043+
self.assertNotHasAttr(h1, '_inner')
1044+
self.assertNotHasAttr(h1, '_outer')
1045+
1046+
h2 = h1.copy()
1047+
self.assertIsNotNone(h2._hmac)
1048+
self.assertNotHasAttr(h2, '_inner')
1049+
self.assertNotHasAttr(h2, '_outer')
1050+
1051+
def test_realcopy(self):
1052+
h1 = hmac.HMAC.__new__(hmac.HMAC)
1053+
self.init(h1)
1054+
h2 = h1.copy()
1055+
# Using id() in case somebody has overridden __eq__/__ne__.
1056+
self.assertNotEqual(id(h1._hmac), id(h2._hmac))
1057+
1058+
1059+
@hashlib_helper.requires_hashlib()
1060+
@hashlib_helper.requires_hashdigest('sha256', openssl=True)
1061+
class OpenSSLCopyTestCase(ExtensionCopyTestCase, unittest.TestCase):
1062+
1063+
def init(self, h):
1064+
h._init_openssl_hmac(b"key", b"msg", digestmod="sha256")
1065+
1066+
1067+
@hashlib_helper.requires_builtin_hmac()
1068+
class BuiltinCopyTestCase(ExtensionCopyTestCase, unittest.TestCase):
1069+
1070+
def init(self, h):
1071+
# Even if Python does not build '_sha2', the HACL* sources
1072+
# are still built, making it possible to use SHA-2 hashes.
1073+
h._init_builtin_hmac(b"key", b"msg", digestmod="sha256")
1074+
1075+
10251076
class CompareDigestMixin:
10261077

10271078
@staticmethod

0 commit comments

Comments
 (0)
0