test_hashval.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from panda3d import core
  2. import random
  3. import pytest
  4. try:
  5. import hashlib
  6. except ImportError:
  7. hashlib = object()
  8. hashlib.algorithms_available = ()
  9. def test_hashval_hex():
  10. hex = '%032x' % random.getrandbits(32 * 4)
  11. val = core.HashVal()
  12. val.input_hex(core.StringStream(hex.encode('ascii')))
  13. assert str(val) == hex.lower()
  14. def test_hashval_md5_known():
  15. known_hashes = {
  16. 'd41d8cd98f00b204e9800998ecf8427e': b'',
  17. '93b885adfe0da089cdf634904fd59f71': b'\000',
  18. '3b5d3c7d207e37dceeedd301e35e2e58': b'\000' * 64,
  19. '202cb962ac59075b964b07152d234b70': b'123',
  20. '520620de89e220f9b5850cc97cbff46c': b'01234567' * 8,
  21. 'ad32d3ef227a5ebd800a40d4eeaff41f': b'01234567' * 8 + b'a',
  22. }
  23. for known, plain in known_hashes.items():
  24. hv = core.HashVal()
  25. hv.hash_bytes(plain)
  26. assert hv.as_hex() == known
  27. @pytest.mark.skipif('md5' not in hashlib.algorithms_available,
  28. reason="MD5 algorithm not available in hashlib")
  29. def test_hashval_md5_random():
  30. data = bytearray()
  31. for i in range(2500):
  32. control = hashlib.md5(data).hexdigest()
  33. # Test hash_bytes
  34. hv = core.HashVal()
  35. hv.hash_bytes(bytes(data))
  36. assert hv.as_hex() == control
  37. # Test hash_stream
  38. hv = core.HashVal()
  39. result = hv.hash_stream(core.StringStream(data))
  40. assert result
  41. assert hv.as_hex() == control
  42. data.append(random.randint(0, 255))