85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace NoccyLabs\Ipc\Signal;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SignalHandlerTest extends \PhpUnit\Framework\TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testSignalHandlerWithSingleHandlerInConstructor()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $callbacks = [
							 | 
						||
| 
								 | 
							
								            function () use (&$handler1) { $handler1 = true; }
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handler = new SignalHandler(SIGUSR1, $callbacks);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        posix_kill(posix_getpid(), SIGUSR1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        usleep(1000);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testSignalHandlerWithMultipleHandlersInConstructor()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $callbacks = [
							 | 
						||
| 
								 | 
							
								            function () use (&$handler1) { $handler1 = true; },
							 | 
						||
| 
								 | 
							
								            function () use (&$handler2) { $handler2 = true; },
							 | 
						||
| 
								 | 
							
								            function () use (&$handler3) { $handler3 = true; }
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handler = new SignalHandler(SIGUSR1, $callbacks);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        posix_kill(posix_getpid(), SIGUSR1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        usleep(1000);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler1);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler2);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler3);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testSignalHandlerWithAddedHandlers()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $callbacks = [
							 | 
						||
| 
								 | 
							
								            function () use (&$handler1) { $handler1 = true; },
							 | 
						||
| 
								 | 
							
								            function () use (&$handler2) { $handler2 = true; }
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handler = new SignalHandler(SIGUSR1, $callbacks);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handler->addHandler(function () use (&$handler3) { $handler3 = true; });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        posix_kill(posix_getpid(), SIGUSR1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        usleep(1000);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler1);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler2);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler3);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testSignalHandlerWithBlockingHandler()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $callbacks = [
							 | 
						||
| 
								 | 
							
								            function () use (&$handler1) { $handler1 = true; return true; },
							 | 
						||
| 
								 | 
							
								            function () use (&$handler2) { $handler2 = true; },
							 | 
						||
| 
								 | 
							
								            function () use (&$handler3) { $handler3 = true; }
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handler = new SignalHandler(SIGUSR1, $callbacks);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        posix_kill(posix_getpid(), SIGUSR1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        usleep(1000);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(true, $handler1);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(false, $handler2);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(false, $handler3);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								}
							 |