mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 12:40:01 +01:00
Merge branch 'wip-MDL-38247-m25' of git://github.com/samhemelryk/moodle
This commit is contained in:
commit
caa5bcea00
11
cache/README.md
vendored
11
cache/README.md
vendored
@ -226,3 +226,14 @@ The first method is designed to be used when you have a single known definition
|
||||
The second method is a lot more intensive for the system. There are defined invalidation events that definitions can "subscribe" to (through the definitions invalidationevents option).
|
||||
When you invalidate by event the cache API finds all of the definitions that subscribe to the event, it then loads the stores for each of those definitions and purges the keys from each store.
|
||||
This is obviously a recursive, and therefore, intense process.
|
||||
|
||||
### Unit tests
|
||||
Both the cache API and the cache stores have unit tests.
|
||||
Please be aware that several of the cache stores require configuration in order to be able operate in the unit tests.
|
||||
Tests for stores requiring configuration that havn't been configured will be skipped.
|
||||
All configuration is done in your sites config.php through definitions.
|
||||
The following snippet illustates how to configure the three core cache stores that require configuration.
|
||||
|
||||
define('TEST_CACHESTORE_MEMCACHE_TESTSERVERS', '127.0.0.1:11211');
|
||||
define('TEST_CACHESTORE_MEMCACHED_TESTSERVERS', '127.0.0.1:11211');
|
||||
define('TEST_CACHESTORE_MONGODB_TESTSERVER', 'mongodb://localhost:27017');
|
47
cache/stores/file/tests/file_test.php
vendored
Normal file
47
cache/stores/file/tests/file_test.php
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* File unit tests
|
||||
*
|
||||
* @package cachestore_file
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/file/lib.php');
|
||||
|
||||
/**
|
||||
* File unit test class.
|
||||
*
|
||||
* @package cachestore_file
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_file_test extends cachestore_tests {
|
||||
/**
|
||||
* Returns the file class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_file';
|
||||
}
|
||||
}
|
62
cache/stores/memcache/tests/memcache_test.php
vendored
Normal file
62
cache/stores/memcache/tests/memcache_test.php
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Memcache unit tests.
|
||||
*
|
||||
* If you wish to use these unit tests all you need to do is add the following definition to
|
||||
* your config.php file.
|
||||
*
|
||||
* define('TEST_CACHESTORE_MEMCACHE_TESTSERVERS', '127.0.0.1:11211');
|
||||
*
|
||||
* @package cachestore_memcache
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/memcache/lib.php');
|
||||
|
||||
/**
|
||||
* Memcache unit test class.
|
||||
*
|
||||
* @package cachestore_memcache
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_memcache_test extends cachestore_tests {
|
||||
/**
|
||||
* Prepare to run tests.
|
||||
*/
|
||||
public function setUp() {
|
||||
if (defined('TEST_CACHESTORE_MEMCACHE_TESTSERVERS')) {
|
||||
set_config('testservers', TEST_CACHESTORE_MEMCACHE_TESTSERVERS, 'cachestore_memcache');
|
||||
$this->resetAfterTest();
|
||||
}
|
||||
parent::setUp();
|
||||
}
|
||||
/**
|
||||
* Returns the memcache class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_memcache';
|
||||
}
|
||||
}
|
62
cache/stores/memcached/tests/memcached_test.php
vendored
Normal file
62
cache/stores/memcached/tests/memcached_test.php
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Memcached unit tests.
|
||||
*
|
||||
* If you wish to use these unit tests all you need to do is add the following definition to
|
||||
* your config.php file.
|
||||
*
|
||||
* define('TEST_CACHESTORE_MEMCACHED_TESTSERVERS', '127.0.0.1:11211');
|
||||
*
|
||||
* @package cachestore_memcached
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/memcached/lib.php');
|
||||
|
||||
/**
|
||||
* Memcached unit test class.
|
||||
*
|
||||
* @package cachestore_memcached
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_memcached_test extends cachestore_tests {
|
||||
/**
|
||||
* Prepare to run tests.
|
||||
*/
|
||||
public function setUp() {
|
||||
if (defined('TEST_CACHESTORE_MEMCACHED_TESTSERVERS')) {
|
||||
set_config('testservers', TEST_CACHESTORE_MEMCACHED_TESTSERVERS, 'cachestore_memcached');
|
||||
$this->resetAfterTest();
|
||||
}
|
||||
parent::setUp();
|
||||
}
|
||||
/**
|
||||
* Returns the memcached class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_memcached';
|
||||
}
|
||||
}
|
50
cache/stores/mongodb/lib.php
vendored
50
cache/stores/mongodb/lib.php
vendored
@ -274,11 +274,7 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
$cursor = $this->collection->find($query);
|
||||
$results = array();
|
||||
foreach ($cursor as $result) {
|
||||
if (array_key_exists('key', $result)) {
|
||||
$id = $result[$key];
|
||||
} else {
|
||||
$id = (string)$result['key'];
|
||||
}
|
||||
$id = (string)$result['key'];
|
||||
$results[$id] = unserialize($result['data']);
|
||||
}
|
||||
foreach ($keys as $key) {
|
||||
@ -307,11 +303,22 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
$record['data'] = serialize($data);
|
||||
$options = array(
|
||||
'upsert' => true,
|
||||
'safe' => $this->usesafe
|
||||
'safe' => $this->usesafe,
|
||||
'w' => $this->usesafe ? 1 : 0
|
||||
);
|
||||
$this->delete($key);
|
||||
$result = $this->collection->insert($record, $options);
|
||||
return $result;
|
||||
if ($result === true) {
|
||||
// Safe mode is off.
|
||||
return true;
|
||||
} else if (is_array($result)) {
|
||||
if (empty($result['ok']) || isset($result['err'])) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Who knows?
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -326,11 +333,11 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
$count = 0;
|
||||
foreach ($keyvaluearray as $pair) {
|
||||
$result = $this->set($pair['key'], $pair['value']);
|
||||
if ($result === true || (is_array($result)) && !empty($result['ok'])) {
|
||||
if ($result === true) {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
return;
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -349,13 +356,25 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
}
|
||||
$options = array(
|
||||
'justOne' => false,
|
||||
'safe' => $this->usesafe
|
||||
'safe' => $this->usesafe,
|
||||
'w' => $this->usesafe ? 1 : 0
|
||||
);
|
||||
$result = $this->collection->remove($criteria, $options);
|
||||
if ($result === false || (is_array($result) && !array_key_exists('ok', $result)) || $result === 0) {
|
||||
return false;
|
||||
|
||||
if ($result === true) {
|
||||
// Safe mode.
|
||||
return true;
|
||||
} else if (is_array($result)) {
|
||||
if (empty($result['ok']) || isset($result['err'])) {
|
||||
return false;
|
||||
} else if (empty($result['n'])) {
|
||||
// Nothing was removed.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return !empty($result['ok']);
|
||||
// Who knows?
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -496,7 +515,6 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
if (empty($config->testserver)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$configuration = array();
|
||||
$configuration['server'] = $config->testserver;
|
||||
if (!empty($config->testreplicaset)) {
|
||||
@ -511,9 +529,7 @@ class cachestore_mongodb extends cache_store implements cache_is_configurable {
|
||||
if (!empty($config->testdatabase)) {
|
||||
$configuration['database'] = $config->testdatabase;
|
||||
}
|
||||
if (!empty($config->testusesafe)) {
|
||||
$configuration['usesafe'] = $config->testusesafe;
|
||||
}
|
||||
$configuration['usesafe'] = 1;
|
||||
if (!empty($config->testextendedmode)) {
|
||||
$configuration['extendedmode'] = (bool)$config->testextendedmode;
|
||||
}
|
||||
|
62
cache/stores/mongodb/tests/mongodb_test.php
vendored
Normal file
62
cache/stores/mongodb/tests/mongodb_test.php
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
// This mongodb is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* MongoDB unit tests.
|
||||
*
|
||||
* If you wish to use these unit tests all you need to do is add the following definition to
|
||||
* your config.php file.
|
||||
*
|
||||
* define('TEST_CACHESTORE_MONGODB_TESTSERVER', 'mongodb://localhost:27017');
|
||||
*
|
||||
* @package cachestore_mongodb
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/mongodb/lib.php');
|
||||
|
||||
/**
|
||||
* MongoDB unit test class.
|
||||
*
|
||||
* @package cachestore_mongodb
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_mongodb_test extends cachestore_tests {
|
||||
/**
|
||||
* Prepare to run tests.
|
||||
*/
|
||||
public function setUp() {
|
||||
if (defined('TEST_CACHESTORE_MONGODB_TESTSERVER')) {
|
||||
set_config('testserver', TEST_CACHESTORE_MONGODB_TESTSERVER, 'cachestore_mongodb');
|
||||
$this->resetAfterTest();
|
||||
}
|
||||
parent::setUp();
|
||||
}
|
||||
/**
|
||||
* Returns the MongoDB class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_mongodb';
|
||||
}
|
||||
}
|
7
cache/stores/session/lib.php
vendored
7
cache/stores/session/lib.php
vendored
@ -335,8 +335,9 @@ class cachestore_session extends session_data_store implements cache_is_key_awar
|
||||
* @return bool Returns true if the operation was a success, false otherwise.
|
||||
*/
|
||||
public function delete($key) {
|
||||
$result = isset($this->store[$key]);
|
||||
unset($this->store[$key]);
|
||||
return true;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -348,8 +349,10 @@ class cachestore_session extends session_data_store implements cache_is_key_awar
|
||||
public function delete_many(array $keys) {
|
||||
$count = 0;
|
||||
foreach ($keys as $key) {
|
||||
if (isset($this->store[$key])) {
|
||||
$count++;
|
||||
}
|
||||
unset($this->store[$key]);
|
||||
$count++;
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
47
cache/stores/session/tests/session_test.php
vendored
Normal file
47
cache/stores/session/tests/session_test.php
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// This session is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Session unit tests
|
||||
*
|
||||
* @package cachestore_session
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/session/lib.php');
|
||||
|
||||
/**
|
||||
* Session unit test class.
|
||||
*
|
||||
* @package cachestore_session
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_session_test extends cachestore_tests {
|
||||
/**
|
||||
* Returns the session class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_session';
|
||||
}
|
||||
}
|
7
cache/stores/static/lib.php
vendored
7
cache/stores/static/lib.php
vendored
@ -331,8 +331,9 @@ class cachestore_static extends static_data_store implements cache_is_key_aware
|
||||
* @return bool Returns true if the operation was a success, false otherwise.
|
||||
*/
|
||||
public function delete($key) {
|
||||
$result = isset($this->store[$key]);
|
||||
unset($this->store[$key]);
|
||||
return true;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -344,8 +345,10 @@ class cachestore_static extends static_data_store implements cache_is_key_aware
|
||||
public function delete_many(array $keys) {
|
||||
$count = 0;
|
||||
foreach ($keys as $key) {
|
||||
if (isset($this->store[$key])) {
|
||||
$count++;
|
||||
}
|
||||
unset($this->store[$key]);
|
||||
$count++;
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
47
cache/stores/static/tests/static_test.php
vendored
Normal file
47
cache/stores/static/tests/static_test.php
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
// This static is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Static unit tests
|
||||
*
|
||||
* @package cachestore_static
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
// Include the necessary evils.
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot.'/cache/tests/fixtures/stores.php');
|
||||
require_once($CFG->dirroot.'/cache/stores/static/lib.php');
|
||||
|
||||
/**
|
||||
* Static unit test class.
|
||||
*
|
||||
* @package cachestore_static
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class cachestore_static_test extends cachestore_tests {
|
||||
/**
|
||||
* Returns the static class name
|
||||
* @return string
|
||||
*/
|
||||
protected function get_class_name() {
|
||||
return 'cachestore_static';
|
||||
}
|
||||
}
|
137
cache/tests/fixtures/stores.php
vendored
Normal file
137
cache/tests/fixtures/stores.php
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Cache store test fixtures.
|
||||
*
|
||||
* @package core
|
||||
* @category cache
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* An abstract class to make writing unit tests for cache stores very easy.
|
||||
*
|
||||
* @package core
|
||||
* @category cache
|
||||
* @copyright 2013 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
abstract class cachestore_tests extends advanced_testcase {
|
||||
|
||||
/**
|
||||
* Returns the class name for the store.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract protected function get_class_name();
|
||||
|
||||
/**
|
||||
* Run the unit tests for the store.
|
||||
*/
|
||||
public function test_test_instance() {
|
||||
$class = $this->get_class_name();
|
||||
if (!class_exists($class) || !method_exists($class, 'initialise_test_instance') || !$class::are_requirements_met()) {
|
||||
$this->markTestSkipped('Could not test '.$class.'. Requirements are not met.');
|
||||
}
|
||||
|
||||
$modes = $class::get_supported_modes();
|
||||
if ($modes & cache_store::MODE_APPLICATION) {
|
||||
$definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, $class, 'phpunit_test');
|
||||
$instance = $class::initialise_test_instance($definition);
|
||||
if (!$instance) {
|
||||
$this->markTestSkipped('Could not test '.$class.'. No test instance configured for application caches.');
|
||||
} else {
|
||||
$this->run_tests($instance);
|
||||
}
|
||||
}
|
||||
if ($modes & cache_store::MODE_SESSION) {
|
||||
$definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, $class, 'phpunit_test');
|
||||
$instance = $class::initialise_test_instance($definition);
|
||||
if (!$instance) {
|
||||
$this->markTestSkipped('Could not test '.$class.'. No test instance configured for session caches.');
|
||||
} else {
|
||||
$this->run_tests($instance);
|
||||
}
|
||||
}
|
||||
if ($modes & cache_store::MODE_REQUEST) {
|
||||
$definition = cache_definition::load_adhoc(cache_store::MODE_APPLICATION, $class, 'phpunit_test');
|
||||
$instance = $class::initialise_test_instance($definition);
|
||||
if (!$instance) {
|
||||
$this->markTestSkipped('Could not test '.$class.'. No test instance configured for request caches.');
|
||||
} else {
|
||||
$this->run_tests($instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the store for basic functionality.
|
||||
*/
|
||||
public function run_tests(cache_store $instance) {
|
||||
|
||||
// Test set.
|
||||
$this->assertTrue($instance->set('test1', 'test1'));
|
||||
$this->assertTrue($instance->set('test2', 'test2'));
|
||||
|
||||
// Test get.
|
||||
$this->assertEquals('test1', $instance->get('test1'));
|
||||
$this->assertEquals('test2', $instance->get('test2'));
|
||||
|
||||
// Test delete.
|
||||
$this->assertTrue($instance->delete('test1'));
|
||||
$this->assertFalse($instance->delete('test3'));
|
||||
$this->assertFalse($instance->get('test1'));
|
||||
$this->assertEquals('test2', $instance->get('test2'));
|
||||
$this->assertTrue($instance->set('test1', 'test1'));
|
||||
|
||||
// Test purge.
|
||||
$this->assertTrue($instance->purge());
|
||||
$this->assertFalse($instance->get('test1'));
|
||||
$this->assertFalse($instance->get('test2'));
|
||||
|
||||
// Test set_many.
|
||||
$outcome = $instance->set_many(array(
|
||||
array('key' => 'many1', 'value' => 'many1'),
|
||||
array('key' => 'many2', 'value' => 'many2'),
|
||||
array('key' => 'many3', 'value' => 'many3'),
|
||||
array('key' => 'many4', 'value' => 'many4'),
|
||||
array('key' => 'many5', 'value' => 'many5')
|
||||
));
|
||||
$this->assertEquals(5, $outcome);
|
||||
$this->assertEquals('many1', $instance->get('many1'));
|
||||
$this->assertEquals('many5', $instance->get('many5'));
|
||||
$this->assertFalse($instance->get('many6'));
|
||||
|
||||
// Test get_many.
|
||||
$result = $instance->get_many(array('many1', 'many3', 'many5', 'many6'));
|
||||
$this->assertInternalType('array', $result);
|
||||
$this->assertCount(4, $result);
|
||||
$this->assertEquals(array(
|
||||
'many1' => 'many1',
|
||||
'many3' => 'many3',
|
||||
'many5' => 'many5',
|
||||
'many6' => false,
|
||||
), $result);
|
||||
|
||||
// Test delete_many.
|
||||
$this->assertEquals(3, $instance->delete_many(array('many2', 'many3', 'many4')));
|
||||
$this->assertEquals(2, $instance->delete_many(array('many1', 'many5', 'many6')));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user