MDL-38247 cache: fixed cache stores so that they pass unit tests

This commit is contained in:
Sam Hemelryk
2013-03-01 10:11:55 +13:00
parent ac6754a679
commit 32c981e67a
3 changed files with 43 additions and 21 deletions
+33 -17
View File
@@ -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;
}
+5 -2
View File
@@ -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;
}
+5 -2
View File
@@ -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;
}