1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
# For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt
from __future__ import annotations
import unittest
from astroid import MANAGER
from astroid.const import PY39_PLUS
from astroid.nodes.scoped_nodes import ClassDef
class HashlibTest(unittest.TestCase):
def _assert_hashlib_class(self, class_obj: ClassDef) -> None:
self.assertIn("update", class_obj)
self.assertIn("digest", class_obj)
self.assertIn("hexdigest", class_obj)
self.assertIn("block_size", class_obj)
self.assertIn("digest_size", class_obj)
# usedforsecurity was added in Python 3.9, see 8e7174a9
self.assertEqual(len(class_obj["__init__"].args.args), 3 if PY39_PLUS else 2)
self.assertEqual(
len(class_obj["__init__"].args.defaults), 2 if PY39_PLUS else 1
)
self.assertEqual(len(class_obj["update"].args.args), 2)
def test_hashlib(self) -> None:
"""Tests that brain extensions for hashlib work."""
hashlib_module = MANAGER.ast_from_module_name("hashlib")
for class_name in (
"md5",
"sha1",
"sha224",
"sha256",
"sha384",
"sha512",
"sha3_224",
"sha3_256",
"sha3_384",
"sha3_512",
):
class_obj = hashlib_module[class_name]
self._assert_hashlib_class(class_obj)
self.assertEqual(len(class_obj["digest"].args.args), 1)
self.assertEqual(len(class_obj["hexdigest"].args.args), 1)
def test_shake(self) -> None:
"""Tests that the brain extensions for the hashlib shake algorithms work."""
hashlib_module = MANAGER.ast_from_module_name("hashlib")
for class_name in ("shake_128", "shake_256"):
class_obj = hashlib_module[class_name]
self._assert_hashlib_class(class_obj)
self.assertEqual(len(class_obj["digest"].args.args), 2)
self.assertEqual(len(class_obj["hexdigest"].args.args), 2)
def test_blake2(self) -> None:
"""Tests that the brain extensions for the hashlib blake2 hash functions work."""
hashlib_module = MANAGER.ast_from_module_name("hashlib")
for class_name in ("blake2b", "blake2s"):
class_obj = hashlib_module[class_name]
self.assertEqual(len(class_obj["__init__"].args.args), 2)
self.assertEqual(len(class_obj["digest"].args.args), 1)
self.assertEqual(len(class_obj["hexdigest"].args.args), 1)
|