You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
8.2 KiB
PHP
219 lines
8.2 KiB
PHP
<?php
|
|
/**
|
|
* Zend Framework
|
|
*
|
|
* LICENSE
|
|
*
|
|
* This source file is subject to the new BSD license that is bundled
|
|
* with this package in the file LICENSE.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://framework.zend.com/license/new-bsd
|
|
* If you did not receive a copy of the license and are unable to
|
|
* obtain it through the world-wide-web, please send an email
|
|
* to license@zend.com so we can send you a copy immediately.
|
|
*
|
|
* @category Zend
|
|
* @package Zend_Ldap
|
|
* @subpackage UnitTests
|
|
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
* @version $Id: FilterTest.php 17681 2009-08-19 20:06:40Z alexander $
|
|
*/
|
|
|
|
/**
|
|
* Test helper
|
|
*/
|
|
require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
|
|
/**
|
|
* Zend_Ldap_Filter
|
|
*/
|
|
require_once 'Zend/Ldap/Filter.php';
|
|
/**
|
|
* Zend_Ldap_Filter_And
|
|
*/
|
|
require_once 'Zend/Ldap/Filter/And.php';
|
|
/**
|
|
* Zend_Ldap_Filter_Or
|
|
*/
|
|
require_once 'Zend/Ldap/Filter/Or.php';
|
|
|
|
/**
|
|
* @category Zend
|
|
* @package Zend_Ldap
|
|
* @subpackage UnitTests
|
|
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
* @group Zend_Ldap
|
|
*/
|
|
class Zend_Ldap_FilterTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
public function testFilterEscapeBasicOperation()
|
|
{
|
|
$input = 'a*b(b)d\e/f';
|
|
$expected = 'a\2ab\28b\29d\5ce/f';
|
|
$this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($input));
|
|
}
|
|
|
|
public function testEscapeValues()
|
|
{
|
|
$expected='t\28e,s\29t\2av\5cal\1eue';
|
|
$filterval='t(e,s)t*v\\al' . chr(30) . 'ue';
|
|
$this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($filterval));
|
|
$this->assertEquals($expected, Zend_Ldap_Filter::escapeValue(array($filterval)));
|
|
$this->assertEquals(array($expected, $expected, $expected),
|
|
Zend_Ldap_Filter::escapeValue(array($filterval, $filterval, $filterval)));
|
|
}
|
|
|
|
public function testUnescapeValues()
|
|
{
|
|
$expected='t(e,s)t*v\\al' . chr(30) . 'ue';
|
|
$filterval='t\28e,s\29t\2av\5cal\1eue';
|
|
$this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue($filterval));
|
|
$this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue(array($filterval)));
|
|
$this->assertEquals(array($expected, $expected, $expected),
|
|
Zend_Ldap_Filter::unescapeValue(array($filterval, $filterval, $filterval)));
|
|
}
|
|
|
|
public function testFilterValueUtf8()
|
|
{
|
|
$filter='ÄÖÜäöü߀';
|
|
$escaped=Zend_Ldap_Filter::escapeValue($filter);
|
|
$unescaped=Zend_Ldap_Filter::unescapeValue($escaped);
|
|
$this->assertEquals($filter, $unescaped);
|
|
}
|
|
|
|
public function testFilterCreation()
|
|
{
|
|
$f1=Zend_Ldap_Filter::equals('name', 'value');
|
|
$this->assertEquals('(name=value)', $f1->toString());
|
|
$f2=Zend_Ldap_Filter::begins('name', 'value');
|
|
$this->assertEquals('(name=value*)', $f2->toString());
|
|
$f3=Zend_Ldap_Filter::ends('name', 'value');
|
|
$this->assertEquals('(name=*value)', $f3->toString());
|
|
$f4=Zend_Ldap_Filter::contains('name', 'value');
|
|
$this->assertEquals('(name=*value*)', $f4->toString());
|
|
$f5=Zend_Ldap_Filter::greater('name', 'value');
|
|
$this->assertEquals('(name>value)', $f5->toString());
|
|
$f6=Zend_Ldap_Filter::greaterOrEqual('name', 'value');
|
|
$this->assertEquals('(name>=value)', $f6->toString());
|
|
$f7=Zend_Ldap_Filter::less('name', 'value');
|
|
$this->assertEquals('(name<value)', $f7->toString());
|
|
$f8=Zend_Ldap_Filter::lessOrEqual('name', 'value');
|
|
$this->assertEquals('(name<=value)', $f8->toString());
|
|
$f9=Zend_Ldap_Filter::approx('name', 'value');
|
|
$this->assertEquals('(name~=value)', $f9->toString());
|
|
$f10=Zend_Ldap_Filter::any('name');
|
|
$this->assertEquals('(name=*)', $f10->toString());
|
|
$f11=Zend_Ldap_Filter::string('name=*value*value*');
|
|
$this->assertEquals('(name=*value*value*)', $f11->toString());
|
|
$f12=Zend_Ldap_Filter::mask('(&(objectClass=account)(uid=%s))', 'a*b(b)d\e/f');
|
|
$this->assertEquals('(&(objectClass=account)(uid=a\2ab\28b\29d\5ce/f))', $f12->toString());
|
|
}
|
|
|
|
public function testToStringImplementation()
|
|
{
|
|
$f1=Zend_Ldap_Filter::ends('name', 'value');
|
|
$this->assertEquals($f1->toString(), (string)$f1);
|
|
}
|
|
|
|
public function testNegate()
|
|
{
|
|
$f1=Zend_Ldap_Filter::ends('name', 'value');
|
|
$this->assertEquals('(name=*value)', $f1->toString());
|
|
$f1=$f1->negate();
|
|
$this->assertEquals('(!(name=*value))', $f1->toString());
|
|
$f1=$f1->negate();
|
|
$this->assertEquals('(name=*value)', $f1->toString());
|
|
}
|
|
|
|
/**
|
|
* @expectedException Zend_Ldap_Filter_Exception
|
|
*/
|
|
public function testIllegalGroupingFilter()
|
|
{
|
|
$data=array('a', 'b', 5);
|
|
$f=new Zend_Ldap_Filter_And($data);
|
|
}
|
|
|
|
public function testGroupingFilter()
|
|
{
|
|
$f1=Zend_Ldap_Filter::equals('name', 'value');
|
|
$f2=Zend_Ldap_Filter::begins('name', 'value');
|
|
$f3=Zend_Ldap_Filter::ends('name', 'value');
|
|
|
|
$f4=Zend_Ldap_Filter::andFilter($f1, $f2, $f3);
|
|
$f5=Zend_Ldap_Filter::orFilter($f1, $f2, $f3);
|
|
|
|
$this->assertEquals('(&(name=value)(name=value*)(name=*value))', $f4->toString());
|
|
$this->assertEquals('(|(name=value)(name=value*)(name=*value))', $f5->toString());
|
|
|
|
$f4=$f4->addFilter($f1);
|
|
$this->assertEquals('(&(name=value)(name=value*)(name=*value)(name=value))', $f4->toString());
|
|
}
|
|
|
|
public function testComplexFilter()
|
|
{
|
|
$f1=Zend_Ldap_Filter::equals('name1', 'value1');
|
|
$f2=Zend_Ldap_Filter::equals('name1', 'value2');
|
|
|
|
$f3=Zend_Ldap_Filter::equals('name2', 'value1');
|
|
$f4=Zend_Ldap_Filter::equals('name2', 'value2');
|
|
|
|
$f5=Zend_Ldap_Filter::orFilter($f1, $f2);
|
|
$f6=Zend_Ldap_Filter::orFilter($f3, $f4);
|
|
|
|
$f7=Zend_Ldap_Filter::andFilter($f5, $f6);
|
|
|
|
$this->assertEquals('(&(|(name1=value1)(name1=value2))(|(name2=value1)(name2=value2)))',
|
|
$f7->toString());
|
|
}
|
|
|
|
public function testChaining()
|
|
{
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->addAnd(Zend_Ldap_Filter::approx('a2', 'v2'));
|
|
$this->assertEquals('(&(a1=v1)(a2~=v2))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
|
|
$this->assertEquals('(|(a1=v1)(a2~=v2))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->negate()
|
|
->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
|
|
$this->assertEquals('(|(!(a1=v1))(a2~=v2))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
|
|
$this->assertEquals('(&(a1=v1)(!(a2~=v2)))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->negate()
|
|
->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
|
|
$this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->negate()
|
|
->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
|
|
$this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
|
|
$f=Zend_Ldap_Filter::equals('a1', 'v1')
|
|
->negate()
|
|
->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate())
|
|
->negate();
|
|
$this->assertEquals('(!(&(!(a1=v1))(!(a2~=v2))))', $f->toString());
|
|
}
|
|
|
|
public function testRealFilterString()
|
|
{
|
|
$f1=Zend_Ldap_Filter::orFilter(
|
|
Zend_Ldap_Filter::equals('sn', 'Gehrig'),
|
|
Zend_Ldap_Filter::equals('sn', 'Goerke')
|
|
);
|
|
$f2=Zend_Ldap_Filter::orFilter(
|
|
Zend_Ldap_Filter::equals('givenName', 'Stefan'),
|
|
Zend_Ldap_Filter::equals('givenName', 'Ingo')
|
|
);
|
|
|
|
$f=Zend_Ldap_Filter::andFilter($f1, $f2);
|
|
|
|
$this->assertEquals('(&(|(sn=Gehrig)(sn=Goerke))(|(givenName=Stefan)(givenName=Ingo)))',
|
|
$f->toString());
|
|
}
|
|
}
|
|
|