<?php
namespace cymapgt\core\application\authentication\UserCredential\services;
use cymapgt\core\application\authentication\UserCredential\abstractclass\MultiotpWrapper;
use JJG\Ping;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2014-05-18 at 14:28:58.
*/
class UserCredentialPasswordLoginServiceTest extends \PHPUnit\Framework\TestCase {
/**
* @var UserCredentialPasswordLoginService
*/
protected $object;
/**
* @var tstring
*/
protected $password;
/**
* @var MultiOtpWrapper
*/
protected $multiOtpWrapper;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp() : void {
//Make sure that UserCredentialPasswordLoginService is available to your auth plugin and create an instance
$this->object = new UserCredentialPasswordLoginService;
/**
* This is the password that is stored in DB hashed with \password_hash function.
* PHP 5.4 will be supported because of ircmaxell/password-compat package
*/
$this->password = \password_hash('123456', \PASSWORD_DEFAULT);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown() : void {
}
/**
* @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialPasswordLoginService::initialize
*/
public function testInitialize() {
//username of authenticating user
$this->object->setCurrentUserName('rhossis');
//password that is stored in the DB
$this->object->setCurrentPassword($this->password);
//password input by the user in the login form / API
$this->object->setPassword('123456');
$this->assertEquals(null, $this->object->initialize());
}
/**
* @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialPasswordLoginService::initialize
*/
public function testInitializeException() {
$this->expectException('\cymapgt\Exception\UserCredentialException');
$this->expectExceptionMessage('The usercredential login service is not initialized with all parameters');
//if you call initialize without setting the username, password and keyed in password, an exception should be thrown
$this->object->initialize();
}
/**
* @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialPasswordLoginService::authenticate
*/
public function testAuthenticateNative() {
//test authentication where user has input the correct password
$this->object->setCurrentUserName('rhossis');
$this->object->setCurrentPassword($this->password);
$this->object->setPassword('123456');
//test authentication where user has input wrong password. We assume the user input 12345 instead of 123456
$this->assertEquals(true, $this->object->authenticate());
$this->object->setPassword('12345');
$this->assertEquals(false, $this->object->authenticate());
}
/**
* This tests that without proper initialization of LDAP settings, a UserCredentialException will be thrown.
*
* @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialPasswordLoginService::authenticate
*/
public function testInitializeLdapException() {
$this->expectException('\cymapgt\Exception\UserCredentialException');
$this->expectExceptionMessage('The LDAP feature of the usercredential login service is not initialized with all parameters');
$this->object->setPasswordAuthenticationPlatform(\USERCREDENTIAL_PASSWORDLOGINPLATFORM_LDAP);
$this->object->setCurrentUserName('rhossis');
$this->object->setCurrentPassword($this->password);
$ldapSettings = array();
$this->object->initializeLdap($ldapSettings);
}
/**
* LDAP settings must be initialized, then authentication can proceed. The below example uses the MultiOTP
* LDAP auth functionality. If the remote LDAP configured cannot be pinged, this test will be skipped
*
* @covers cymapgt\core\application\authentication\UserCredential\services\UserCredentialPasswordLoginService::authenticate
*/
public function testAuthenticateLdap() {
//the LDAP server
$domainControllers = 'ldap.forumsys.com';
//ping server
$pingResult = new Ping($domainControllers);
$pingResult->setPort(389);
$latency = $pingResult->ping('fsockopen');
if ($latency !== false) {
$skipLdapTest = false;
} else {
$skipLdapTest = true;
}
//if ping was not successfull, skip the test
if ($skipLdapTest) {
$this->markTestSkipped('Cannot connect to remote LDAP test server');
} else {
$this->object->setPasswordAuthenticationPlatform(\USERCREDENTIAL_PASSWORDLOGINPLATFORM_LDAP);
$ldapSettings = array();
$ldapSettings['ldap_account_suffix'] = '';
$ldapSettings['ad_password'] = 'password';
$ldapSettings['ad_username'] = 'cn=read-only-admin,dc=example,dc=com';
$ldapSettings['base_dn'] = '';
$ldapSettings['cn_identifier'] = 'TEST';
$ldapSettings['domain_controllers'] = $domainControllers;
$ldapSettings['group_attribute'] = 'dc=example,dc=com';
$ldapSettings['group_cn_identifier'] = 'cn';
$ldapSettings['ldap_server_type'] = 1;
$ldapSettings['network_timeout'] = 1;
$ldapSettings['port'] = 389;
$ldapSettings['recursive_groups'] = 1;
$ldapSettings['time_limit'] = 30;
$ldapSettings['use_ssl'] = 0;
$ldapSettings['cache_support'] = 0;
$ldapSettings['cache_folder'] = '';
$ldapSettings['expired_password_valid'] = '';
$this->object->setCurrentUserName($ldapSettings['ad_username']);
$this->object->setCurrentPassword($ldapSettings['ad_password']);
$this->object->setPasswordAuthenticationPlatformSettings($ldapSettings);
$this->object->initializeLdap($ldapSettings);
$isLoggedIn = $this->object->authenticate();
$this->assertEquals(true, $isLoggedIn);
}
}
}
|