Replaces $this->method() with self::method(). Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
1045 lines
41 KiB
PHP
1045 lines
41 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpMyAdmin\Tests\Config\Settings;
|
|
|
|
use PhpMyAdmin\Config\Settings\Server;
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
#[CoversClass(Server::class)]
|
|
class ServerTest extends TestCase
|
|
{
|
|
#[DataProvider('valuesForHostProvider')]
|
|
public function testHost(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['host' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->host);
|
|
self::assertSame($expected, $serverArray['host']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForHostProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, 'localhost'];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForPortProvider')]
|
|
public function testPort(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['port' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->port);
|
|
self::assertSame($expected, $serverArray['port']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForPortProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForSocketProvider')]
|
|
public function testSocket(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['socket' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->socket);
|
|
self::assertSame($expected, $serverArray['socket']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForSocketProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testSsl(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['ssl' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->ssl);
|
|
self::assertSame($expected, $serverArray['ssl']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool}> */
|
|
public static function booleanWithDefaultFalseProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, false];
|
|
yield 'valid value' => [false, false];
|
|
yield 'valid value 2' => [true, true];
|
|
yield 'valid value with type coercion' => [1, true];
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testSslKey(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['ssl_key' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslKey);
|
|
self::assertSame($expected, $serverArray['ssl_key']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string|null}> */
|
|
public static function valuesForSslOptionsProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testSslCert(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['ssl_cert' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslCert);
|
|
self::assertSame($expected, $serverArray['ssl_cert']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testSslCa(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['ssl_ca' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslCa);
|
|
self::assertSame($expected, $serverArray['ssl_ca']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testSslCaPath(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['ssl_ca_path' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslCaPath);
|
|
self::assertSame($expected, $serverArray['ssl_ca_path']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testSslCiphers(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['ssl_ciphers' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslCiphers);
|
|
self::assertSame($expected, $serverArray['ssl_ciphers']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultTrueProvider')]
|
|
public function testSslVerify(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['ssl_verify' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sslVerify);
|
|
self::assertSame($expected, $serverArray['ssl_verify']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool}> */
|
|
public static function booleanWithDefaultTrueProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, true];
|
|
yield 'valid value' => [true, true];
|
|
yield 'valid value 2' => [false, false];
|
|
yield 'valid value with type coercion' => [0, false];
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testCompress(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['compress' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->compress);
|
|
self::assertSame($expected, $serverArray['compress']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlHostProvider')]
|
|
public function testControlHost(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['controlhost' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlHost);
|
|
self::assertSame($expected, $serverArray['controlhost']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlHostProvider')]
|
|
public function testControlHost2(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['control_host' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlHost);
|
|
self::assertSame($expected, $serverArray['controlhost']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForControlHostProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlPortProvider')]
|
|
public function testControlPort(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['controlport' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlPort);
|
|
self::assertSame($expected, $serverArray['controlport']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlPortProvider')]
|
|
public function testControlPort2(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['control_port' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlPort);
|
|
self::assertSame($expected, $serverArray['controlport']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForControlPortProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlUserProvider')]
|
|
public function testControlUser(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['controluser' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlUser);
|
|
self::assertSame($expected, $serverArray['controluser']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlUserProvider')]
|
|
public function testControlUser2(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['control_user' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlUser);
|
|
self::assertSame($expected, $serverArray['controluser']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForControlUserProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlPassProvider')]
|
|
public function testControlPass(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['controlpass' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlPass);
|
|
self::assertSame($expected, $serverArray['controlpass']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlPassProvider')]
|
|
public function testControlPass2(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['control_pass' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlPass);
|
|
self::assertSame($expected, $serverArray['controlpass']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlPassProvider')]
|
|
public function testControlPass3(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['control_password' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlPass);
|
|
self::assertSame($expected, $serverArray['controlpass']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForControlPassProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlSocketProvider')]
|
|
public function testControlSocket(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_socket' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSocket);
|
|
self::assertSame($expected, $serverArray['control_socket']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string|null}> */
|
|
public static function valuesForControlSocketProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlSslProvider')]
|
|
public function testControlSsl(mixed $actual, bool|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSsl);
|
|
self::assertSame($expected, $serverArray['control_ssl']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool|null}> */
|
|
public static function valuesForControlSslProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => [false, false];
|
|
yield 'valid value 2' => [true, true];
|
|
yield 'valid value with type coercion' => [1, true];
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testControlSslKey(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_key' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslKey);
|
|
self::assertSame($expected, $serverArray['control_ssl_key']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testControlSslCert(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_cert' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslCert);
|
|
self::assertSame($expected, $serverArray['control_ssl_cert']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testControlSslCa(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_ca' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslCa);
|
|
self::assertSame($expected, $serverArray['control_ssl_ca']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testControlSslCaPath(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_ca_path' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslCaPath);
|
|
self::assertSame($expected, $serverArray['control_ssl_ca_path']);
|
|
}
|
|
|
|
#[DataProvider('valuesForSslOptionsProvider')]
|
|
public function testControlSslCiphers(mixed $actual, string|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_ciphers' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslCiphers);
|
|
self::assertSame($expected, $serverArray['control_ssl_ciphers']);
|
|
}
|
|
|
|
#[DataProvider('valuesForControlSslVerifyProvider')]
|
|
public function testControlSslVerify(mixed $actual, bool|null $expected): void
|
|
{
|
|
$server = new Server(['control_ssl_verify' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlSslVerify);
|
|
self::assertSame($expected, $serverArray['control_ssl_verify']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool|null}> */
|
|
public static function valuesForControlSslVerifyProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => [true, true];
|
|
yield 'valid value 2' => [false, false];
|
|
yield 'valid value with type coercion' => [0, false];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlCompressProvider')]
|
|
public function testControlCompress(mixed $actual, bool|null $expected): void
|
|
{
|
|
$server = new Server(['control_compress' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlCompress);
|
|
self::assertSame($expected, $serverArray['control_compress']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool|null}> */
|
|
public static function valuesForControlCompressProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => [false, false];
|
|
yield 'valid value 2' => [true, true];
|
|
yield 'valid value with type coercion' => [1, true];
|
|
}
|
|
|
|
#[DataProvider('valuesForControlHideConnectionErrorsProvider')]
|
|
public function testControlHideConnectionErrors(mixed $actual, bool|null $expected): void
|
|
{
|
|
$server = new Server(['control_hide_connection_errors' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->controlHideConnectionErrors);
|
|
self::assertSame($expected, $serverArray['control_hide_connection_errors']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, bool|null}> */
|
|
public static function valuesForControlHideConnectionErrorsProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, null];
|
|
yield 'valid value' => [false, false];
|
|
yield 'valid value 2' => [true, true];
|
|
yield 'valid value with type coercion' => [1, true];
|
|
}
|
|
|
|
#[DataProvider('valuesForAuthTypeProvider')]
|
|
public function testAuthType(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['auth_type' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->authType);
|
|
self::assertSame($expected, $serverArray['auth_type']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForAuthTypeProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, 'cookie'];
|
|
yield 'valid value' => ['config', 'config'];
|
|
yield 'valid value 2' => ['http', 'http'];
|
|
yield 'valid value 3' => ['signon', 'signon'];
|
|
yield 'valid value 4' => ['cookie', 'cookie'];
|
|
yield 'invalid value' => ['invalid', 'cookie'];
|
|
}
|
|
|
|
#[DataProvider('valuesForAuthHttpRealmProvider')]
|
|
public function testAuthHttpRealm(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['auth_http_realm' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->authHttpRealm);
|
|
self::assertSame($expected, $serverArray['auth_http_realm']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForAuthHttpRealmProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForUserProvider')]
|
|
public function testUser(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['user' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->user);
|
|
self::assertSame($expected, $serverArray['user']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForUserProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, 'root'];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForPasswordProvider')]
|
|
public function testPassword(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['password' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->password);
|
|
self::assertSame($expected, $serverArray['password']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForPasswordProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForSignonSessionProvider')]
|
|
public function testSignonSession(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['SignonSession' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->signonSession);
|
|
self::assertSame($expected, $serverArray['SignonSession']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForSignonSessionProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
/** @param array<string, int|string|bool> $expected */
|
|
#[DataProvider('valuesForSignonCookieParamsProvider')]
|
|
public function testSignonCookieParams(mixed $actual, array $expected): void
|
|
{
|
|
$server = new Server(['SignonCookieParams' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->signonCookieParams);
|
|
self::assertSame($expected, $serverArray['SignonCookieParams']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, array<string, int|string|bool>}> */
|
|
public static function valuesForSignonCookieParamsProvider(): iterable
|
|
{
|
|
yield 'null value' => [
|
|
null,
|
|
['lifetime' => 0, 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false],
|
|
];
|
|
|
|
yield 'valid value' => [
|
|
[
|
|
'lifetime' => 0,
|
|
'path' => 'test',
|
|
'domain' => 'test',
|
|
'secure' => false,
|
|
'httponly' => false,
|
|
'samesite' => 'Lax',
|
|
],
|
|
[
|
|
'lifetime' => 0,
|
|
'path' => 'test',
|
|
'domain' => 'test',
|
|
'secure' => false,
|
|
'httponly' => false,
|
|
'samesite' => 'Lax',
|
|
],
|
|
];
|
|
|
|
yield 'valid value 2' => [
|
|
['lifetime' => 1, 'secure' => true, 'httponly' => true, 'samesite' => 'Strict'],
|
|
[
|
|
'lifetime' => 1,
|
|
'path' => '/',
|
|
'domain' => '',
|
|
'secure' => true,
|
|
'httponly' => true,
|
|
'samesite' => 'Strict',
|
|
],
|
|
];
|
|
|
|
yield 'valid value 3' => [
|
|
[],
|
|
['lifetime' => 0, 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false],
|
|
];
|
|
|
|
yield 'valid value with type coercion' => [
|
|
['lifetime' => '1', 'path' => 1234, 'domain' => 1234, 'secure' => 1, 'httponly' => 1],
|
|
['lifetime' => 1, 'path' => '1234', 'domain' => '1234', 'secure' => true, 'httponly' => true],
|
|
];
|
|
|
|
yield 'invalid value' => [
|
|
'invalid',
|
|
['lifetime' => 0, 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false],
|
|
];
|
|
|
|
yield 'invalid value 2' => [
|
|
['invalid' => 'invalid', 'lifetime' => -1, 'samesite' => 'invalid'],
|
|
['lifetime' => 0, 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false],
|
|
];
|
|
}
|
|
|
|
#[DataProvider('valuesForSignonScriptProvider')]
|
|
public function testSignonScript(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['SignonScript' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->signonScript);
|
|
self::assertSame($expected, $serverArray['SignonScript']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForSignonScriptProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForSignonURLProvider')]
|
|
public function testSignonURL(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['SignonURL' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->signonUrl);
|
|
self::assertSame($expected, $serverArray['SignonURL']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForSignonURLProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForLogoutURLProvider')]
|
|
public function testLogoutURL(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['LogoutURL' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->logoutUrl);
|
|
self::assertSame($expected, $serverArray['LogoutURL']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForLogoutURLProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
/** @param string|string[] $expected */
|
|
#[DataProvider('valuesForOnlyDbProvider')]
|
|
public function testOnlyDb(mixed $actual, string|array $expected): void
|
|
{
|
|
$server = new Server(['only_db' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->onlyDb);
|
|
self::assertSame($expected, $serverArray['only_db']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string|string[]}> */
|
|
public static function valuesForOnlyDbProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => [['test1', 'test2', 1234], ['test1', 'test2', '1234']];
|
|
yield 'valid value 2' => ['test', 'test'];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
yield 'invalid value' => [[], ''];
|
|
}
|
|
|
|
#[DataProvider('valuesForHideDbProvider')]
|
|
public function testHideDb(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['hide_db' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->hideDb);
|
|
self::assertSame($expected, $serverArray['hide_db']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForHideDbProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForVerboseProvider')]
|
|
public function testVerbose(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['verbose' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->verbose);
|
|
self::assertSame($expected, $serverArray['verbose']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForVerboseProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForPmaDbProvider')]
|
|
public function testPmaDb(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['pmadb' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->pmaDb);
|
|
self::assertSame($expected, $serverArray['pmadb']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForPmaDbProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testBookmarkTable(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['bookmarktable' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->bookmarkTable);
|
|
self::assertSame($expected, $serverArray['bookmarktable']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string|false}> */
|
|
public static function valuesForConfigStorageTablesProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => [false, false];
|
|
yield 'valid value 2' => ['test', 'test'];
|
|
yield 'valid value 3' => ['', ''];
|
|
yield 'valid value with type coercion' => [true, '1'];
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testRelation(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['relation' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->relation);
|
|
self::assertSame($expected, $serverArray['relation']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testTableInfo(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['table_info' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->tableInfo);
|
|
self::assertSame($expected, $serverArray['table_info']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testPdfPages(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['pdf_pages' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->pdfPages);
|
|
self::assertSame($expected, $serverArray['pdf_pages']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testColumnInfo(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['column_info' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->columnInfo);
|
|
self::assertSame($expected, $serverArray['column_info']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testHistory(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['history' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->history);
|
|
self::assertSame($expected, $serverArray['history']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testRecent(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['recent' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->recent);
|
|
self::assertSame($expected, $serverArray['recent']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testFavorite(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['favorite' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->favorite);
|
|
self::assertSame($expected, $serverArray['favorite']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testTableUiPrefs(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['table_uiprefs' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->tableUiPrefs);
|
|
self::assertSame($expected, $serverArray['table_uiprefs']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testTracking(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['tracking' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->tracking);
|
|
self::assertSame($expected, $serverArray['tracking']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testUserConfig(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['userconfig' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->userConfig);
|
|
self::assertSame($expected, $serverArray['userconfig']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testUsers(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['users' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->users);
|
|
self::assertSame($expected, $serverArray['users']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testUserGroups(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['usergroups' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->userGroups);
|
|
self::assertSame($expected, $serverArray['usergroups']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testNavigationHiding(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['navigationhiding' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->navigationHiding);
|
|
self::assertSame($expected, $serverArray['navigationhiding']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testSavedSearches(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['savedsearches' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->savedSearches);
|
|
self::assertSame($expected, $serverArray['savedsearches']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testCentralColumns(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['central_columns' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->centralColumns);
|
|
self::assertSame($expected, $serverArray['central_columns']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testDesignerSettings(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['designer_settings' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->designerSettings);
|
|
self::assertSame($expected, $serverArray['designer_settings']);
|
|
}
|
|
|
|
#[DataProvider('valuesForConfigStorageTablesProvider')]
|
|
public function testExportTemplates(mixed $actual, string|false $expected): void
|
|
{
|
|
$server = new Server(['export_templates' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->exportTemplates);
|
|
self::assertSame($expected, $serverArray['export_templates']);
|
|
}
|
|
|
|
#[DataProvider('valuesForMaxTableUiPrefsProvider')]
|
|
public function testMaxTableUiPrefs(mixed $actual, int $expected): void
|
|
{
|
|
$server = new Server(['MaxTableUiprefs' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->maxTableUiPrefs);
|
|
self::assertSame($expected, $serverArray['MaxTableUiprefs']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, int}> */
|
|
public static function valuesForMaxTableUiPrefsProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, 100];
|
|
yield 'valid value' => [1, 1];
|
|
yield 'valid value with type coercion' => ['1', 1];
|
|
yield 'invalid value' => [-1, 100];
|
|
yield 'invalid value 2' => [0, 100];
|
|
}
|
|
|
|
#[DataProvider('valuesForSessionTimeZoneProvider')]
|
|
public function testSessionTimeZone(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['SessionTimeZone' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->sessionTimeZone);
|
|
self::assertSame($expected, $serverArray['SessionTimeZone']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForSessionTimeZoneProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ''];
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultTrueProvider')]
|
|
public function testAllowRoot(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['AllowRoot' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->allowRoot);
|
|
self::assertSame($expected, $serverArray['AllowRoot']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testAllowNoPassword(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['AllowNoPassword' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->allowNoPassword);
|
|
self::assertSame($expected, $serverArray['AllowNoPassword']);
|
|
}
|
|
|
|
/** @param array<string, string|string[]> $expected */
|
|
#[DataProvider('valuesForAllowDenyProvider')]
|
|
public function testAllowDeny(mixed $actual, array $expected): void
|
|
{
|
|
$server = new Server(['AllowDeny' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->allowDeny);
|
|
self::assertSame($expected, $serverArray['AllowDeny']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, array<string, string|string[]>}> */
|
|
public static function valuesForAllowDenyProvider(): iterable
|
|
{
|
|
yield 'null value' => [null, ['order' => '', 'rules' => []]];
|
|
yield 'valid value' => [
|
|
['order' => '', 'rules' => ['allow root from 192.168.5.50', 'allow % from 192.168.6.10']],
|
|
['order' => '', 'rules' => ['allow root from 192.168.5.50', 'allow % from 192.168.6.10']],
|
|
];
|
|
|
|
yield 'valid value 2' => [['order' => 'deny,allow'], ['order' => 'deny,allow', 'rules' => []]];
|
|
yield 'valid value 3' => [['order' => 'allow,deny'], ['order' => 'allow,deny', 'rules' => []]];
|
|
yield 'valid value 4' => [['order' => 'explicit'], ['order' => 'explicit', 'rules' => []]];
|
|
yield 'valid value 5' => [[], ['order' => '', 'rules' => []]];
|
|
yield 'valid value with type coercion' => [['rules' => [1234]], ['order' => '', 'rules' => ['1234']]];
|
|
yield 'invalid value' => ['invalid', ['order' => '', 'rules' => []]];
|
|
yield 'invalid value 2' => [
|
|
['invalid' => 'invalid', 'order' => 'invalid', 'rules' => 'invalid'],
|
|
['order' => '', 'rules' => []],
|
|
];
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testDisableIS(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['DisableIS' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->disableIS);
|
|
self::assertSame($expected, $serverArray['DisableIS']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testTrackingVersionAutoCreate(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['tracking_version_auto_create' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->trackingVersionAutoCreate);
|
|
self::assertSame($expected, $serverArray['tracking_version_auto_create']);
|
|
}
|
|
|
|
#[DataProvider('valuesForTrackingDefaultStatementsProvider')]
|
|
public function testTrackingDefaultStatements(mixed $actual, string $expected): void
|
|
{
|
|
$server = new Server(['tracking_default_statements' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->trackingDefaultStatements);
|
|
self::assertSame($expected, $serverArray['tracking_default_statements']);
|
|
}
|
|
|
|
/** @return iterable<string, array{mixed, string}> */
|
|
public static function valuesForTrackingDefaultStatementsProvider(): iterable
|
|
{
|
|
yield 'null value' => [
|
|
null,
|
|
'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,'
|
|
. 'TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE',
|
|
];
|
|
|
|
yield 'valid value' => ['test', 'test'];
|
|
yield 'valid value 2' => ['', ''];
|
|
yield 'valid value with type coercion' => [1234, '1234'];
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultTrueProvider')]
|
|
public function testTrackingAddDropView(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['tracking_add_drop_view' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->trackingAddDropView);
|
|
self::assertSame($expected, $serverArray['tracking_add_drop_view']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultTrueProvider')]
|
|
public function testTrackingAddDropTable(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['tracking_add_drop_table' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->trackingAddDropTable);
|
|
self::assertSame($expected, $serverArray['tracking_add_drop_table']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultTrueProvider')]
|
|
public function testTrackingAddDropDatabase(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['tracking_add_drop_database' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->trackingAddDropDatabase);
|
|
self::assertSame($expected, $serverArray['tracking_add_drop_database']);
|
|
}
|
|
|
|
#[DataProvider('booleanWithDefaultFalseProvider')]
|
|
public function testHideConnectionErrors(mixed $actual, bool $expected): void
|
|
{
|
|
$server = new Server(['hide_connection_errors' => $actual]);
|
|
$serverArray = $server->asArray();
|
|
self::assertSame($expected, $server->hideConnectionErrors);
|
|
self::assertSame($expected, $serverArray['hide_connection_errors']);
|
|
}
|
|
}
|