message} at " . date('Y-m-d H:i:s'); echo "šŸŽÆ $result\n"; file_put_contents('/tmp/queue-job-executed.txt', $result . "\n", FILE_APPEND); return $result; } public function getType(): string { return 'test-job'; } public function getMessage(): string { return $this->message; } } echo "šŸ”§ Testing Queue with Named Job Class\n"; echo "====================================\n\n"; try { // Bootstrap framework $clock = new SystemClock(); $highResClock = new SystemHighResolutionClock(); $memoryMonitor = new MemoryMonitor(); $collector = new EnhancedPerformanceCollector($clock, $highResClock, $memoryMonitor, enabled: false); $bootstrapper = new AppBootstrapper(__DIR__ . '/../..', $collector, $memoryMonitor); $container = $bootstrapper->bootstrapWorker(); $queue = $container->get(Queue::class); echo "āœ… Framework bootstrapped successfully\n"; echo "āœ… Queue service retrieved\n\n"; // Clean previous test file if (file_exists('/tmp/queue-job-executed.txt')) { unlink('/tmp/queue-job-executed.txt'); } // Test 1: Push named job class echo "šŸ“‹ Test 1: Push Named Job Class\n"; echo "------------------------------\n"; $testJob = new TestJob('Hello from Queue!'); try { $jobPayload = JobPayload::immediate($testJob); echo "āœ… JobPayload created successfully\n"; $queue->push($jobPayload); echo "āœ… Job pushed to queue successfully\n"; $size = $queue->size(); echo "šŸ“Š Queue size after push: $size\n"; } catch (Exception $e) { echo "āŒ Failed to push job: " . $e->getMessage() . "\n"; echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; } echo "\n"; // Test 2: Pop and execute job echo "šŸ“‹ Test 2: Pop and Execute Job\n"; echo "-----------------------------\n"; try { $jobPayload = $queue->pop(); if ($jobPayload) { echo "āœ… Job popped from queue\n"; echo "šŸ“Š Job type: " . $jobPayload->job->getType() . "\n"; echo "šŸ“Š Job message: " . $jobPayload->job->getMessage() . "\n"; if (method_exists($jobPayload->job, 'handle')) { echo "āœ… Executing job...\n"; $result = $jobPayload->job->handle(); echo "āœ… Job executed successfully\n"; } else { echo "āŒ Job doesn't have handle method\n"; } } else { echo "āŒ No jobs in queue\n"; } $finalSize = $queue->size(); echo "šŸ“Š Queue size after pop: $finalSize\n"; } catch (Exception $e) { echo "āŒ Failed to pop/execute job: " . $e->getMessage() . "\n"; echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; } echo "\n"; // Test 3: Check execution log echo "šŸ“‹ Test 3: Verify Job Execution\n"; echo "------------------------------\n"; if (file_exists('/tmp/queue-job-executed.txt')) { echo "āœ… Job execution verified (log file created)\n"; $content = file_get_contents('/tmp/queue-job-executed.txt'); echo "šŸ“„ Job execution log:\n"; echo $content; } else { echo "āŒ No job execution log found\n"; } echo "\n"; // Test 4: Push multiple jobs echo "šŸ“‹ Test 4: Push Multiple Jobs\n"; echo "----------------------------\n"; for ($i = 1; $i <= 3; $i++) { $job = new TestJob("Message #$i"); $jobPayload = JobPayload::immediate($job); $queue->push($jobPayload); echo "āœ… Pushed job #$i\n"; } $multiSize = $queue->size(); echo "šŸ“Š Queue size with multiple jobs: $multiSize\n"; // Process all jobs echo "\nšŸ”„ Processing all jobs:\n"; while ($queue->size() > 0) { $jobPayload = $queue->pop(); if ($jobPayload) { $jobPayload->job->handle(); } } $emptySize = $queue->size(); echo "šŸ“Š Queue size after processing all: $emptySize\n"; } catch (Exception $e) { echo "āŒ Queue test with named class failed: " . $e->getMessage() . "\n"; echo "Stack trace:\n" . $e->getTraceAsString() . "\n"; exit(1); } echo "\nšŸŽÆ Queue with named job class test completed!\n";