Fix \Combodo\iTop\Test\UnitTest\Core\CMDBSourceTest::testIsOpenedDbConnectionUsingTls

This commit is contained in:
Pierre Goiffon
2021-09-30 10:49:11 +02:00
parent 4d6a8a76aa
commit 9c6d8253f4
3 changed files with 15 additions and 14 deletions

View File

@@ -49,7 +49,7 @@ class DbConnectionWrapper
return static::$oDbCnxStandard;
}
public static function SetDbConnection(mysqli $oMysqli): void
public static function SetDbConnection(?mysqli $oMysqli): void
{
static::$oDbCnxStandard = $oMysqli;
static::SetDbConnectionMockForQuery($oMysqli);
@@ -58,9 +58,9 @@ class DbConnectionWrapper
/**
* Use this to register a mock that will handle {@see mysqli::query()}
*
* @param \mysqli $oMysqli
* @param \mysqli|null $oMysqli
*/
public static function SetDbConnectionMockForQuery(mysqli $oMysqli): void
public static function SetDbConnectionMockForQuery(?mysqli $oMysqli): void
{
static::$oDbCnxMockableForQuery = $oMysqli;
}

View File

@@ -849,20 +849,19 @@ class CMDBSource
*/
public static function QueryToScalar($sSql, $iCol = 0, $oMysqli = null)
{
$oMysqliForQuery = $oMysqli ?: DbConnectionWrapper::GetDbConnection(true);
$oKPI = new ExecutionKPI();
try
{
/** @noinspection NullPointerExceptionInspection this shouldn't be called with un-init DB */
$oResult = DbConnectionWrapper::GetDbConnection(true)->query($sSql);
try {
/** @noinspection NullPointerExceptionInspection this shouldn't happen : either cnx is passed or the DB was init */
$oResult = $oMysqliForQuery->query($sSql);
}
catch(mysqli_sql_exception $e)
{
catch (mysqli_sql_exception $e) {
$oKPI->ComputeStats('Query exec (mySQL)', $sSql);
throw new MySQLException('Failed to issue SQL query', array('query' => $sSql, $e));
}
$oKPI->ComputeStats('Query exec (mySQL)', $sSql);
if ($oResult === false)
{
if ($oResult === false) {
throw new MySQLException('Failed to issue SQL query', array('query' => $sSql));
}

View File

@@ -4,6 +4,7 @@
namespace Combodo\iTop\Test\UnitTest\Core;
use CMDBSource;
use Combodo\iTop\Core\DbConnectionWrapper;
use Combodo\iTop\Test\UnitTest\ItopTestCase;
use utils;
@@ -123,16 +124,17 @@ class CMDBSourceTest extends ItopTestCase
* @throws \MySQLException
* @since 3.0.0 N°4215
*/
public function testIsOpenedDbConnectionUsingTls() {
public function testIsOpenedDbConnectionUsingTls()
{
$oConfig = utils::GetConfig();
CMDBSource::InitFromConfig($oConfig);
$oMysqli = CMDBSource::GetMysqli();
// resets \CMDBSource::$oMySQLiForQuery to simulate call to \CMDBSource::Init with a TLS connexion
$this->InvokeNonPublicStaticMethod(CMDBSource::class, 'SetMySQLiForQuery',[null]);
DbConnectionWrapper::SetDbConnection(null);
// before N°4215 fix, this was crashing : "Call to a member function query() on null"
$bIsTlsCnx = $this->InvokeNonPublicStaticMethod(CMDBSource::class, 'IsOpenedDbConnectionUsingTls',[$oMysqli]);
$bIsTlsCnx = $this->InvokeNonPublicStaticMethod(CMDBSource::class, 'IsOpenedDbConnectionUsingTls', [$oMysqli]);
$this->assertFalse($bIsTlsCnx);
}
}