mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-30 10:54:02 +01:00 
			
		
		
		
	The function tokens in the Expression handler didn't work after they were rewritten, as the rewrite was missing in certain files. This is fixed now refs #4246
		
			
				
	
	
		
			160 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Tests\Icinga\Protocol\Statusdat\Query;
 | |
| 
 | |
| require_once("../../library/Icinga/Protocol/Statusdat/Query/IQueryPart.php");
 | |
| require_once("../../library/Icinga/Protocol/Statusdat/Query/Expression.php");
 | |
| 
 | |
| use Icinga\Protocol\Statusdat\Query\Expression;
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * Test class for Expression
 | |
|  * Created Wed, 16 Jan 2013 15:15:16 +0000
 | |
|  *
 | |
|  **/
 | |
| class ExpressionTest extends \PHPUnit_Framework_TestCase
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * Test for Expression::FromString()
 | |
|      *
 | |
|      **/
 | |
|     public function testFromStringParsing()
 | |
|     {
 | |
|         $assertions = array(
 | |
|             "expression > ?" => "isGreater",
 | |
|             "expression >= ?" => "isGreaterEq",
 | |
|             "expression <=   ?" => "isLessEq",
 | |
|             "expression <  ?" => "isLess",
 | |
|             "expression =  ?" => "isEqual",
 | |
|             "expression !=  ?" => "isNotEqual",
 | |
|             "expression like ?" => "isLike",
 | |
|             "expression IN ? " => "isIn"
 | |
|         );
 | |
| 
 | |
|         foreach ($assertions as $query => $callback) {
 | |
|             $expression = new Expression();
 | |
|             $value = array(10);
 | |
|             $expression->fromString($query, $value);
 | |
|             $this->assertCount(0, $value);
 | |
|             $this->assertEquals("expression", $expression->getField());
 | |
|             $this->assertEquals($callback, $expression->CB);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function testNumericComparisons()
 | |
|     {
 | |
|         $assertions = array( // subarrays are (TEST,MATCHES)
 | |
|             "expression < ?" => array(5, array(1, 2, 3, 4)),
 | |
|             "expression <= ?" => array(5, array(1, 2, 3, 4, 5)),
 | |
|             "expression >=   ?" => array(5, array(5, 6, 7)),
 | |
|             "expression >  ?" => array(5, array(6, 7)),
 | |
|             "expression =  ?" => array(5, array(5)),
 | |
|             "expression !=  ?" => array(5, array(1, 2, 3, 4, 6, 7)),
 | |
|             "expression IN  ?" => array(array(1, 5, 7), array(1, 5, 7))
 | |
|         );
 | |
| 
 | |
|         foreach ($assertions as $query => $test) {
 | |
|             $expression = new Expression();
 | |
| 
 | |
|             $value = array($test[0]);
 | |
|             $testArray = array(
 | |
|                 (object)array("expression" => 1),
 | |
|                 (object)array("expression" => 2),
 | |
|                 (object)array("expression" => 3),
 | |
|                 (object)array("expression" => 4),
 | |
|                 (object)array("expression" => 5),
 | |
|                 (object)array("expression" => 6),
 | |
|                 (object)array("expression" => 7)
 | |
|             );
 | |
|             $expression->fromString($query, $value);
 | |
|             $this->assertCount(0, $value);
 | |
|             $result = $expression->filter($testArray);
 | |
|             foreach ($result as $index) {
 | |
|                 $this->assertContains($index + 1, $test[1]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function testNestedComparison()
 | |
|     {
 | |
| 
 | |
| 
 | |
|         $testArray = array(
 | |
|             (object)array(
 | |
|                 "expression" => "atest",
 | |
|                 "state" => (object)array("value" => 1)
 | |
|             ),
 | |
|             (object)array(
 | |
|                 "expression" => "testa",
 | |
|                 "state" => (object)array("value" => 2)
 | |
|             )
 | |
| 
 | |
|         );
 | |
|         $expression = new Expression();
 | |
|         $value = array(1);
 | |
|         $expression->fromString("state.value > ?", $value);
 | |
|         $this->assertCount(0, $value);
 | |
| 
 | |
|         $result = $expression->filter($testArray);
 | |
|         $this->assertEquals(1, count($result));
 | |
|         $this->assertEquals(2, $testArray[$result[1]]->state->value);
 | |
|     }
 | |
| 
 | |
|     public function testNestedComparisonInArray()
 | |
|     {
 | |
|         $testArray = array(
 | |
|             (object)array(
 | |
|                 "expression" => "atest",
 | |
|                 "state" => array((object) array("test"=>"1","test2"=>1))
 | |
|             ),
 | |
|             (object)array(
 | |
|                 "expression" => "testa",
 | |
|                 "state" => array((object) array("test"=>"2","test2"=>2))
 | |
|             )
 | |
| 
 | |
|         );
 | |
|         $expression = new Expression();
 | |
|         $value = array(1);
 | |
|         $expression->fromString("state.test > ?", $value);
 | |
|         $this->assertCount(0, $value);
 | |
| 
 | |
|         $result = $expression->filter($testArray);
 | |
|         $this->assertEquals(1, count($result));
 | |
| 
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public function testCountQuery()
 | |
|     {
 | |
|         $testArray = array(
 | |
|             (object)array(
 | |
|                 "expression" => "atest",
 | |
|                 "multiple" => array("test"=>"1","test2"=>1)
 | |
|             ),
 | |
|             (object)array(
 | |
|                 "expression" => "testa",
 | |
|                 "multiple" => array("test"=>"2","test2"=>2,"test5"=>2,"test1"=>2,"test3"=>2,"test4"=>2)
 | |
|             )
 | |
|         );
 | |
|         $expression = new Expression();
 | |
|         $value = array(2);
 | |
|         $expression->fromString("COUNT{multiple} > ?", $value);
 | |
|         $this->assertCount(0, $value);
 | |
| 
 | |
|         $result = $expression->filter($testArray);
 | |
|         $this->assertEquals(1, count($result));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Test for Expression::Filter()
 | |
|      *
 | |
|      **/
 | |
|     public function testFilter()
 | |
|     {
 | |
|         $this->markTestIncomplete('testFilter is not implemented yet');
 | |
|     }
 | |
| 
 | |
| }
 |