|
|
<?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'); |
|
|
} |
|
|
} |
|
|
|