%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
<?php
namespace Codeception\Module;
use Codeception\Module;
use Codeception\TestInterface;
use Codeception\Exception\ModuleException;
/**
* This module interacts with the [Alternative PHP Cache (APC)](http://php.net/manual/en/intro.apcu.php)
* using either _APCu_ or _APC_ extension.
*
* Performs a cleanup by flushing all values after each test run.
*
* ## Status
*
* * Maintainer: **Serghei Iakovlev**
* * Stability: **stable**
* * Contact: serghei@phalconphp.com
*
* ### Example (`unit.suite.yml`)
*
* ```yaml
* modules:
* - Apc
* ```
*
* Be sure you don't use the production server to connect.
*
*/
class Apc extends Module
{
/**
* Code to run before each test.
*
* @param TestInterface $test
* @throws ModuleException
*/
public function _before(TestInterface $test)
{
if (!extension_loaded('apc') && !extension_loaded('apcu')) {
throw new ModuleException(
__CLASS__,
'The APC(u) extension not loaded.'
);
}
if (!ini_get('apc.enabled') || (PHP_SAPI === 'cli' && !ini_get('apc.enable_cli'))) {
throw new ModuleException(
__CLASS__,
'The "apc.enable_cli" parameter must be set to "On".'
);
}
}
/**
* Code to run after each test.
*
* @param TestInterface $test
*/
public function _after(TestInterface $test)
{
$this->clear();
}
/**
* Grabs value from APC(u) by key.
*
* Example:
*
* ``` php
* <?php
* $users_count = $I->grabValueFromApc('users_count');
* ?>
* ```
*
* @param string|string[] $key
* @return mixed
*/
public function grabValueFromApc($key)
{
$value = $this->fetch($key);
$this->debugSection('Value', $value);
return $value;
}
/**
* Checks item in APC(u) exists and the same as expected.
*
* Examples:
*
* ``` php
* <?php
* // With only one argument, only checks the key exists
* $I->seeInApc('users_count');
*
* // Checks a 'users_count' exists and has the value 200
* $I->seeInApc('users_count', 200);
* ?>
* ```
*
* @param string|string[] $key
* @param mixed $value
*/
public function seeInApc($key, $value = null)
{
if (null === $value) {
$this->assertTrue($this->exists($key), "Cannot find key '$key' in APC(u).");
return;
}
$actual = $this->grabValueFromApc($key);
$this->assertEquals($value, $actual, "Cannot find key '$key' in APC(u) with the provided value.");
}
/**
* Checks item in APC(u) doesn't exist or is the same as expected.
*
* Examples:
*
* ``` php
* <?php
* // With only one argument, only checks the key does not exist
* $I->dontSeeInApc('users_count');
*
* // Checks a 'users_count' exists does not exist or its value is not the one provided
* $I->dontSeeInApc('users_count', 200);
* ?>
* ```
*
* @param string|string[] $key
* @param mixed $value
*/
public function dontSeeInApc($key, $value = null)
{
if (null === $value) {
$this->assertFalse($this->exists($key), "The key '$key' exists in APC(u).");
return;
}
$actual = $this->grabValueFromApc($key);
if (false !== $actual) {
$this->assertEquals($value, $actual, "The key '$key' exists in APC(u) with the provided value.");
}
}
/**
* Stores an item `$value` with `$key` on the APC(u).
*
* Examples:
*
* ```php
* <?php
* // Array
* $I->haveInApc('users', ['name' => 'miles', 'email' => 'miles@davis.com']);
*
* // Object
* $I->haveInApc('user', UserRepository::findFirst());
*
* // Key as array of 'key => value'
* $entries = [];
* $entries['key1'] = 'value1';
* $entries['key2'] = 'value2';
* $entries['key3'] = ['value3a','value3b'];
* $entries['key4'] = 4;
* $I->haveInApc($entries, null);
* ?>
* ```
*
* @param string|array $key
* @param mixed $value
* @param int $expiration
* @return mixed
*/
public function haveInApc($key, $value, $expiration = null)
{
$this->store($key, $value, $expiration);
return $key;
}
/**
* Clears the APC(u) cache
*/
public function flushApc()
{
// Returns TRUE always
$this->clear();
}
/**
* Clears the APC(u) cache.
*
* @return bool
*/
protected function clear()
{
if (function_exists('apcu_clear_cache')) {
return apcu_clear_cache();
}
return apc_clear_cache('user');
}
/**
* Checks if entry exists
*
* @param string|string[] $key
*
* @return bool|\string[]
*/
protected function exists($key)
{
if (function_exists('apcu_exists')) {
return apcu_exists($key);
}
return apc_exists($key);
}
/**
* Fetch a stored variable from the cache
*
* @param string|string[] $key
*
* @return mixed
*/
protected function fetch($key)
{
$success = false;
if (function_exists('apcu_fetch')) {
$data = apcu_fetch($key, $success);
} else {
$data = apc_fetch($key, $success);
}
$this->debugSection('Fetching a stored variable', $success ? 'OK' : 'FAILED');
return $data;
}
/**
* Cache a variable in the data store.
*
* @param string|array $key
* @param mixed $var
* @param int $ttl
*
* @return array|bool
*/
protected function store($key, $var, $ttl = 0)
{
if (function_exists('apcu_store')) {
return apcu_store($key, $var, $ttl);
}
return apc_store($key, $var, $ttl);
}
}