<?php 
 
namespace ZeusTest; 
 
use PHPUnit_Framework_TestCase; 
use Zend\EventManager\EventManager; 
use Zend\Log\Logger; 
use Zend\Log\Writer\Noop; 
use Zeus\ServerService\Manager; 
use Zeus\ServerService\ManagerEvent; 
use Zeus\ServerService\Shared\Logger\LoggerFactory; 
use Zeus\ServerService\Shared\Logger\LoggerInterface; 
use ZeusTest\Helpers\DummyServerService; 
use ZeusTest\Helpers\ServerServiceManagerPlugin; 
use ZeusTest\Helpers\ZeusFactories; 
 
class ServerServiceManagerPluginTest extends PHPUnit_Framework_TestCase 
{ 
    use ZeusFactories; 
 
    /** 
     * @param array $plugin 
     * @return Manager 
     */ 
    protected function getManagerWithPlugin(array $plugin) 
    { 
        $sm = $this->getServiceManager( 
            [ 
                'zeus_process_manager' => [ 
                    'manager' => [ 
                        'plugins' => $plugin, 
                    ], 
                ] 
            ] 
        ); 
 
        $logger = new Logger(); 
        $logger->addWriter(new Noop()); 
 
        $sm->setFactory(LoggerInterface::class, LoggerFactory::class); 
 
        /** @var Manager $manager */ 
        $manager = $sm->get(Manager::class); 
 
        return $manager; 
    } 
 
    public function setUp() 
    { 
        parent::setUp(); 
        $tmpDir = __DIR__ . '/tmp'; 
 
        if (!file_exists($tmpDir)) { 
            mkdir($tmpDir); 
        } 
        file_put_contents(__DIR__ . '/tmp/test.log', ''); 
    } 
 
    public function tearDown() 
    { 
        unlink(__DIR__ . '/tmp/test.log'); 
        rmdir(__DIR__ . '/tmp'); 
        parent::tearDown(); 
    } 
 
    public function testServiceStart() 
    { 
        $plugin = new ServerServiceManagerPlugin(); 
        $manager = $this->getManagerWithPlugin([$plugin]); 
        $service = new DummyServerService(['hang' => true], $this->getScheduler(), $manager->getLogger()); 
        $manager->registerService('test-service', $service, true); 
        $manager->startServices(['test-service']); 
 
        $this->assertContains(ManagerEvent::EVENT_MANAGER_INIT, $plugin->getTriggeredEvents()); 
        $this->assertContains(ManagerEvent::EVENT_MANAGER_LOOP, $plugin->getTriggeredEvents()); 
        $this->assertContains(ManagerEvent::EVENT_SERVICE_START, $plugin->getTriggeredEvents()); 
        $this->assertContains(ManagerEvent::EVENT_SERVICE_STOP, $plugin->getTriggeredEvents()); 
    } 
}
 
 |