test_serialization.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import absolute_import
  2. from celery.exceptions import SecurityError
  3. from celery.security.serialization import SecureSerializer, register_auth
  4. from celery.security.certificate import Certificate, CertStore
  5. from celery.security.key import PrivateKey
  6. from kombu.serialization import registry
  7. from . import CERT1, CERT2, KEY1, KEY2
  8. from .case import SecurityCase
  9. class test_SecureSerializer(SecurityCase):
  10. def _get_s(self, key, cert, certs):
  11. store = CertStore()
  12. for c in certs:
  13. store.add_cert(Certificate(c))
  14. return SecureSerializer(PrivateKey(key), Certificate(cert), store)
  15. def test_serialize(self):
  16. s = self._get_s(KEY1, CERT1, [CERT1])
  17. self.assertEqual(s.deserialize(s.serialize('foo')), 'foo')
  18. def test_deserialize(self):
  19. s = self._get_s(KEY1, CERT1, [CERT1])
  20. self.assertRaises(SecurityError, s.deserialize, 'bad data')
  21. def test_unmatched_key_cert(self):
  22. s = self._get_s(KEY1, CERT2, [CERT1, CERT2])
  23. self.assertRaises(SecurityError,
  24. s.deserialize, s.serialize('foo'))
  25. def test_unknown_source(self):
  26. s1 = self._get_s(KEY1, CERT1, [CERT2])
  27. s2 = self._get_s(KEY1, CERT1, [])
  28. self.assertRaises(SecurityError,
  29. s1.deserialize, s1.serialize('foo'))
  30. self.assertRaises(SecurityError,
  31. s2.deserialize, s2.serialize('foo'))
  32. def test_self_send(self):
  33. s1 = self._get_s(KEY1, CERT1, [CERT1])
  34. s2 = self._get_s(KEY1, CERT1, [CERT1])
  35. self.assertEqual(s2.deserialize(s1.serialize('foo')), 'foo')
  36. def test_separate_ends(self):
  37. s1 = self._get_s(KEY1, CERT1, [CERT2])
  38. s2 = self._get_s(KEY2, CERT2, [CERT1])
  39. self.assertEqual(s2.deserialize(s1.serialize('foo')), 'foo')
  40. def test_register_auth(self):
  41. register_auth(KEY1, CERT1, '')
  42. self.assertIn('application/data', registry._decoders)