mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 15:34:12 +01:00
Most of the conflicts are caused by HU translations (N°7077 / #584) # Conflicts: # css/setup.css # datamodels/2.x/authent-cas/dictionaries/hu.dict.authent-cas.php # datamodels/2.x/authent-ldap/dictionaries/hu.dict.authent-ldap.php # datamodels/2.x/authent-local/dictionaries/hu.dict.authent-local.php # datamodels/2.x/combodo-backoffice-darkmoon-theme/dictionaries/hu.dict.combodo-backoffice-darkmoon-theme.php # datamodels/2.x/combodo-db-tools/dictionaries/hu.dict.combodo-db-tools.php # datamodels/2.x/itop-attachments/dictionaries/hu.dict.itop-attachments.php # datamodels/2.x/itop-backup/dictionaries/hu.dict.itop-backup.php # datamodels/2.x/itop-bridge-cmdb-ticket/dictionaries/hu.dict.itop-bridge-cmdb-ticket.php # datamodels/2.x/itop-change-mgmt-itil/dictionaries/hu.dict.itop-change-mgmt-itil.php # datamodels/2.x/itop-change-mgmt/dictionaries/hu.dict.itop-change-mgmt.php # datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php # datamodels/2.x/itop-config/dictionaries/hu.dict.itop-config.php # datamodels/2.x/itop-core-update/dictionaries/hu.dict.itop-core-update.php # datamodels/2.x/itop-faq-light/dictionaries/hu.dict.itop-faq-light.php # datamodels/2.x/itop-hub-connector/dictionaries/hu.dict.itop-hub-connector.php # datamodels/2.x/itop-incident-mgmt-itil/dictionaries/hu.dict.itop-incident-mgmt-itil.php # datamodels/2.x/itop-knownerror-mgmt/dictionaries/hu.dict.itop-knownerror-mgmt.php # datamodels/2.x/itop-oauth-client/hu.dict.itop-oauth-client.php # datamodels/2.x/itop-portal-base/dictionaries/hu.dict.itop-portal-base.php # datamodels/2.x/itop-portal/dictionaries/hu.dict.itop-portal.php # datamodels/2.x/itop-problem-mgmt/dictionaries/hu.dict.itop-problem-mgmt.php # datamodels/2.x/itop-request-mgmt-itil/dictionaries/hu.dict.itop-request-mgmt-itil.php # datamodels/2.x/itop-request-mgmt/dictionaries/hu.dict.itop-request-mgmt.php # datamodels/2.x/itop-service-mgmt-provider/dictionaries/hu.dict.itop-service-mgmt-provider.php # datamodels/2.x/itop-service-mgmt/dictionaries/hu.dict.itop-service-mgmt.php # datamodels/2.x/itop-structure/dictionaries/hu.dict.itop-structure.php # datamodels/2.x/itop-tickets/dictionaries/hu.dict.itop-tickets.php # dictionaries/hu.dictionary.itop.core.php # dictionaries/hu.dictionary.itop.ui.php # dictionaries/ui/components/breadcrumbs/hu.dictionary.itop.breadcrumbs.php # dictionaries/ui/components/datatable/hu.dictionary.itop.datatable.php # dictionaries/ui/components/field/hu.dictionary.itop.field.php # dictionaries/ui/components/global-search/hu.dictionary.itop.global-search.php # dictionaries/ui/components/input/hu.dictionary.itop.input.php # dictionaries/ui/components/quick-create/hu.dictionary.itop.quick-create.php # dictionaries/ui/layouts/activity-panel/hu.dictionary.itop.activity-panel.php # dictionaries/ui/layouts/navigation-menu/hu.dictionary.itop.navigation-menu.php # dictionaries/ui/layouts/object-details/hu.dictionary.itop.object-details.php # dictionaries/ui/layouts/page-content/hu.dictionary.itop.page-content.php # dictionaries/ui/layouts/tab-container/hu.dictionary.itop.tab-container.php # dictionaries/ui/pages/errorpage/hu.dictionary.itop.errorpage.php # dictionaries/ui/pages/preferences/hu.dictionary.itop.preferences.php # tests/php-unit-tests/unitary-tests/setup/DBBackupTest.php
200 lines
6.4 KiB
PHP
200 lines
6.4 KiB
PHP
<?php
|
|
|
|
namespace Combodo\iTop\Test\UnitTest\Setup;
|
|
|
|
use CMDBSource;
|
|
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
|
use DateTime;
|
|
use DBBackup;
|
|
use utils;
|
|
|
|
class DBBackupTest extends ItopTestCase
|
|
{
|
|
protected const DUMMY_DB_HOST = 'localhost';
|
|
protected const DUMMY_DB_NAME = 'itopdb';
|
|
protected const DUMMY_DB_SUBNAME = 'myitop';
|
|
|
|
/**
|
|
* @throws \CoreException
|
|
* @throws \MySQLException
|
|
* @throws \ConfigException
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->RequireOnceItopFile('setup/backup.class.inc.php');
|
|
|
|
// We need a connection to the DB, so let's open it !
|
|
// We are using the default config file... as the server might not be configured for all the combination we are testing
|
|
// For example dev env and ci env won't accept TLS connection
|
|
$oConfigOnDisk = utils::GetConfig(true);
|
|
CMDBSource::InitFromConfig($oConfigOnDisk);
|
|
}
|
|
|
|
/**
|
|
* No TLS connection = no additional CLI args !
|
|
*
|
|
* @throws \CoreException
|
|
* @throws \ConfigException
|
|
* @throws \MySQLException
|
|
*/
|
|
public function testGetMysqlCliTlsOptionsNoTls()
|
|
{
|
|
$oConfigToTest = utils::GetConfig();
|
|
|
|
$oConfigToTest->Set('db_tls.enabled', false);
|
|
$sCliArgsNoTls = DBBackup::GetMysqlCliTlsOptions($oConfigToTest);
|
|
|
|
$this->assertEmpty($sCliArgsNoTls);
|
|
}
|
|
|
|
/**
|
|
* TLS connection configured = we need one CLI arg
|
|
*
|
|
* @return void
|
|
* @throws \ConfigException
|
|
* @throws \CoreException
|
|
*/
|
|
public function testGetMysqlCliTlsOptionsWithTlsNoCa()
|
|
{
|
|
$oConfigToTest = utils::GetConfig();
|
|
$oConfigToTest->Set('db_tls.enabled', true);
|
|
$sCliArgsMinCfg = DBBackup::GetMysqlCliTlsOptions($oConfigToTest);
|
|
|
|
// depending on the MySQL vendor, we would have `--ssl` or `--ssl-mode=REQUIRED`
|
|
if (CMDBSource::IsSslModeDBVersion())
|
|
{
|
|
$this->assertStringStartsWith(' --ssl-mode=REQUIRED', $sCliArgsMinCfg);
|
|
}
|
|
else
|
|
{
|
|
$this->assertStringStartsWith(' --ssl', $sCliArgsMinCfg);
|
|
$this->assertStringNotContainsString('--ssl-mode', $sCliArgsMinCfg);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* TLS connection configured + CA option = we need multiple CLI args
|
|
*
|
|
* @return void
|
|
* @throws \ConfigException
|
|
* @throws \CoreException
|
|
*/
|
|
public function testGetMysqlCliTlsOptionsWithTlsAndCa()
|
|
{
|
|
$oConfigToTest = utils::GetConfig();
|
|
$sTestCa = 'my_test_ca';
|
|
|
|
$oConfigToTest->Set('db_tls.enabled', true);
|
|
$oConfigToTest->Set('db_tls.ca', $sTestCa);
|
|
$sCliArgsCapathCfg = DBBackup::GetMysqlCliTlsOptions($oConfigToTest);
|
|
|
|
// depending on the MySQL vendor, we would have `--ssl` or `--ssl-mode=VERIFY_CA`
|
|
if (CMDBSource::IsSslModeDBVersion())
|
|
{
|
|
$this->assertStringStartsWith(' --ssl-mode=VERIFY_CA', $sCliArgsCapathCfg);
|
|
}
|
|
else
|
|
{
|
|
$this->assertStringStartsWith(' --ssl', $sCliArgsCapathCfg);
|
|
$this->assertStringNotContainsString('--ssl-mode', $sCliArgsCapathCfg);
|
|
|
|
}
|
|
$this->assertStringEndsWith('--ssl-ca='.DBBackup::EscapeShellArg($sTestCa), $sCliArgsCapathCfg);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider GetMysqlCliPortAndTransportOptionsProvider
|
|
* @since 2.7.10 3.0.4 3.1.2 3.2.0 test for N°6123 and N°6889
|
|
*/
|
|
public function testGetMysqlCliPortAndTransportOptions(string $sDbHost, ?int $iPort, ?int $iExpectedPortValue, string $sExpectedProtocolCliOption)
|
|
{
|
|
if (is_null($iExpectedPortValue)) {
|
|
$sExpectedPortCliOption = '';
|
|
} else {
|
|
$sEscapedPortValue = \DBBackup::EscapeShellArg($iExpectedPortValue);
|
|
$sExpectedPortCliOption = ' --port=' . $sEscapedPortValue;
|
|
}
|
|
|
|
$sActualCliOptions = $this->InvokeNonPublicStaticMethod(DBBackup::class, 'GetMysqlCliPortAndTransportOptions', [$sDbHost, $iPort]);
|
|
$this->assertEquals($sExpectedPortCliOption . $sExpectedProtocolCliOption, $sActualCliOptions);
|
|
}
|
|
|
|
public function GetMysqlCliPortAndTransportOptionsProvider()
|
|
{
|
|
$iTestPort = 333306;
|
|
$iDefaultPort = 3306; // cannot access \CMDBSource::MYSQL_DEFAULT_PORT in dataprovider :(
|
|
|
|
return [
|
|
'Localhost no port' => ['localhost', null, null, ''],
|
|
'Localhost with port' => ['localhost', $iTestPort, $iTestPort, ' --protocol=tcp'],
|
|
|
|
// we want both port and protocol for 127.0.0.1, because it is an ip address so using tcp/ip stack !
|
|
'127.0.0.1 no port' => ['127.0.0.1', null, $iDefaultPort, ''],
|
|
'127.0.0.1 with port' => ['127.0.0.1', $iTestPort, $iTestPort, ''],
|
|
|
|
'IP no port' => ['192.168.1.15', null, $iDefaultPort, ''],
|
|
'IP with port' => ['192.168.1.15', $iTestPort, $iTestPort, ''],
|
|
|
|
'DNS no port' => ['dbserver.mycompany.com', null, $iDefaultPort, ''],
|
|
'DNS with port' => ['dbserver.mycompany.com', $iTestPort, $iTestPort, ''],
|
|
|
|
'Windows name no port' => ['dbserver', null, $iDefaultPort, ''],
|
|
'Windows name with port' => ['dbserver', $iTestPort, $iTestPort, ''],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider MakeNameProvider
|
|
* @covers \DBBackup::MakeName
|
|
*
|
|
* @param string $sInputFormat
|
|
* @param \DateTime $oBackupDateTime
|
|
* @param string $sExpectedFilename
|
|
*
|
|
* @return void
|
|
*/
|
|
public function testMakeName(string $sInputFormat, DateTime $oBackupDateTime, string $sExpectedFilename): void
|
|
{
|
|
$oConfig = utils::GetConfig();
|
|
|
|
// See https://github.com/Combodo/iTop/commit/f7ee21f1d7d1c23910506e9e31b57f33311bd5e0#diff-d693fb790e3463d1aa960c2b8b293532b1bbd12c3b8f885d568d315c404f926aR131
|
|
$oConfig->Set('db_host', static::DUMMY_DB_HOST);
|
|
$oConfig->Set('db_name', static::DUMMY_DB_NAME);
|
|
$oConfig->Set('db_subname', static::DUMMY_DB_SUBNAME);
|
|
|
|
$oBackup = new DBBackup($oConfig);
|
|
$sTestedFilename = $oBackup->MakeName($sInputFormat, $oBackupDateTime);
|
|
|
|
$this->assertEquals($sExpectedFilename, $sTestedFilename, "Backup filename for '$sInputFormat' format doesn't match. Got '$sTestedFilename', expected '$sExpectedFilename'.");
|
|
}
|
|
|
|
public function MakeNameProvider(): array
|
|
{
|
|
$oBackupDateTime = DateTime::createFromFormat('Y-m-d H:i:s', '1985-07-30 15:30:59');
|
|
|
|
return [
|
|
'Default format' => [
|
|
'__DB__-%Y-%m-%d',
|
|
$oBackupDateTime,
|
|
static::DUMMY_DB_NAME.'-1985-07-30',
|
|
],
|
|
'With all standard DB placeholders' => [
|
|
'__HOST__-__DB__-__SUBNAME__-%Y-%m-%d',
|
|
$oBackupDateTime,
|
|
static::DUMMY_DB_HOST.'-'.static::DUMMY_DB_NAME.'-'.static::DUMMY_DB_SUBNAME.'-1985-07-30',
|
|
],
|
|
'With time which is a placeholder that needs to be translated (minutes defined by "%M" when its actually "i" in the transformation matrix)' => [
|
|
'__DB__-%Y-%m-%d_%H:%M:%S',
|
|
$oBackupDateTime,
|
|
static::DUMMY_DB_NAME.'-1985-07-30_15:30:59',
|
|
],
|
|
'With user defined string that would be translated if using \DateTime::format() directly' => [
|
|
'__DB__-%Y-%m-%d-production',
|
|
$oBackupDateTime,
|
|
static::DUMMY_DB_NAME.'-1985-07-30-production',
|
|
],
|
|
];
|
|
}
|
|
}
|