41 lines
1.3 KiB
PHP
41 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Plugin\AzuraCastOnDemandHls\Tests\Security;
|
|
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Plugin\AzuraCastOnDemandHls\Security\OpaqueToken;
|
|
|
|
#[CoversClass(OpaqueToken::class)]
|
|
final class OpaqueTokenTest extends TestCase
|
|
{
|
|
public function testGeneratedTokensAreOpaqueValidAndUnique(): void
|
|
{
|
|
$tokens = [];
|
|
for ($i = 0; $i < 100; ++$i) {
|
|
$token = OpaqueToken::generate();
|
|
self::assertTrue(OpaqueToken::isValid($token));
|
|
self::assertSame(43, strlen($token));
|
|
$tokens[] = $token;
|
|
}
|
|
self::assertCount(100, array_unique($tokens));
|
|
}
|
|
|
|
public function testMalformedTokensAreRejected(): void
|
|
{
|
|
foreach (['', 'short', str_repeat('a', 42), str_repeat('a', 44), str_repeat('.', 43), '../' . str_repeat('a', 40), str_repeat('a', 42) . '='] as $token) {
|
|
self::assertFalse(OpaqueToken::isValid($token), $token);
|
|
}
|
|
}
|
|
|
|
public function testMutationChangesStoredIdentifier(): void
|
|
{
|
|
$token = OpaqueToken::generate();
|
|
$replacement = 'A' === $token[0] ? 'B' : 'A';
|
|
$mutated = $replacement . substr($token, 1);
|
|
self::assertNotSame(OpaqueToken::id($token), OpaqueToken::id($mutated));
|
|
}
|
|
}
|