238 lines
6.3 KiB
PHP
238 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace Kanboard\Core\Ldap;
|
|
|
|
require_once __DIR__.'/../../Base.php';
|
|
|
|
function ldap_connect($hostname, $port)
|
|
{
|
|
return ClientTest::$functions->ldap_connect($hostname, $port);
|
|
}
|
|
|
|
function ldap_set_option()
|
|
{
|
|
}
|
|
|
|
function ldap_get_option($link_identifier, $option, &$error)
|
|
{
|
|
$error = 'some extended error';
|
|
}
|
|
|
|
function ldap_error($link_identifier)
|
|
{
|
|
return 'some error';
|
|
}
|
|
|
|
function ldap_errno($link_identifier)
|
|
{
|
|
return -100;
|
|
}
|
|
|
|
function ldap_bind($link_identifier, $bind_rdn = null, $bind_password = null)
|
|
{
|
|
return ClientTest::$functions->ldap_bind($link_identifier, $bind_rdn, $bind_password);
|
|
}
|
|
|
|
function ldap_start_tls($link_identifier)
|
|
{
|
|
return ClientTest::$functions->ldap_start_tls($link_identifier);
|
|
}
|
|
|
|
class ClientTest extends \Base
|
|
{
|
|
public static $functions;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setup();
|
|
|
|
self::$functions = $this
|
|
->getMockBuilder('stdClass')
|
|
->setMethods(array(
|
|
'ldap_connect',
|
|
'ldap_set_option',
|
|
'ldap_get_option',
|
|
'ldap_bind',
|
|
'ldap_start_tls',
|
|
'ldap_error',
|
|
'ldap_errno'
|
|
))
|
|
->getMock();
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
parent::tearDown();
|
|
self::$functions = null;
|
|
}
|
|
|
|
public function testGetLdapServerNotConfigured()
|
|
{
|
|
$this->expectException('\LogicException');
|
|
$ldap = new Client;
|
|
$ldap->getLdapServer();
|
|
}
|
|
|
|
public function testConnectSuccess()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue('my_ldap_resource'));
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server');
|
|
$this->assertEquals('my_ldap_resource', $ldap->getConnection());
|
|
}
|
|
|
|
public function testConnectFailure()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue(false));
|
|
|
|
$this->expectException('\Kanboard\Core\Ldap\ConnectionException');
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server');
|
|
$this->assertNotEquals('my_ldap_resource', $ldap->getConnection());
|
|
}
|
|
|
|
public function testConnectSuccessWithTLS()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue('my_ldap_resource'));
|
|
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_start_tls')
|
|
->with(
|
|
$this->equalTo('my_ldap_resource')
|
|
)
|
|
->will($this->returnValue(true));
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server', 389, true);
|
|
$this->assertEquals('my_ldap_resource', $ldap->getConnection());
|
|
}
|
|
|
|
public function testConnectFailureWithTLS()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue('my_ldap_resource'));
|
|
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_start_tls')
|
|
->with(
|
|
$this->equalTo('my_ldap_resource')
|
|
)
|
|
->will($this->returnValue(false));
|
|
|
|
$this->expectException('\Kanboard\Core\Ldap\ConnectionException');
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server', 389, true);
|
|
$this->assertNotEquals('my_ldap_resource', $ldap->getConnection());
|
|
}
|
|
|
|
public function testAnonymousAuthenticationSuccess()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_bind')
|
|
->will($this->returnValue(true));
|
|
|
|
$ldap = new Client;
|
|
$this->assertTrue($ldap->useAnonymousAuthentication());
|
|
}
|
|
|
|
public function testAnonymousAuthenticationFailure()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_bind')
|
|
->will($this->returnValue(false));
|
|
|
|
$this->expectException('\Kanboard\Core\Ldap\ClientException');
|
|
|
|
$ldap = new Client;
|
|
$ldap->useAnonymousAuthentication();
|
|
}
|
|
|
|
public function testUserAuthenticationSuccess()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue('my_ldap_resource'));
|
|
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_bind')
|
|
->with(
|
|
$this->equalTo('my_ldap_resource'),
|
|
$this->equalTo('my_ldap_user'),
|
|
$this->equalTo('my_ldap_password')
|
|
)
|
|
->will($this->returnValue(true));
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server');
|
|
$this->assertTrue($ldap->authenticate('my_ldap_user', 'my_ldap_password'));
|
|
}
|
|
|
|
public function testUserAuthenticationFailure()
|
|
{
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_connect')
|
|
->with(
|
|
$this->equalTo('my_ldap_server'),
|
|
$this->equalTo(389)
|
|
)
|
|
->will($this->returnValue('my_ldap_resource'));
|
|
|
|
self::$functions
|
|
->expects($this->once())
|
|
->method('ldap_bind')
|
|
->with(
|
|
$this->equalTo('my_ldap_resource'),
|
|
$this->equalTo('my_ldap_user'),
|
|
$this->equalTo('my_ldap_password')
|
|
)
|
|
->will($this->returnValue(false));
|
|
|
|
$this->expectException('\Kanboard\Core\Ldap\ClientException');
|
|
|
|
$ldap = new Client;
|
|
$ldap->open('my_ldap_server');
|
|
$ldap->authenticate('my_ldap_user', 'my_ldap_password');
|
|
}
|
|
}
|