mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-11-04 05:05:01 +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');
 | 
						|
    }
 | 
						|
 | 
						|
}
 |