SignedSerializerTest.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. use Laravel\SerializableClosure\Exceptions\InvalidSignatureException;
  3. use Laravel\SerializableClosure\SerializableClosure;
  4. test('secure closure integrity fail', function () {
  5. $closure = function () {
  6. /*x*/
  7. };
  8. SerializableClosure::setSecretKey('secret');
  9. $value = serialize(new SerializableClosure($closure));
  10. $value = str_replace('*x*', '*y*', $value);
  11. unserialize($value);
  12. })->throws(InvalidSignatureException::class);
  13. test('unsigned closure with signer', function () {
  14. SerializableClosure::setSecretKey(null);
  15. $closure = function () {
  16. /*x*/
  17. };
  18. $value = serialize(new SerializableClosure($closure));
  19. SerializableClosure::setSecretKey('secret');
  20. unserialize($value);
  21. })->throws(InvalidSignatureException::class);
  22. test('signed closure without signer', function () {
  23. SerializableClosure::setSecretKey('secret');
  24. $closure = function () {
  25. return true;
  26. };
  27. $value = serialize(new SerializableClosure($closure));
  28. SerializableClosure::setSecretKey(null);
  29. $closure = unserialize($value)->getClosure();
  30. expect($closure())->toBeTrue();
  31. });