| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- <?php
- namespace Illuminate\Tests\Support;
- use Illuminate\Support\ConfigurationUrlParser;
- use PHPUnit\Framework\TestCase;
- class ConfigurationUrlParserTest extends TestCase
- {
- /**
- * @dataProvider databaseUrls
- */
- public function testDatabaseUrlsAreParsed($config, $expectedOutput)
- {
- $this->assertEquals($expectedOutput, (new ConfigurationUrlParser)->parseConfiguration($config));
- }
- public function testDriversAliases()
- {
- $this->assertEquals([
- 'mssql' => 'sqlsrv',
- 'mysql2' => 'mysql',
- 'postgres' => 'pgsql',
- 'postgresql' => 'pgsql',
- 'sqlite3' => 'sqlite',
- 'redis' => 'tcp',
- 'rediss' => 'tls',
- ], ConfigurationUrlParser::getDriverAliases());
- ConfigurationUrlParser::addDriverAlias('some-particular-alias', 'mysql');
- $this->assertEquals([
- 'mssql' => 'sqlsrv',
- 'mysql2' => 'mysql',
- 'postgres' => 'pgsql',
- 'postgresql' => 'pgsql',
- 'sqlite3' => 'sqlite',
- 'redis' => 'tcp',
- 'rediss' => 'tls',
- 'some-particular-alias' => 'mysql',
- ], ConfigurationUrlParser::getDriverAliases());
- $this->assertEquals([
- 'driver' => 'mysql',
- ], (new ConfigurationUrlParser)->parseConfiguration('some-particular-alias://null'));
- }
- public function databaseUrls()
- {
- return [
- 'simple URL' => [
- 'mysql://foo:bar@localhost/baz',
- [
- 'driver' => 'mysql',
- 'username' => 'foo',
- 'password' => 'bar',
- 'host' => 'localhost',
- 'database' => 'baz',
- ],
- ],
- 'simple URL with port' => [
- 'mysql://foo:bar@localhost:134/baz',
- [
- 'driver' => 'mysql',
- 'username' => 'foo',
- 'password' => 'bar',
- 'host' => 'localhost',
- 'port' => 134,
- 'database' => 'baz',
- ],
- ],
- 'sqlite relative URL with host' => [
- 'sqlite://localhost/foo/database.sqlite',
- [
- 'database' => 'foo/database.sqlite',
- 'driver' => 'sqlite',
- 'host' => 'localhost',
- ],
- ],
- 'sqlite absolute URL with host' => [
- 'sqlite://localhost//tmp/database.sqlite',
- [
- 'database' => '/tmp/database.sqlite',
- 'driver' => 'sqlite',
- 'host' => 'localhost',
- ],
- ],
- 'sqlite relative URL without host' => [
- 'sqlite:///foo/database.sqlite',
- [
- 'database' => 'foo/database.sqlite',
- 'driver' => 'sqlite',
- ],
- ],
- 'sqlite absolute URL without host' => [
- 'sqlite:////tmp/database.sqlite',
- [
- 'database' => '/tmp/database.sqlite',
- 'driver' => 'sqlite',
- ],
- ],
- 'sqlite memory' => [
- 'sqlite:///:memory:',
- [
- 'database' => ':memory:',
- 'driver' => 'sqlite',
- ],
- ],
- 'params parsed from URL override individual params' => [
- [
- 'url' => 'mysql://foo:bar@localhost/baz',
- 'password' => 'lulz',
- 'driver' => 'sqlite',
- ],
- [
- 'username' => 'foo',
- 'password' => 'bar',
- 'host' => 'localhost',
- 'database' => 'baz',
- 'driver' => 'mysql',
- ],
- ],
- 'params not parsed from URL but individual params are preserved' => [
- [
- 'url' => 'mysql://foo:bar@localhost/baz',
- 'port' => 134,
- ],
- [
- 'username' => 'foo',
- 'password' => 'bar',
- 'host' => 'localhost',
- 'port' => 134,
- 'database' => 'baz',
- 'driver' => 'mysql',
- ],
- ],
- 'query params from URL are used as extra params' => [
- 'url' => 'mysql://foo:bar@localhost/database?charset=UTF-8',
- [
- 'driver' => 'mysql',
- 'database' => 'database',
- 'host' => 'localhost',
- 'username' => 'foo',
- 'password' => 'bar',
- 'charset' => 'UTF-8',
- ],
- ],
- 'simple URL with driver set apart' => [
- [
- 'url' => '//foo:bar@localhost/baz',
- 'driver' => 'sqlsrv',
- ],
- [
- 'username' => 'foo',
- 'password' => 'bar',
- 'host' => 'localhost',
- 'database' => 'baz',
- 'driver' => 'sqlsrv',
- ],
- ],
- 'simple URL with percent encoding' => [
- 'mysql://foo%3A:bar%2F@localhost/baz+baz%40',
- [
- 'username' => 'foo:',
- 'password' => 'bar/',
- 'host' => 'localhost',
- 'database' => 'baz+baz@',
- 'driver' => 'mysql',
- ],
- ],
- 'simple URL with percent sign in password' => [
- 'mysql://foo:bar%25bar@localhost/baz',
- [
- 'username' => 'foo',
- 'password' => 'bar%bar',
- 'host' => 'localhost',
- 'database' => 'baz',
- 'driver' => 'mysql',
- ],
- ],
- 'simple URL with percent encoding in query' => [
- 'mysql://foo:bar%25bar@localhost/baz?timezone=%2B00%3A00',
- [
- 'username' => 'foo',
- 'password' => 'bar%bar',
- 'host' => 'localhost',
- 'database' => 'baz',
- 'driver' => 'mysql',
- 'timezone' => '+00:00',
- ],
- ],
- 'URL with mssql alias driver' => [
- 'mssql://null',
- [
- 'driver' => 'sqlsrv',
- ],
- ],
- 'URL with sqlsrv alias driver' => [
- 'sqlsrv://null',
- [
- 'driver' => 'sqlsrv',
- ],
- ],
- 'URL with mysql alias driver' => [
- 'mysql://null',
- [
- 'driver' => 'mysql',
- ],
- ],
- 'URL with mysql2 alias driver' => [
- 'mysql2://null',
- [
- 'driver' => 'mysql',
- ],
- ],
- 'URL with postgres alias driver' => [
- 'postgres://null',
- [
- 'driver' => 'pgsql',
- ],
- ],
- 'URL with postgresql alias driver' => [
- 'postgresql://null',
- [
- 'driver' => 'pgsql',
- ],
- ],
- 'URL with pgsql alias driver' => [
- 'pgsql://null',
- [
- 'driver' => 'pgsql',
- ],
- ],
- 'URL with sqlite alias driver' => [
- 'sqlite://null',
- [
- 'driver' => 'sqlite',
- ],
- ],
- 'URL with sqlite3 alias driver' => [
- 'sqlite3://null',
- [
- 'driver' => 'sqlite',
- ],
- ],
- 'URL with unknown driver' => [
- 'foo://null',
- [
- 'driver' => 'foo',
- ],
- ],
- 'Sqlite with foreign_key_constraints' => [
- 'sqlite:////absolute/path/to/database.sqlite?foreign_key_constraints=true',
- [
- 'driver' => 'sqlite',
- 'database' => '/absolute/path/to/database.sqlite',
- 'foreign_key_constraints' => true,
- ],
- ],
- 'Most complex example with read and write subarrays all in string' => [
- 'mysql://root:@null/database?read[host][]=192.168.1.1&write[host][]=196.168.1.2&sticky=true&charset=utf8mb4&collation=utf8mb4_unicode_ci&prefix=',
- [
- 'read' => [
- 'host' => ['192.168.1.1'],
- ],
- 'write' => [
- 'host' => ['196.168.1.2'],
- ],
- 'sticky' => true,
- 'driver' => 'mysql',
- 'database' => 'database',
- 'username' => 'root',
- 'password' => '',
- 'charset' => 'utf8mb4',
- 'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
- ],
- ],
- 'Full example from doc that prove that there isn\'t any Breaking Change' => [
- [
- 'driver' => 'mysql',
- 'host' => '127.0.0.1',
- 'port' => '3306',
- 'database' => 'forge',
- 'username' => 'forge',
- 'password' => '',
- 'unix_socket' => '',
- 'charset' => 'utf8mb4',
- 'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
- 'prefix_indexes' => true,
- 'strict' => true,
- 'engine' => null,
- 'options' => ['foo' => 'bar'],
- ],
- [
- 'driver' => 'mysql',
- 'host' => '127.0.0.1',
- 'port' => '3306',
- 'database' => 'forge',
- 'username' => 'forge',
- 'password' => '',
- 'unix_socket' => '',
- 'charset' => 'utf8mb4',
- 'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
- 'prefix_indexes' => true,
- 'strict' => true,
- 'engine' => null,
- 'options' => ['foo' => 'bar'],
- ],
- ],
- 'Full example from doc with url overwriting parameters' => [
- [
- 'url' => 'mysql://root:pass@db/local',
- 'driver' => 'mysql',
- 'host' => '127.0.0.1',
- 'port' => '3306',
- 'database' => 'forge',
- 'username' => 'forge',
- 'password' => '',
- 'unix_socket' => '',
- 'charset' => 'utf8mb4',
- 'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
- 'prefix_indexes' => true,
- 'strict' => true,
- 'engine' => null,
- 'options' => ['foo' => 'bar'],
- ],
- [
- 'driver' => 'mysql',
- 'host' => 'db',
- 'port' => '3306',
- 'database' => 'local',
- 'username' => 'root',
- 'password' => 'pass',
- 'unix_socket' => '',
- 'charset' => 'utf8mb4',
- 'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
- 'prefix_indexes' => true,
- 'strict' => true,
- 'engine' => null,
- 'options' => ['foo' => 'bar'],
- ],
- ],
- 'Redis Example' => [
- [
- // Coming directly from Heroku documentation
- 'url' => 'redis://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111',
- 'host' => '127.0.0.1',
- 'password' => null,
- 'port' => 6379,
- 'database' => 0,
- ],
- [
- 'driver' => 'tcp',
- 'host' => 'ec2-111-1-1-1.compute-1.amazonaws.com',
- 'port' => 111,
- 'database' => 0,
- 'username' => 'h',
- 'password' => 'asdfqwer1234asdf',
- ],
- ],
- 'Redis example where URL ends with "/" and database is not present' => [
- [
- 'url' => 'redis://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111/',
- 'host' => '127.0.0.1',
- 'password' => null,
- 'port' => 6379,
- 'database' => 2,
- ],
- [
- 'driver' => 'tcp',
- 'host' => 'ec2-111-1-1-1.compute-1.amazonaws.com',
- 'port' => 111,
- 'database' => 2,
- 'username' => 'h',
- 'password' => 'asdfqwer1234asdf',
- ],
- ],
- 'Redis Example with tls scheme' => [
- [
- 'url' => 'tls://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111',
- 'host' => '127.0.0.1',
- 'password' => null,
- 'port' => 6379,
- 'database' => 0,
- ],
- [
- 'driver' => 'tls',
- 'host' => 'ec2-111-1-1-1.compute-1.amazonaws.com',
- 'port' => 111,
- 'database' => 0,
- 'username' => 'h',
- 'password' => 'asdfqwer1234asdf',
- ],
- ],
- 'Redis Example with rediss scheme' => [
- [
- 'url' => 'rediss://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111',
- 'host' => '127.0.0.1',
- 'password' => null,
- 'port' => 6379,
- 'database' => 0,
- ],
- [
- 'driver' => 'tls',
- 'host' => 'ec2-111-1-1-1.compute-1.amazonaws.com',
- 'port' => 111,
- 'database' => 0,
- 'username' => 'h',
- 'password' => 'asdfqwer1234asdf',
- ],
- ],
- ];
- }
- }
|