1
0

LogIdentifierTest.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Tests\Unit\Logging;
  4. use App\Logging\LogIdentifier;
  5. use PHPUnit\Framework\TestCase;
  6. final class LogIdentifierTest extends TestCase
  7. {
  8. public function testFingerprintIsStableAcrossCalls(): void
  9. {
  10. $a = LogIdentifier::fingerprint('admin');
  11. $b = LogIdentifier::fingerprint('admin');
  12. self::assertSame($a, $b);
  13. }
  14. public function testFingerprintDistinguishesDifferentInputs(): void
  15. {
  16. self::assertNotSame(
  17. LogIdentifier::fingerprint('admin'),
  18. LogIdentifier::fingerprint('Admin'),
  19. );
  20. self::assertNotSame(
  21. LogIdentifier::fingerprint('10.0.0.1'),
  22. LogIdentifier::fingerprint('10.0.0.2'),
  23. );
  24. }
  25. public function testFingerprintDoesNotContainRawValue(): void
  26. {
  27. $fp = LogIdentifier::fingerprint('hunter2-this-was-typed-as-username');
  28. self::assertStringNotContainsString('hunter2', $fp);
  29. }
  30. public function testFingerprintLengthIsBounded(): void
  31. {
  32. // 12 hex chars: short enough for log readability, long enough that
  33. // collisions are negligible across a deployment's logs.
  34. self::assertSame(12, strlen(LogIdentifier::fingerprint('admin')));
  35. self::assertSame(12, strlen(LogIdentifier::fingerprint(str_repeat('x', 4096))));
  36. }
  37. public function testEmptyInputReturnsSentinel(): void
  38. {
  39. self::assertSame('empty', LogIdentifier::fingerprint(''));
  40. }
  41. }