mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-25 11:01:48 +02:00
Merge branch 'develop' of github.com:EXreaction/phpbb3 into ticket/11103
Conflicts: phpBB/install/database_update.php phpBB/styles/prosilver/template/ucp_prefs_personal.html phpBB/styles/subsilver2/template/ucp_prefs_personal.html
This commit is contained in:
@@ -72,6 +72,21 @@ to connect to that database in phpBB.
|
||||
Additionally, you will need to be running the DbUnit fork from
|
||||
https://github.com/phpbb/dbunit/tree/phpbb.
|
||||
|
||||
Redis
|
||||
-----
|
||||
|
||||
In order to run tests for the Redis cache driver, at least one of Redis host
|
||||
or port must be specified in test configuration. This can be done via
|
||||
test_config.php as follows:
|
||||
|
||||
<?php
|
||||
$phpbb_redis_host = 'localhost';
|
||||
$phpbb_redis_port = 6379;
|
||||
|
||||
Or via environment variables as follows:
|
||||
|
||||
$ PHPBB_TEST_REDIS_HOST=localhost PHPBB_TEST_REDIS_PORT=6379 phpunit
|
||||
|
||||
Running
|
||||
=======
|
||||
|
||||
|
53
tests/cache/apc_driver_test.php
vendored
Normal file
53
tests/cache/apc_driver_test.php
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
// Important: apc.enable_cli=1 must be in php.ini.
|
||||
// http://forums.devshed.com/php-development-5/apc-problem-561290.html
|
||||
// http://php.net/manual/en/apc.configuration.php
|
||||
|
||||
require_once dirname(__FILE__) . '/common_test_case.php';
|
||||
|
||||
class phpbb_cache_apc_driver_test extends phpbb_cache_common_test_case
|
||||
{
|
||||
protected static $config;
|
||||
protected $driver;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
if (!extension_loaded('apc'))
|
||||
{
|
||||
self::markTestSkipped('APC extension is not loaded');
|
||||
}
|
||||
|
||||
$php_ini = new phpbb_php_ini;
|
||||
|
||||
if (!$php_ini->get_bool('apc.enabled'))
|
||||
{
|
||||
self::markTestSkipped('APC is not enabled. Make sure apc.enabled=1 in php.ini');
|
||||
}
|
||||
|
||||
if (PHP_SAPI == 'cli' && !$php_ini->get_bool('apc.enable_cli'))
|
||||
{
|
||||
self::markTestSkipped('APC is not enabled for CLI. Set apc.enable_cli=1 in php.ini');
|
||||
}
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->driver = new phpbb_cache_driver_apc;
|
||||
$this->driver->purge();
|
||||
}
|
||||
}
|
109
tests/cache/cache_test.php
vendored
109
tests/cache/cache_test.php
vendored
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_cache_test extends phpbb_database_test_case
|
||||
{
|
||||
private $cache_dir;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->cache_dir = dirname(__FILE__) . '/../tmp/cache/';
|
||||
}
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
if (file_exists($this->cache_dir))
|
||||
{
|
||||
// cache directory possibly left after aborted
|
||||
// or failed run earlier
|
||||
$this->remove_cache_dir();
|
||||
}
|
||||
$this->create_cache_dir();
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (file_exists($this->cache_dir))
|
||||
{
|
||||
$this->remove_cache_dir();
|
||||
}
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
private function create_cache_dir()
|
||||
{
|
||||
$this->get_test_case_helpers()->makedirs($this->cache_dir);
|
||||
}
|
||||
|
||||
private function remove_cache_dir()
|
||||
{
|
||||
$iterator = new DirectoryIterator($this->cache_dir);
|
||||
foreach ($iterator as $file)
|
||||
{
|
||||
if ($file != '.' && $file != '..')
|
||||
{
|
||||
unlink($this->cache_dir . '/' . $file);
|
||||
}
|
||||
}
|
||||
rmdir($this->cache_dir);
|
||||
}
|
||||
|
||||
public function test_cache_driver_file()
|
||||
{
|
||||
$driver = new phpbb_cache_driver_file($this->cache_dir);
|
||||
$driver->put('test_key', 'test_value');
|
||||
$driver->save();
|
||||
|
||||
$this->assertEquals(
|
||||
'test_value',
|
||||
$driver->get('test_key'),
|
||||
'File ACM put and get'
|
||||
);
|
||||
}
|
||||
|
||||
public function test_cache_sql()
|
||||
{
|
||||
$driver = new phpbb_cache_driver_file($this->cache_dir);
|
||||
|
||||
global $db, $cache;
|
||||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_cache_service($driver);
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
$first_result = $db->sql_fetchrow($result);
|
||||
|
||||
$this->assertFileExists($this->cache_dir . 'sql_' . md5(preg_replace('/[\n\r\s\t]+/', ' ', $sql)) . '.php');
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
|
||||
$this->assertEquals($first_result, $db->sql_fetchrow($result));
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'bar'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
|
||||
$this->assertNotEquals($first_result, $db->sql_fetchrow($result));
|
||||
|
||||
$db->sql_close();
|
||||
}
|
||||
}
|
97
tests/cache/common_test_case.php
vendored
Normal file
97
tests/cache/common_test_case.php
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
abstract class phpbb_cache_common_test_case extends phpbb_database_test_case
|
||||
{
|
||||
public function test_get_put_exists()
|
||||
{
|
||||
$this->assertFalse($this->driver->_exists('test_key'));
|
||||
$this->assertSame(false, $this->driver->get('test_key'));
|
||||
|
||||
$this->driver->put('test_key', 'test_value');
|
||||
|
||||
$this->assertTrue($this->driver->_exists('test_key'));
|
||||
$this->assertEquals(
|
||||
'test_value',
|
||||
$this->driver->get('test_key'),
|
||||
'File ACM put and get'
|
||||
);
|
||||
}
|
||||
|
||||
public function test_purge()
|
||||
{
|
||||
$this->driver->put('test_key', 'test_value');
|
||||
|
||||
$this->assertEquals(
|
||||
'test_value',
|
||||
$this->driver->get('test_key'),
|
||||
'File ACM put and get'
|
||||
);
|
||||
|
||||
$this->driver->purge();
|
||||
|
||||
$this->assertSame(false, $this->driver->get('test_key'));
|
||||
}
|
||||
|
||||
public function test_destroy()
|
||||
{
|
||||
$this->driver->put('first_key', 'first_value');
|
||||
$this->driver->put('second_key', 'second_value');
|
||||
|
||||
$this->assertEquals(
|
||||
'first_value',
|
||||
$this->driver->get('first_key')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'second_value',
|
||||
$this->driver->get('second_key')
|
||||
);
|
||||
|
||||
$this->driver->destroy('first_key');
|
||||
|
||||
$this->assertFalse($this->driver->_exists('first_key'));
|
||||
$this->assertEquals(
|
||||
'second_value',
|
||||
$this->driver->get('second_key')
|
||||
);
|
||||
}
|
||||
|
||||
public function test_cache_sql()
|
||||
{
|
||||
global $db, $cache;
|
||||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_cache_service($this->driver);
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
|
||||
$result = $db->sql_query($sql, 300);
|
||||
$first_result = $db->sql_fetchrow($result);
|
||||
$expected = array('config_name' => 'foo', 'config_value' => '23', 'is_dynamic' => 0);
|
||||
$this->assertEquals($expected, $first_result);
|
||||
|
||||
$sql = 'DELETE FROM phpbb_config';
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
|
||||
$this->assertEquals($expected, $db->sql_fetchrow($result));
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$no_cache_result = $db->sql_fetchrow($result);
|
||||
$this->assertSame(false, $no_cache_result);
|
||||
|
||||
$db->sql_close();
|
||||
}
|
||||
}
|
69
tests/cache/file_driver_test.php
vendored
Normal file
69
tests/cache/file_driver_test.php
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2010 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_test_case.php';
|
||||
|
||||
class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case
|
||||
{
|
||||
private $cache_dir;
|
||||
protected $driver;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->cache_dir = dirname(__FILE__) . '/../tmp/cache/';
|
||||
}
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
if (file_exists($this->cache_dir))
|
||||
{
|
||||
// cache directory possibly left after aborted
|
||||
// or failed run earlier
|
||||
$this->remove_cache_dir();
|
||||
}
|
||||
$this->create_cache_dir();
|
||||
|
||||
$this->driver = new phpbb_cache_driver_file($this->cache_dir);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (file_exists($this->cache_dir))
|
||||
{
|
||||
$this->remove_cache_dir();
|
||||
}
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
private function create_cache_dir()
|
||||
{
|
||||
$this->get_test_case_helpers()->makedirs($this->cache_dir);
|
||||
}
|
||||
|
||||
private function remove_cache_dir()
|
||||
{
|
||||
$iterator = new DirectoryIterator($this->cache_dir);
|
||||
foreach ($iterator as $file)
|
||||
{
|
||||
if ($file != '.' && $file != '..')
|
||||
{
|
||||
unlink($this->cache_dir . '/' . $file);
|
||||
}
|
||||
}
|
||||
rmdir($this->cache_dir);
|
||||
}
|
||||
}
|
74
tests/cache/null_driver_test.php
vendored
Normal file
74
tests/cache/null_driver_test.php
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_cache_null_driver_test extends phpbb_database_test_case
|
||||
{
|
||||
protected $driver;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->driver = new phpbb_cache_driver_null;
|
||||
}
|
||||
|
||||
public function test_get_put()
|
||||
{
|
||||
$this->assertSame(false, $this->driver->get('key'));
|
||||
|
||||
$this->driver->put('key', 'value');
|
||||
|
||||
// null driver does not cache
|
||||
$this->assertSame(false, $this->driver->get('key'));
|
||||
}
|
||||
|
||||
public function test_purge()
|
||||
{
|
||||
// does nothing
|
||||
$this->driver->purge();
|
||||
}
|
||||
|
||||
public function test_destroy()
|
||||
{
|
||||
// does nothing
|
||||
$this->driver->destroy('foo');
|
||||
}
|
||||
|
||||
public function test_cache_sql()
|
||||
{
|
||||
global $db, $cache;
|
||||
$db = $this->new_dbal();
|
||||
$cache = new phpbb_cache_service($this->driver);
|
||||
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
$first_result = $db->sql_fetchrow($result);
|
||||
$expected = array('config_name' => 'foo', 'config_value' => '23', 'is_dynamic' => 0);
|
||||
$this->assertEquals($expected, $first_result);
|
||||
|
||||
$sql = 'DELETE FROM phpbb_config';
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
// As null cache driver does not actually cache,
|
||||
// this should return no results
|
||||
$sql = "SELECT * FROM phpbb_config
|
||||
WHERE config_name = 'foo'";
|
||||
$result = $db->sql_query($sql, 300);
|
||||
|
||||
$this->assertSame(false, $db->sql_fetchrow($result));
|
||||
|
||||
$db->sql_close();
|
||||
}
|
||||
}
|
49
tests/cache/redis_driver_test.php
vendored
Normal file
49
tests/cache/redis_driver_test.php
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_test_case.php';
|
||||
|
||||
class phpbb_cache_redis_driver_test extends phpbb_cache_common_test_case
|
||||
{
|
||||
protected static $config;
|
||||
protected $driver;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml');
|
||||
}
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
if (!extension_loaded('redis'))
|
||||
{
|
||||
self::markTestSkipped('redis extension is not loaded');
|
||||
}
|
||||
|
||||
$config = phpbb_test_case_helpers::get_test_config();
|
||||
if (isset($config['redis_host']) || isset($config['redis_port']))
|
||||
{
|
||||
$host = isset($config['redis_host']) ? $config['redis_host'] : 'localhost';
|
||||
$port = isset($config['redis_port']) ? $config['redis_port'] : 6379;
|
||||
self::$config = array('host' => $host, 'port' => $port);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::markTestSkipped('Test redis host/port is not specified');
|
||||
}
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->driver = new phpbb_cache_driver_redis(self::$config['host'], self::$config['port']);
|
||||
$this->driver->purge();
|
||||
}
|
||||
}
|
43
tests/dbal/connect_test.php
Normal file
43
tests/dbal/connect_test.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_dbal_connect_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/../fixtures/empty.xml');
|
||||
}
|
||||
|
||||
public function test_failing_connect()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$config = $this->get_database_config();
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/db/' . $config['dbms'] . '.php';
|
||||
$dbal = 'dbal_' . $config['dbms'];
|
||||
$db = new $dbal();
|
||||
|
||||
// Failure to connect results in a trigger_error call in dbal.
|
||||
// phpunit converts triggered errors to exceptions.
|
||||
// In particular there should be no fatals here.
|
||||
try
|
||||
{
|
||||
$db->sql_connect($config['dbhost'], 'phpbbogus', 'phpbbogus', 'phpbbogus', $config['dbport']);
|
||||
$this->assertFalse(true);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
// should have a legitimate message
|
||||
$this->assertNotEmpty($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
55
tests/dbal/write_sequence_test.php
Normal file
55
tests/dbal/write_sequence_test.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
|
||||
|
||||
class phpbb_dbal_write_sequence_test extends phpbb_database_test_case
|
||||
{
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/three_users.xml');
|
||||
}
|
||||
|
||||
static public function write_sequence_data()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
'ticket/11219',
|
||||
4,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider write_sequence_data
|
||||
*/
|
||||
public function test_write_sequence($username, $expected)
|
||||
{
|
||||
$db = $this->new_dbal();
|
||||
|
||||
$sql = 'INSERT INTO phpbb_users ' . $db->sql_build_array('INSERT', array(
|
||||
'username' => $username,
|
||||
'username_clean' => $username,
|
||||
'user_permissions' => '',
|
||||
'user_sig' => '',
|
||||
'user_occ' => '',
|
||||
'user_interests' => '',
|
||||
));
|
||||
$db->sql_query($sql);
|
||||
|
||||
$this->assertEquals($expected, $db->sql_nextid());
|
||||
|
||||
$sql = "SELECT user_id
|
||||
FROM phpbb_users
|
||||
WHERE username_clean = '" . $db->sql_escape($username) . "'";
|
||||
$result = $db->sql_query_limit($sql, 1);
|
||||
|
||||
$this->assertEquals($expected, $db->sql_fetchfield('user_id'));
|
||||
}
|
||||
}
|
9
tests/fixtures/empty.xml
vendored
Normal file
9
tests/fixtures/empty.xml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dataset>
|
||||
<table name="phpbb_sessions">
|
||||
<column>session_id</column>
|
||||
<column>session_user_id</column>
|
||||
<column>session_ip</column>
|
||||
<column>session_browser</column>
|
||||
</table>
|
||||
</dataset>
|
@@ -64,6 +64,9 @@ class phpbb_functional_fileupload_form_test extends phpbb_functional_test_case
|
||||
public function test_valid_file()
|
||||
{
|
||||
$crawler = $this->upload_file('valid.jpg', 'image/jpeg');
|
||||
$this->assert_response_success();
|
||||
// ensure there was no error message rendered
|
||||
$this->assertNotContains('<h2>' . $this->lang('INFORMATION') . '</h2>', $this->client->getResponse()->getContent());
|
||||
$this->assertContains($this->lang('POSTED_ATTACHMENTS'), $crawler->filter('#postform h3')->eq(1)->text());
|
||||
}
|
||||
}
|
||||
|
74
tests/lint_test.php
Normal file
74
tests/lint_test.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_lint_test extends phpbb_test_case
|
||||
{
|
||||
static protected $exclude;
|
||||
|
||||
static public function setUpBeforeClass()
|
||||
{
|
||||
$output = array();
|
||||
$status = 1;
|
||||
exec('(php -v) 2>&1', $output, $status);
|
||||
if ($status)
|
||||
{
|
||||
$output = implode("\n", $output);
|
||||
self::markTestSkipped("php is not in PATH or broken: $output");
|
||||
}
|
||||
|
||||
self::$exclude = array(
|
||||
// PHP Fatal error: Cannot declare class Container because the name is already in use in /var/www/projects/phpbb3/tests/../phpBB/vendor/symfony/dependency-injection/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services1-1.php on line 20
|
||||
// https://gist.github.com/e003913ffd493da63cbc
|
||||
dirname(__FILE__) . '/../phpBB/vendor',
|
||||
);
|
||||
}
|
||||
|
||||
public function test_lint()
|
||||
{
|
||||
if (version_compare(PHP_VERSION, '5.3.0', '<'))
|
||||
{
|
||||
$this->markTestSkipped('phpBB uses PHP 5.3 syntax in some files, linting on PHP < 5.3 will fail');
|
||||
}
|
||||
|
||||
$root = dirname(__FILE__) . '/..';
|
||||
$this->check($root);
|
||||
}
|
||||
|
||||
protected function check($root)
|
||||
{
|
||||
$dh = opendir($root);
|
||||
while (($filename = readdir($dh)) !== false)
|
||||
{
|
||||
if ($filename == '.' || $filename == '..' || $filename == 'git')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$path = $root . '/' . $filename;
|
||||
// skip symlinks to avoid infinite loops
|
||||
if (is_link($path))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (is_dir($path) && !in_array($path, self::$exclude))
|
||||
{
|
||||
$this->check($path);
|
||||
}
|
||||
else if (substr($filename, strlen($filename)-4) == '.php')
|
||||
{
|
||||
// assume php binary is called php and it is in PATH
|
||||
$cmd = '(php -l ' . escapeshellarg($path) . ') 2>&1';
|
||||
$output = array();
|
||||
$status = 1;
|
||||
exec($cmd, $output, $status);
|
||||
$output = implode("\n", $output);
|
||||
$this->assertEquals(0, $status, "php -l failed for $path:\n$output");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
109
tests/lock/flock_test.php
Normal file
109
tests/lock/flock_test.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_lock_flock_test extends phpbb_test_case
|
||||
{
|
||||
public function test_lock()
|
||||
{
|
||||
$path = __DIR__ . '/../tmp/precious';
|
||||
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$lock->release();
|
||||
}
|
||||
|
||||
public function test_consecutive_locking()
|
||||
{
|
||||
$path = __DIR__ . '/../tmp/precious';
|
||||
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$lock->release();
|
||||
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$lock->release();
|
||||
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
$lock->release();
|
||||
}
|
||||
|
||||
/* This hangs the process.
|
||||
public function test_concurrent_locking_fail()
|
||||
{
|
||||
$path = __DIR__ . '/../tmp/precious';
|
||||
|
||||
$lock1 = new phpbb_lock_flock($path);
|
||||
$ok = $lock1->acquire();
|
||||
$this->assertTrue($ok);
|
||||
|
||||
$lock2 = new phpbb_lock_flock($path);
|
||||
$ok = $lock2->acquire();
|
||||
$this->assertFalse($ok);
|
||||
|
||||
$lock->release();
|
||||
$ok = $lock2->acquire();
|
||||
$this->assertTrue($ok);
|
||||
}
|
||||
*/
|
||||
|
||||
public function test_concurrent_locking()
|
||||
{
|
||||
if (!function_exists('pcntl_fork'))
|
||||
{
|
||||
$this->markTestSkipped('pcntl extension and pcntl_fork are required for this test');
|
||||
}
|
||||
|
||||
$path = __DIR__ . '/../tmp/precious';
|
||||
|
||||
$pid = pcntl_fork();
|
||||
if ($pid)
|
||||
{
|
||||
// parent
|
||||
// wait 0.5 s, acquire the lock, note how long it took
|
||||
sleep(1);
|
||||
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$start = time();
|
||||
$ok = $lock->acquire();
|
||||
$delta = time() - $start;
|
||||
$this->assertTrue($ok);
|
||||
$this->assertGreaterThan(0.5, $delta, 'First lock acquired too soon');
|
||||
|
||||
$lock->release();
|
||||
|
||||
// acquire again, this should be instantaneous
|
||||
$start = time();
|
||||
$ok = $lock->acquire();
|
||||
$delta = time() - $start;
|
||||
$this->assertTrue($ok);
|
||||
$this->assertLessThan(0.1, $delta, 'Second lock not acquired instantaneously');
|
||||
|
||||
// reap the child
|
||||
$status = null;
|
||||
pcntl_waitpid($pid, $status);
|
||||
}
|
||||
else
|
||||
{
|
||||
// child
|
||||
// immediately acquire the lock and sleep for 2 s
|
||||
$lock = new phpbb_lock_flock($path);
|
||||
$ok = $lock->acquire();
|
||||
$this->assertTrue($ok);
|
||||
sleep(2);
|
||||
$lock->release();
|
||||
|
||||
// and go away silently
|
||||
pcntl_exec('/usr/bin/env', array('true'));
|
||||
}
|
||||
}
|
||||
}
|
@@ -123,6 +123,7 @@ class phpbb_mock_cache implements phpbb_cache_driver_interface
|
||||
}
|
||||
public function sql_save($query, $query_result, $ttl)
|
||||
{
|
||||
return $query_result;
|
||||
}
|
||||
public function sql_exists($query_id)
|
||||
{
|
||||
|
106
tests/search/common_test_case.php
Normal file
106
tests/search/common_test_case.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../test_framework/phpbb_search_test_case.php';
|
||||
|
||||
abstract class phpbb_search_common_test_case extends phpbb_search_test_case
|
||||
{
|
||||
public function keywords()
|
||||
{
|
||||
return array(
|
||||
// keywords
|
||||
// terms
|
||||
// ok
|
||||
// split words
|
||||
// common words
|
||||
array(
|
||||
'fooo',
|
||||
'all',
|
||||
true,
|
||||
array('fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'fooo baar',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar'),
|
||||
array(),
|
||||
),
|
||||
// leading, trailing and multiple spaces
|
||||
array(
|
||||
' fooo baar ',
|
||||
'all',
|
||||
true,
|
||||
array('fooo', 'baar'),
|
||||
array(),
|
||||
),
|
||||
// words too short
|
||||
array(
|
||||
'f',
|
||||
'all',
|
||||
false,
|
||||
null,
|
||||
// short words count as "common" words
|
||||
array('f'),
|
||||
),
|
||||
array(
|
||||
'f o o',
|
||||
'all',
|
||||
false,
|
||||
null,
|
||||
array('f', 'o', 'o'),
|
||||
),
|
||||
array(
|
||||
'f -o -o',
|
||||
'all',
|
||||
false,
|
||||
null,
|
||||
array('f', '-o', '-o'),
|
||||
),
|
||||
array(
|
||||
'fooo -baar',
|
||||
'all',
|
||||
true,
|
||||
array('-baar', 'fooo'),
|
||||
array(),
|
||||
),
|
||||
// all negative
|
||||
array(
|
||||
'-fooo',
|
||||
'all',
|
||||
true,
|
||||
array('-fooo'),
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'-fooo -baar',
|
||||
'all',
|
||||
true,
|
||||
array('-fooo', '-baar'),
|
||||
array(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider keywords
|
||||
*/
|
||||
public function test_split_keywords($keywords, $terms, $ok, $split_words, $common)
|
||||
{
|
||||
$rv = $this->search->split_keywords($keywords, $terms);
|
||||
$this->assertEquals($ok, $rv);
|
||||
if ($ok)
|
||||
{
|
||||
// only check criteria if the search is going to be performed
|
||||
$this->assert_array_content_equals($split_words, $this->search->get_split_words());
|
||||
}
|
||||
$this->assert_array_content_equals($common, $this->search->get_common_words());
|
||||
}
|
||||
}
|
40
tests/search/mysql_test.php
Normal file
40
tests/search/mysql_test.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_test_case.php';
|
||||
|
||||
class phpbb_search_mysql_test extends phpbb_search_common_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $search;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/../fixtures/empty.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $config, $user, $cache;
|
||||
|
||||
parent::setUp();
|
||||
|
||||
// dbal uses cache
|
||||
$cache = new phpbb_cache_service(new phpbb_cache_driver_null);
|
||||
|
||||
// set config values
|
||||
$config['fulltext_mysql_min_word_len'] = 4;
|
||||
$config['fulltext_mysql_max_word_len'] = 254;
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$error = null;
|
||||
$class = self::get_search_wrapper('phpbb_search_fulltext_mysql');
|
||||
$this->search = new $class($error, $phpbb_root_path, $phpEx, null, $config, $this->db, $user);
|
||||
}
|
||||
}
|
@@ -7,24 +7,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
function phpbb_search_wrapper($class)
|
||||
{
|
||||
$wrapped = $class . '_wrapper';
|
||||
if (!class_exists($wrapped))
|
||||
{
|
||||
$code = "
|
||||
class $wrapped extends $class
|
||||
{
|
||||
public function get_must_contain_ids() { return \$this->must_contain_ids; }
|
||||
public function get_must_not_contain_ids() { return \$this->must_not_contain_ids; }
|
||||
}
|
||||
";
|
||||
eval($code);
|
||||
}
|
||||
return $wrapped;
|
||||
}
|
||||
require_once dirname(__FILE__) . '/../test_framework/phpbb_search_test_case.php';
|
||||
|
||||
class phpbb_search_native_test extends phpbb_database_test_case
|
||||
class phpbb_search_native_test extends phpbb_search_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $search;
|
||||
@@ -41,19 +26,14 @@ class phpbb_search_native_test extends phpbb_database_test_case
|
||||
parent::setUp();
|
||||
|
||||
// dbal uses cache
|
||||
$cache = new phpbb_cache_driver_null;
|
||||
$cache = new phpbb_cache_service(new phpbb_cache_driver_null);
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$error = null;
|
||||
$class = phpbb_search_wrapper('phpbb_search_fulltext_native');
|
||||
$class = self::get_search_wrapper('phpbb_search_fulltext_native');
|
||||
$this->search = new $class($error, $phpbb_root_path, $phpEx, null, $config, $this->db, $user);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function keywords()
|
||||
{
|
||||
return array(
|
||||
@@ -106,6 +86,14 @@ class phpbb_search_native_test extends phpbb_database_test_case
|
||||
null,
|
||||
array('f', 'o', 'o'),
|
||||
),
|
||||
array(
|
||||
'f -o -o',
|
||||
'all',
|
||||
false,
|
||||
null,
|
||||
null,
|
||||
array('f', 'o', 'o'),
|
||||
),
|
||||
array(
|
||||
'foo -bar',
|
||||
'all',
|
||||
@@ -167,20 +155,4 @@ class phpbb_search_native_test extends phpbb_database_test_case
|
||||
}
|
||||
$this->assert_array_content_equals($common, $this->search->get_common_words());
|
||||
}
|
||||
|
||||
public function assert_array_content_equals($one, $two)
|
||||
{
|
||||
// http://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important
|
||||
// but one array_diff is not enough!
|
||||
if (sizeof(array_diff($one, $two)) || sizeof(array_diff($two, $one)))
|
||||
{
|
||||
// get a nice error message
|
||||
$this->assertEquals($one, $two);
|
||||
}
|
||||
else
|
||||
{
|
||||
// increase assertion count
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
40
tests/search/postgres_test.php
Normal file
40
tests/search/postgres_test.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/common_test_case.php';
|
||||
|
||||
class phpbb_search_postgres_test extends phpbb_search_common_test_case
|
||||
{
|
||||
protected $db;
|
||||
protected $search;
|
||||
|
||||
public function getDataSet()
|
||||
{
|
||||
return $this->createXMLDataSet(dirname(__FILE__) . '/../fixtures/empty.xml');
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
global $phpbb_root_path, $phpEx, $config, $user, $cache;
|
||||
|
||||
parent::setUp();
|
||||
|
||||
// dbal uses cache
|
||||
$cache = new phpbb_cache_service(new phpbb_cache_driver_null);
|
||||
|
||||
// set config values
|
||||
$config['fulltext_postgres_min_word_len'] = 4;
|
||||
$config['fulltext_postgres_max_word_len'] = 254;
|
||||
|
||||
$this->db = $this->new_dbal();
|
||||
$error = null;
|
||||
$class = self::get_search_wrapper('phpbb_search_fulltext_postgres');
|
||||
$this->search = new $class($error, $phpbb_root_path, $phpEx, null, $config, $this->db, $user);
|
||||
}
|
||||
}
|
@@ -13,6 +13,8 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
|
||||
protected $test_case_helpers;
|
||||
|
||||
protected $fixture_xml_data;
|
||||
|
||||
public function __construct($name = NULL, array $data = array(), $dataName = '')
|
||||
{
|
||||
parent::__construct($name, $data, $dataName);
|
||||
@@ -28,6 +30,20 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
);
|
||||
}
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
// Resynchronise tables if a fixture was loaded
|
||||
if (isset($this->fixture_xml_data))
|
||||
{
|
||||
$config = $this->get_database_config();
|
||||
$manager = $this->create_connection_manager($config);
|
||||
$manager->connect();
|
||||
$manager->post_setup_synchronisation($this->fixture_xml_data);
|
||||
}
|
||||
}
|
||||
|
||||
public function createXMLDataSet($path)
|
||||
{
|
||||
$db_config = $this->get_database_config();
|
||||
@@ -47,7 +63,9 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
$path = $meta_data['uri'];
|
||||
}
|
||||
|
||||
return parent::createXMLDataSet($path);
|
||||
$this->fixture_xml_data = parent::createXMLDataSet($path);
|
||||
|
||||
return $this->fixture_xml_data;
|
||||
}
|
||||
|
||||
public function get_test_case_helpers()
|
||||
@@ -141,4 +159,20 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
||||
{
|
||||
return $matches[1] . strtoupper($matches[2]) . $matches[3];
|
||||
}
|
||||
|
||||
public function assert_array_content_equals($one, $two)
|
||||
{
|
||||
// http://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important
|
||||
// but one array_diff is not enough!
|
||||
if (sizeof(array_diff($one, $two)) || sizeof(array_diff($two, $one)))
|
||||
{
|
||||
// get a nice error message
|
||||
$this->assertEquals($one, $two);
|
||||
}
|
||||
else
|
||||
{
|
||||
// increase assertion count
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -426,4 +426,111 @@ class phpbb_database_test_connection_manager
|
||||
$this->pdo->exec($query);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs synchronisations on the database after a fixture has been loaded
|
||||
*
|
||||
* @param PHPUnit_Extensions_Database_DataSet_XmlDataSet $xml_data_set Information about the tables contained within the loaded fixture
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
public function post_setup_synchronisation($xml_data_set)
|
||||
{
|
||||
$this->ensure_connected(__METHOD__);
|
||||
$queries = array();
|
||||
|
||||
// Get escaped versions of the table names used in the fixture
|
||||
$table_names = array_map(array($this->pdo, 'PDO::quote'), $xml_data_set->getTableNames());
|
||||
|
||||
switch ($this->config['dbms'])
|
||||
{
|
||||
case 'oracle':
|
||||
// Get all of the information about the sequences
|
||||
$sql = "SELECT t.table_name, tc.column_name, d.referenced_name as sequence_name, s.increment_by, s.min_value
|
||||
FROM USER_TRIGGERS t
|
||||
JOIN USER_DEPENDENCIES d ON (d.name = t.trigger_name)
|
||||
JOIN USER_TRIGGER_COLS tc ON (tc.trigger_name = t.trigger_name)
|
||||
JOIN USER_SEQUENCES s ON (s.sequence_name = d.referenced_name)
|
||||
WHERE d.referenced_type = 'SEQUENCE'
|
||||
AND d.type = 'TRIGGER'
|
||||
AND t.table_name IN (" . implode(', ', array_map('strtoupper', $table_names)) . ')';
|
||||
|
||||
$result = $this->pdo->query($sql);
|
||||
|
||||
while ($row = $result->fetch(PDO::FETCH_ASSOC))
|
||||
{
|
||||
// Get the current max value of the table
|
||||
$sql = "SELECT MAX({$row['COLUMN_NAME']}) AS max FROM {$row['TABLE_NAME']}";
|
||||
$max_result = $this->pdo->query($sql);
|
||||
$max_row = $max_result->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!$max_row)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$max_val = (int) $max_row['MAX'];
|
||||
$max_val++;
|
||||
|
||||
/**
|
||||
* This is not the "proper" way, but the proper way does not allow you to completely reset
|
||||
* tables with no rows since you have to select the next value to make the change go into effect.
|
||||
* You would have to go past the minimum value to set it correctly, but that's illegal.
|
||||
* Since we have no objects attached to our sequencers (triggers aren't attached), this works fine.
|
||||
*/
|
||||
$queries[] = 'DROP SEQUENCE ' . $row['SEQUENCE_NAME'];
|
||||
$queries[] = "CREATE SEQUENCE {$row['SEQUENCE_NAME']}
|
||||
MINVALUE {$row['MIN_VALUE']}
|
||||
INCREMENT BY {$row['INCREMENT_BY']}
|
||||
START WITH $max_val";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'postgres':
|
||||
// Get the sequences attached to the tables
|
||||
$sql = 'SELECT column_name, table_name FROM information_schema.columns
|
||||
WHERE table_name IN (' . implode(', ', $table_names) . ")
|
||||
AND strpos(column_default, '_seq''::regclass') > 0";
|
||||
$result = $this->pdo->query($sql);
|
||||
|
||||
$setval_queries = array();
|
||||
while ($row = $result->fetch(PDO::FETCH_ASSOC))
|
||||
{
|
||||
// Get the columns used in the fixture for this table
|
||||
$column_names = $xml_data_set->getTableMetaData($row['table_name'])->getColumns();
|
||||
|
||||
// Skip sequences that weren't specified in the fixture
|
||||
if (!in_array($row['column_name'], $column_names))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the old value if it exists, or use 1 if it doesn't
|
||||
$sql = "SELECT COALESCE((SELECT MAX({$row['column_name']}) + 1 FROM {$row['table_name']}), 1) AS val";
|
||||
$result_max = $this->pdo->query($sql);
|
||||
$row_max = $result_max->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($row_max)
|
||||
{
|
||||
$seq_name = $this->pdo->quote($row['table_name'] . '_seq');
|
||||
$max_val = (int) $row_max['val'];
|
||||
|
||||
// The last parameter is false so that the system doesn't increment it again
|
||||
$setval_queries[] = "SETVAL($seq_name, $max_val, false)";
|
||||
}
|
||||
}
|
||||
|
||||
// Combine all of the SETVALs into one query
|
||||
if (sizeof($setval_queries))
|
||||
{
|
||||
$queries[] = 'SELECT ' . implode(', ', $setval_queries);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
foreach ($queries as $query)
|
||||
{
|
||||
$this->pdo->exec($query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
29
tests/test_framework/phpbb_search_test_case.php
Normal file
29
tests/test_framework/phpbb_search_test_case.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2012 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||
*
|
||||
*/
|
||||
|
||||
abstract class phpbb_search_test_case extends phpbb_database_test_case
|
||||
{
|
||||
static protected function get_search_wrapper($class)
|
||||
{
|
||||
$wrapped = $class . '_wrapper';
|
||||
if (!class_exists($wrapped))
|
||||
{
|
||||
$code = "
|
||||
class $wrapped extends $class
|
||||
{
|
||||
public function get_must_contain_ids() { return \$this->must_contain_ids; }
|
||||
public function get_must_not_contain_ids() { return \$this->must_not_contain_ids; }
|
||||
public function get_split_words() { return \$this->split_words; }
|
||||
}
|
||||
";
|
||||
eval($code);
|
||||
}
|
||||
return $wrapped;
|
||||
}
|
||||
}
|
@@ -91,6 +91,15 @@ class phpbb_test_case_helpers
|
||||
{
|
||||
$config['phpbb_functional_url'] = $phpbb_functional_url;
|
||||
}
|
||||
|
||||
if (isset($phpbb_redis_host))
|
||||
{
|
||||
$config['redis_host'] = $phpbb_redis_host;
|
||||
}
|
||||
if (isset($phpbb_redis_port))
|
||||
{
|
||||
$config['redis_port'] = $phpbb_redis_port;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SERVER['PHPBB_TEST_DBMS']))
|
||||
@@ -113,6 +122,16 @@ class phpbb_test_case_helpers
|
||||
));
|
||||
}
|
||||
|
||||
if (isset($_SERVER['PHPBB_TEST_REDIS_HOST']))
|
||||
{
|
||||
$config['redis_host'] = $_SERVER['PHPBB_TEST_REDIS_HOST'];
|
||||
}
|
||||
|
||||
if (isset($_SERVER['PHPBB_TEST_REDIS_PORT']))
|
||||
{
|
||||
$config['redis_port'] = $_SERVER['PHPBB_TEST_REDIS_PORT'];
|
||||
}
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user