Files
michaelschiemer/tests/Framework/LiveComponents/IntegrityValidatorTest.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

133 lines
4.2 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Framework\LiveComponents;
use App\Framework\Filesystem\InMemoryStorage;
use App\Framework\LiveComponents\Services\IntegrityValidator;
use App\Framework\LiveComponents\ValueObjects\ChunkHash;
beforeEach(function () {
$this->validator = new IntegrityValidator();
$this->fileStorage = new InMemoryStorage();
});
test('verifies chunk data with correct hash', function () {
$chunkData = str_repeat('A', 512);
$correctHash = ChunkHash::fromData($chunkData);
$result = $this->validator->verifyChunk($chunkData, $correctHash);
expect($result)->toBeTrue();
});
test('rejects chunk data with incorrect hash', function () {
$chunkData = str_repeat('A', 512);
$wrongHash = ChunkHash::fromData('different data');
$result = $this->validator->verifyChunk($chunkData, $wrongHash);
expect($result)->toBeFalse();
});
test('calculates correct chunk hash', function () {
$chunkData = str_repeat('B', 1024);
$calculatedHash = $this->validator->calculateChunkHash($chunkData);
$expectedHash = ChunkHash::fromData($chunkData);
expect($calculatedHash->toString())->toBe($expectedHash->toString());
});
test('verifies file with correct hash', function () {
$filePath = '/tmp/test-file.txt';
$content = 'Test file content for hash verification';
$this->fileStorage->put($filePath, $content);
$correctHash = ChunkHash::fromFile($filePath);
$result = $this->validator->verifyFile($filePath, $correctHash);
expect($result)->toBeTrue();
});
test('rejects file with incorrect hash', function () {
$filePath = '/tmp/test-file.txt';
$content = 'Test file content';
$this->fileStorage->put($filePath, $content);
$wrongHash = ChunkHash::fromData('different content');
$result = $this->validator->verifyFile($filePath, $wrongHash);
expect($result)->toBeFalse();
});
test('returns false for non-existent file', function () {
$nonExistentFile = '/tmp/does-not-exist.txt';
$someHash = ChunkHash::fromData('some data');
$result = $this->validator->verifyFile($nonExistentFile, $someHash);
expect($result)->toBeFalse();
});
test('calculates correct file hash', function () {
$filePath = '/tmp/test-file.txt';
$content = 'File content for hash calculation test';
$this->fileStorage->put($filePath, $content);
$calculatedHash = $this->validator->calculateFileHash($filePath);
$expectedHash = ChunkHash::fromFile($filePath);
expect($calculatedHash->toString())->toBe($expectedHash->toString());
});
test('verifies identical chunk hashes match', function () {
$data = 'consistent test data';
$hash1 = $this->validator->calculateChunkHash($data);
$hash2 = $this->validator->calculateChunkHash($data);
expect($this->validator->verifyChunk($data, $hash1))->toBeTrue();
expect($this->validator->verifyChunk($data, $hash2))->toBeTrue();
expect($hash1->toString())->toBe($hash2->toString());
});
test('detects modified chunk data', function () {
$originalData = 'original chunk data';
$originalHash = ChunkHash::fromData($originalData);
$modifiedData = 'modified chunk data';
$result = $this->validator->verifyChunk($modifiedData, $originalHash);
expect($result)->toBeFalse();
});
test('handles empty chunk data', function () {
$emptyData = '';
$hash = $this->validator->calculateChunkHash($emptyData);
expect($this->validator->verifyChunk($emptyData, $hash))->toBeTrue();
});
test('handles large chunk data', function () {
// 5MB chunk
$largeData = str_repeat('X', 5 * 1024 * 1024);
$hash = $this->validator->calculateChunkHash($largeData);
expect($this->validator->verifyChunk($largeData, $hash))->toBeTrue();
});
test('verifies file hash remains consistent', function () {
$filePath = '/tmp/consistent-file.txt';
$content = 'Consistent file content';
$this->fileStorage->put($filePath, $content);
$hash1 = $this->validator->calculateFileHash($filePath);
$hash2 = $this->validator->calculateFileHash($filePath);
expect($hash1->toString())->toBe($hash2->toString());
expect($this->validator->verifyFile($filePath, $hash1))->toBeTrue();
expect($this->validator->verifyFile($filePath, $hash2))->toBeTrue();
});