phpmyadmin/tests/classes/Setup/ConfigGeneratorTest.php
Maurício Meneghini Fauth ba72f543fd
Call PHPUnit static methods using static calls
Replaces $this->method() with self::method().

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2024-01-31 17:17:38 -03:00

196 lines
5.4 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Setup;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Current;
use PhpMyAdmin\Setup\ConfigGenerator;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Version;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use ReflectionClass;
use function explode;
use function hex2bin;
use function mb_strlen;
use function str_repeat;
use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
#[CoversClass(ConfigGenerator::class)]
class ConfigGeneratorTest extends AbstractTestCase
{
/**
* Test for ConfigGenerator::getConfigFile
*/
#[Group('medium')]
public function testGetConfigFile(): void
{
unset($_SESSION['eol']);
parent::setGlobalConfig();
Current::$server = 2;
$cf = new ConfigFile();
$_SESSION['ConfigFile2'] = ['a', 'b', 'c'];
$_SESSION['ConfigFile2']['Servers'] = [[1, 2, 3]];
$cf->setPersistKeys(['1/', 2]);
$result = ConfigGenerator::getConfigFile($cf);
self::assertStringContainsString(
"<?php\n" .
"/**\n" .
" * Generated configuration file\n" .
' * Generated by: phpMyAdmin ' . Version::VERSION . " setup script\n",
$result,
);
self::assertStringContainsString(
"/* Servers configuration */\n" .
'$i = 0;' . "\n\n" .
"/* Server: localhost [0] */\n" .
'$i++;' . "\n" .
'$cfg[\'Servers\'][$i][\'0\'] = 1;' . "\n" .
'$cfg[\'Servers\'][$i][\'1\'] = 2;' . "\n" .
'$cfg[\'Servers\'][$i][\'2\'] = 3;' . "\n\n" .
"/* End of servers configuration */\n\n",
$result,
);
}
/**
* Test for ConfigGenerator::getVarExport
*/
public function testGetVarExport(): void
{
$reflection = new ReflectionClass(ConfigGenerator::class);
$method = $reflection->getMethod('getVarExport');
self::assertEquals(
'$cfg[\'var_name\'] = 1;' . "\n",
$method->invoke(null, 'var_name', 1, "\n"),
);
self::assertEquals(
'$cfg[\'var_name\'] = array (' .
"\n);\n",
$method->invoke(null, 'var_name', [], "\n"),
);
self::assertEquals(
'$cfg[\'var_name\'] = [1, 2, 3];' . "\n",
$method->invoke(
null,
'var_name',
[1, 2, 3],
"\n",
),
);
self::assertEquals(
'$cfg[\'var_name\'][\'1a\'] = \'foo\';' . "\n" .
'$cfg[\'var_name\'][\'b\'] = \'bar\';' . "\n",
$method->invoke(
null,
'var_name',
['1a' => 'foo', 'b' => 'bar'],
"\n",
),
);
}
public function testGetVarExportForBlowfishSecret(): void
{
$reflection = new ReflectionClass(ConfigGenerator::class);
$method = $reflection->getMethod('getVarExport');
self::assertEquals(
'$cfg[\'blowfish_secret\'] = \sodium_hex2bin(\''
. '6161616161616161616161616161616161616161616161616161616161616161\');' . "\n",
$method->invoke(null, 'blowfish_secret', str_repeat('a', SODIUM_CRYPTO_SECRETBOX_KEYBYTES), "\n"),
);
/** @var string $actual */
$actual = $method->invoke(null, 'blowfish_secret', 'invalid secret', "\n");
self::assertStringStartsWith('$cfg[\'blowfish_secret\'] = \sodium_hex2bin(\'', $actual);
self::assertStringEndsWith('\');' . "\n", $actual);
$pieces = explode('\'', $actual);
self::assertCount(5, $pieces);
$binaryString = hex2bin($pieces[3]);
self::assertIsString($binaryString);
self::assertSame(SODIUM_CRYPTO_SECRETBOX_KEYBYTES, mb_strlen($binaryString, '8bit'));
}
/**
* Test for ConfigGenerator::isZeroBasedArray
*/
public function testIsZeroBasedArray(): void
{
$reflection = new ReflectionClass(ConfigGenerator::class);
$method = $reflection->getMethod('isZeroBasedArray');
self::assertFalse(
$method->invoke(
null,
['a' => 1, 'b' => 2],
),
);
self::assertFalse(
$method->invoke(
null,
[0 => 1, 1 => 2, 3 => 3],
),
);
self::assertTrue(
$method->invoke(
null,
[],
),
);
self::assertTrue(
$method->invoke(
null,
[1, 2, 3],
),
);
}
/**
* Test for ConfigGenerator::exportZeroBasedArray
*/
public function testExportZeroBasedArray(): void
{
$reflection = new ReflectionClass(ConfigGenerator::class);
$method = $reflection->getMethod('exportZeroBasedArray');
$arr = [1, 2, 3, 4];
$result = $method->invoke(null, $arr, "\n");
self::assertEquals('[1, 2, 3, 4]', $result);
$arr = [1, 2, 3, 4, 7, 'foo'];
$result = $method->invoke(null, $arr, "\n");
self::assertEquals(
'[' . "\n" .
' 1,' . "\n" .
' 2,' . "\n" .
' 3,' . "\n" .
' 4,' . "\n" .
' 7,' . "\n" .
' \'foo\']',
$result,
);
}
}