pictcode / lib / Cake / Test / Case / Cache / Engine / MemcachedEngineTest.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (20.845 KB)
1 | 635eef61 | spyder1211 | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * MemcachedEngineTest file
|
||
4 | *
|
||
5 | * PHP 5
|
||
6 | *
|
||
7 | * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||
8 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
9 | *
|
||
10 | * Licensed under The MIT License
|
||
11 | * For full copyright and license information, please see the LICENSE.txt
|
||
12 | * Redistributions of files must retain the above copyright notice
|
||
13 | *
|
||
14 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
15 | * @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||
16 | * @package Cake.Test.Case.Cache.Engine
|
||
17 | * @since CakePHP(tm) v 2.5.0
|
||
18 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
19 | */
|
||
20 | |||
21 | App::uses('Cache', 'Cache'); |
||
22 | App::uses('MemcachedEngine', 'Cache/Engine'); |
||
23 | |||
24 | /**
|
||
25 | * Class TestMemcachedEngine
|
||
26 | *
|
||
27 | * @package Cake.Test.Case.Cache.Engine
|
||
28 | */
|
||
29 | class TestMemcachedEngine extends MemcachedEngine { |
||
30 | |||
31 | /**
|
||
32 | * public accessor to _parseServerString
|
||
33 | *
|
||
34 | * @param string $server
|
||
35 | * @return array
|
||
36 | */
|
||
37 | public function parseServerString($server) { |
||
38 | return $this->_parseServerString($server); |
||
39 | } |
||
40 | |||
41 | public function setMemcached($memcached) { |
||
42 | $this->_Memcached = $memcached; |
||
43 | } |
||
44 | |||
45 | public function getMemcached() { |
||
46 | return $this->_Memcached; |
||
47 | } |
||
48 | |||
49 | } |
||
50 | |||
51 | /**
|
||
52 | * MemcachedEngineTest class
|
||
53 | *
|
||
54 | * @package Cake.Test.Case.Cache.Engine
|
||
55 | */
|
||
56 | class MemcachedEngineTest extends CakeTestCase { |
||
57 | |||
58 | /**
|
||
59 | * setUp method
|
||
60 | *
|
||
61 | * @return void
|
||
62 | */
|
||
63 | public function setUp() { |
||
64 | parent::setUp();
|
||
65 | $this->skipIf(!class_exists('Memcached'), 'Memcached is not installed or configured properly.'); |
||
66 | |||
67 | Cache::config('memcached', array( |
||
68 | 'engine' => 'Memcached', |
||
69 | 'prefix' => 'cake_', |
||
70 | 'duration' => 3600 |
||
71 | )); |
||
72 | } |
||
73 | |||
74 | /**
|
||
75 | * tearDown method
|
||
76 | *
|
||
77 | * @return void
|
||
78 | */
|
||
79 | public function tearDown() { |
||
80 | parent::tearDown();
|
||
81 | Cache::drop('memcached'); |
||
82 | Cache::drop('memcached_groups'); |
||
83 | Cache::drop('memcached_helper'); |
||
84 | Cache::config('default'); |
||
85 | } |
||
86 | |||
87 | /**
|
||
88 | * testSettings method
|
||
89 | *
|
||
90 | * @return void
|
||
91 | */
|
||
92 | public function testSettings() { |
||
93 | $settings = Cache::settings('memcached'); |
||
94 | unset($settings['path']); |
||
95 | $expecting = array( |
||
96 | 'prefix' => 'cake_', |
||
97 | 'duration' => 3600, |
||
98 | 'probability' => 100, |
||
99 | 'servers' => array('127.0.0.1'), |
||
100 | 'persistent' => false, |
||
101 | 'compress' => false, |
||
102 | 'engine' => 'Memcached', |
||
103 | 'login' => null, |
||
104 | 'password' => null, |
||
105 | 'groups' => array(), |
||
106 | 'serialize' => 'php', |
||
107 | 'options' => array() |
||
108 | ); |
||
109 | $this->assertEquals($expecting, $settings); |
||
110 | } |
||
111 | |||
112 | /**
|
||
113 | * testCompressionSetting method
|
||
114 | *
|
||
115 | * @return void
|
||
116 | */
|
||
117 | public function testCompressionSetting() { |
||
118 | $Memcached = new TestMemcachedEngine(); |
||
119 | $Memcached->init(array( |
||
120 | 'engine' => 'Memcached', |
||
121 | 'servers' => array('127.0.0.1:11211'), |
||
122 | 'compress' => false |
||
123 | )); |
||
124 | |||
125 | $this->assertFalse($Memcached->getMemcached()->getOption(Memcached::OPT_COMPRESSION)); |
||
126 | |||
127 | $MemcachedCompressed = new TestMemcachedEngine(); |
||
128 | $MemcachedCompressed->init(array( |
||
129 | 'engine' => 'Memcached', |
||
130 | 'servers' => array('127.0.0.1:11211'), |
||
131 | 'compress' => true |
||
132 | )); |
||
133 | |||
134 | $this->assertTrue($MemcachedCompressed->getMemcached()->getOption(Memcached::OPT_COMPRESSION)); |
||
135 | } |
||
136 | |||
137 | /**
|
||
138 | * test setting options
|
||
139 | *
|
||
140 | * @return void
|
||
141 | */
|
||
142 | public function testOptionsSetting() { |
||
143 | $memcached = new TestMemcachedEngine(); |
||
144 | $memcached->init(array( |
||
145 | 'engine' => 'Memcached', |
||
146 | 'servers' => array('127.0.0.1:11211'), |
||
147 | 'options' => array( |
||
148 | Memcached::OPT_BINARY_PROTOCOL => true |
||
149 | ) |
||
150 | )); |
||
151 | $this->assertEquals(1, $memcached->getMemcached()->getOption(Memcached::OPT_BINARY_PROTOCOL)); |
||
152 | } |
||
153 | |||
154 | /**
|
||
155 | * test accepts only valid serializer engine
|
||
156 | *
|
||
157 | * @return void
|
||
158 | */
|
||
159 | public function testInvalidSerializerSetting() { |
||
160 | $Memcached = new TestMemcachedEngine(); |
||
161 | $settings = array( |
||
162 | 'engine' => 'Memcached', |
||
163 | 'servers' => array('127.0.0.1:11211'), |
||
164 | 'persistent' => false, |
||
165 | 'serialize' => 'invalid_serializer' |
||
166 | ); |
||
167 | |||
168 | $this->setExpectedException(
|
||
169 | 'CacheException', 'invalid_serializer is not a valid serializer engine for Memcached' |
||
170 | ); |
||
171 | $Memcached->init($settings); |
||
172 | } |
||
173 | |||
174 | /**
|
||
175 | * testPhpSerializerSetting method
|
||
176 | *
|
||
177 | * @return void
|
||
178 | */
|
||
179 | public function testPhpSerializerSetting() { |
||
180 | $Memcached = new TestMemcachedEngine(); |
||
181 | $settings = array( |
||
182 | 'engine' => 'Memcached', |
||
183 | 'servers' => array('127.0.0.1:11211'), |
||
184 | 'persistent' => false, |
||
185 | 'serialize' => 'php' |
||
186 | ); |
||
187 | |||
188 | $Memcached->init($settings); |
||
189 | $this->assertEquals(Memcached::SERIALIZER_PHP, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER)); |
||
190 | } |
||
191 | |||
192 | /**
|
||
193 | * testJsonSerializerSetting method
|
||
194 | *
|
||
195 | * @return void
|
||
196 | */
|
||
197 | public function testJsonSerializerSetting() { |
||
198 | $this->skipIf(
|
||
199 | !Memcached::HAVE_JSON, |
||
200 | 'Memcached extension is not compiled with json support'
|
||
201 | ); |
||
202 | |||
203 | $Memcached = new TestMemcachedEngine(); |
||
204 | $settings = array( |
||
205 | 'engine' => 'Memcached', |
||
206 | 'servers' => array('127.0.0.1:11211'), |
||
207 | 'persistent' => false, |
||
208 | 'serialize' => 'json' |
||
209 | ); |
||
210 | |||
211 | $Memcached->init($settings); |
||
212 | $this->assertEquals(Memcached::SERIALIZER_JSON, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER)); |
||
213 | } |
||
214 | |||
215 | /**
|
||
216 | * testIgbinarySerializerSetting method
|
||
217 | *
|
||
218 | * @return void
|
||
219 | */
|
||
220 | public function testIgbinarySerializerSetting() { |
||
221 | $this->skipIf(
|
||
222 | !Memcached::HAVE_IGBINARY, |
||
223 | 'Memcached extension is not compiled with igbinary support'
|
||
224 | ); |
||
225 | |||
226 | $Memcached = new TestMemcachedEngine(); |
||
227 | $settings = array( |
||
228 | 'engine' => 'Memcached', |
||
229 | 'servers' => array('127.0.0.1:11211'), |
||
230 | 'persistent' => false, |
||
231 | 'serialize' => 'igbinary' |
||
232 | ); |
||
233 | |||
234 | $Memcached->init($settings); |
||
235 | $this->assertEquals(Memcached::SERIALIZER_IGBINARY, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER)); |
||
236 | } |
||
237 | |||
238 | /**
|
||
239 | * testMsgpackSerializerSetting method
|
||
240 | *
|
||
241 | * @return void
|
||
242 | */
|
||
243 | public function testMsgpackSerializerSetting() { |
||
244 | $this->skipIf(
|
||
245 | !defined('Memcached::HAVE_MSGPACK') || !Memcached::HAVE_MSGPACK, |
||
246 | 'Memcached extension is not compiled with msgpack support'
|
||
247 | ); |
||
248 | |||
249 | $Memcached = new TestMemcachedEngine(); |
||
250 | $settings = array( |
||
251 | 'engine' => 'Memcached', |
||
252 | 'servers' => array('127.0.0.1:11211'), |
||
253 | 'persistent' => false, |
||
254 | 'serialize' => 'msgpack' |
||
255 | ); |
||
256 | |||
257 | $Memcached->init($settings); |
||
258 | $this->assertEquals(Memcached::SERIALIZER_MSGPACK, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER)); |
||
259 | } |
||
260 | |||
261 | /**
|
||
262 | * testJsonSerializerThrowException method
|
||
263 | *
|
||
264 | * @return void
|
||
265 | */
|
||
266 | public function testJsonSerializerThrowException() { |
||
267 | $this->skipIf(
|
||
268 | Memcached::HAVE_JSON, |
||
269 | 'Memcached extension is compiled with json support'
|
||
270 | ); |
||
271 | |||
272 | $Memcached = new TestMemcachedEngine(); |
||
273 | $settings = array( |
||
274 | 'engine' => 'Memcached', |
||
275 | 'servers' => array('127.0.0.1:11211'), |
||
276 | 'persistent' => false, |
||
277 | 'serialize' => 'json' |
||
278 | ); |
||
279 | |||
280 | $this->setExpectedException(
|
||
281 | 'CacheException', 'Memcached extension is not compiled with json support' |
||
282 | ); |
||
283 | $Memcached->init($settings); |
||
284 | } |
||
285 | |||
286 | /**
|
||
287 | * testMsgpackSerializerThrowException method
|
||
288 | *
|
||
289 | * @return void
|
||
290 | */
|
||
291 | public function testMsgpackSerializerThrowException() { |
||
292 | $this->skipIf(
|
||
293 | defined('Memcached::HAVE_MSGPACK') && Memcached::HAVE_MSGPACK, |
||
294 | 'Memcached extension is compiled with msgpack support'
|
||
295 | ); |
||
296 | |||
297 | $Memcached = new TestMemcachedEngine(); |
||
298 | $settings = array( |
||
299 | 'engine' => 'Memcached', |
||
300 | 'servers' => array('127.0.0.1:11211'), |
||
301 | 'persistent' => false, |
||
302 | 'serialize' => 'msgpack' |
||
303 | ); |
||
304 | |||
305 | $this->setExpectedException(
|
||
306 | 'CacheException', 'msgpack is not a valid serializer engine for Memcached' |
||
307 | ); |
||
308 | $Memcached->init($settings); |
||
309 | } |
||
310 | |||
311 | /**
|
||
312 | * testIgbinarySerializerThrowException method
|
||
313 | *
|
||
314 | * @return void
|
||
315 | */
|
||
316 | public function testIgbinarySerializerThrowException() { |
||
317 | $this->skipIf(
|
||
318 | Memcached::HAVE_IGBINARY, |
||
319 | 'Memcached extension is compiled with igbinary support'
|
||
320 | ); |
||
321 | |||
322 | $Memcached = new TestMemcachedEngine(); |
||
323 | $settings = array( |
||
324 | 'engine' => 'Memcached', |
||
325 | 'servers' => array('127.0.0.1:11211'), |
||
326 | 'persistent' => false, |
||
327 | 'serialize' => 'igbinary' |
||
328 | ); |
||
329 | |||
330 | $this->setExpectedException(
|
||
331 | 'CacheException', 'Memcached extension is not compiled with igbinary support' |
||
332 | ); |
||
333 | $Memcached->init($settings); |
||
334 | } |
||
335 | |||
336 | /**
|
||
337 | * test using authentication without memcached installed with SASL support
|
||
338 | * throw an exception
|
||
339 | *
|
||
340 | * @return void
|
||
341 | */
|
||
342 | public function testSaslAuthException() { |
||
343 | $Memcached = new TestMemcachedEngine(); |
||
344 | $settings = array( |
||
345 | 'engine' => 'Memcached', |
||
346 | 'servers' => array('127.0.0.1:11211'), |
||
347 | 'persistent' => false, |
||
348 | 'login' => 'test', |
||
349 | 'password' => 'password' |
||
350 | ); |
||
351 | |||
352 | $this->setExpectedException('PHPUnit_Framework_Error_Warning'); |
||
353 | $Memcached->init($settings); |
||
354 | } |
||
355 | |||
356 | /**
|
||
357 | * testSettings method
|
||
358 | *
|
||
359 | * @return void
|
||
360 | */
|
||
361 | public function testMultipleServers() { |
||
362 | $servers = array('127.0.0.1:11211', '127.0.0.1:11222'); |
||
363 | $available = true; |
||
364 | $Memcached = new Memcached(); |
||
365 | |||
366 | foreach ($servers as $server) { |
||
367 | list($host, $port) = explode(':', $server); |
||
368 | //@codingStandardsIgnoreStart
|
||
369 | if (!$Memcached->addServer($host, $port)) { |
||
370 | $available = false; |
||
371 | } |
||
372 | //@codingStandardsIgnoreEnd
|
||
373 | } |
||
374 | |||
375 | $this->skipIf(!$available, 'Need memcached servers at ' . implode(', ', $servers) . ' to run this test.'); |
||
376 | |||
377 | $Memcached = new MemcachedEngine(); |
||
378 | $Memcached->init(array('engine' => 'Memcached', 'servers' => $servers)); |
||
379 | |||
380 | $settings = $Memcached->settings(); |
||
381 | $this->assertEquals($settings['servers'], $servers); |
||
382 | Cache::drop('dual_server'); |
||
383 | } |
||
384 | |||
385 | /**
|
||
386 | * test connecting to an ipv6 server.
|
||
387 | *
|
||
388 | * @return void
|
||
389 | */
|
||
390 | public function testConnectIpv6() { |
||
391 | $Memcached = new MemcachedEngine(); |
||
392 | $result = $Memcached->init(array( |
||
393 | 'prefix' => 'cake_', |
||
394 | 'duration' => 200, |
||
395 | 'engine' => 'Memcached', |
||
396 | 'servers' => array( |
||
397 | '[::1]:11211'
|
||
398 | ) |
||
399 | )); |
||
400 | $this->assertTrue($result); |
||
401 | } |
||
402 | |||
403 | /**
|
||
404 | * test domain starts with u
|
||
405 | *
|
||
406 | * @return void
|
||
407 | */
|
||
408 | public function testParseServerStringWithU() { |
||
409 | $Memcached = new TestMemcachedEngine(); |
||
410 | $result = $Memcached->parseServerString('udomain.net:13211'); |
||
411 | $this->assertEquals(array('udomain.net', '13211'), $result); |
||
412 | } |
||
413 | |||
414 | /**
|
||
415 | * test non latin domains.
|
||
416 | *
|
||
417 | * @return void
|
||
418 | */
|
||
419 | public function testParseServerStringNonLatin() { |
||
420 | $Memcached = new TestMemcachedEngine(); |
||
421 | $result = $Memcached->parseServerString('schülervz.net:13211'); |
||
422 | $this->assertEquals(array('schülervz.net', '13211'), $result); |
||
423 | |||
424 | $result = $Memcached->parseServerString('sülül:1111'); |
||
425 | $this->assertEquals(array('sülül', '1111'), $result); |
||
426 | } |
||
427 | |||
428 | /**
|
||
429 | * test unix sockets.
|
||
430 | *
|
||
431 | * @return void
|
||
432 | */
|
||
433 | public function testParseServerStringUnix() { |
||
434 | $Memcached = new TestMemcachedEngine(); |
||
435 | $result = $Memcached->parseServerString('unix:///path/to/memcachedd.sock'); |
||
436 | $this->assertEquals(array('/path/to/memcachedd.sock', 0), $result); |
||
437 | } |
||
438 | |||
439 | /**
|
||
440 | * testReadAndWriteCache method
|
||
441 | *
|
||
442 | * @return void
|
||
443 | */
|
||
444 | public function testReadAndWriteCache() { |
||
445 | Cache::set(array('duration' => 1), null, 'memcached'); |
||
446 | |||
447 | $result = Cache::read('test', 'memcached'); |
||
448 | $expecting = ''; |
||
449 | $this->assertEquals($expecting, $result); |
||
450 | |||
451 | $data = 'this is a test of the emergency broadcasting system'; |
||
452 | $result = Cache::write('test', $data, 'memcached'); |
||
453 | $this->assertTrue($result); |
||
454 | |||
455 | $result = Cache::read('test', 'memcached'); |
||
456 | $expecting = $data; |
||
457 | $this->assertEquals($expecting, $result); |
||
458 | |||
459 | Cache::delete('test', 'memcached'); |
||
460 | } |
||
461 | |||
462 | /**
|
||
463 | * testExpiry method
|
||
464 | *
|
||
465 | * @return void
|
||
466 | */
|
||
467 | public function testExpiry() { |
||
468 | Cache::set(array('duration' => 1), 'memcached'); |
||
469 | |||
470 | $result = Cache::read('test', 'memcached'); |
||
471 | $this->assertFalse($result); |
||
472 | |||
473 | $data = 'this is a test of the emergency broadcasting system'; |
||
474 | $result = Cache::write('other_test', $data, 'memcached'); |
||
475 | $this->assertTrue($result); |
||
476 | |||
477 | sleep(2); |
||
478 | $result = Cache::read('other_test', 'memcached'); |
||
479 | $this->assertFalse($result); |
||
480 | |||
481 | Cache::set(array('duration' => "+1 second"), 'memcached'); |
||
482 | |||
483 | $data = 'this is a test of the emergency broadcasting system'; |
||
484 | $result = Cache::write('other_test', $data, 'memcached'); |
||
485 | $this->assertTrue($result); |
||
486 | |||
487 | sleep(3); |
||
488 | $result = Cache::read('other_test', 'memcached'); |
||
489 | $this->assertFalse($result); |
||
490 | |||
491 | Cache::config('memcached', array('duration' => '+1 second')); |
||
492 | |||
493 | $result = Cache::read('other_test', 'memcached'); |
||
494 | $this->assertFalse($result); |
||
495 | |||
496 | Cache::config('memcached', array('duration' => '+29 days')); |
||
497 | $data = 'this is a test of the emergency broadcasting system'; |
||
498 | $result = Cache::write('long_expiry_test', $data, 'memcached'); |
||
499 | $this->assertTrue($result); |
||
500 | |||
501 | sleep(2); |
||
502 | $result = Cache::read('long_expiry_test', 'memcached'); |
||
503 | $expecting = $data; |
||
504 | $this->assertEquals($expecting, $result); |
||
505 | |||
506 | Cache::config('memcached', array('duration' => 3600)); |
||
507 | } |
||
508 | |||
509 | /**
|
||
510 | * testDeleteCache method
|
||
511 | *
|
||
512 | * @return void
|
||
513 | */
|
||
514 | public function testDeleteCache() { |
||
515 | $data = 'this is a test of the emergency broadcasting system'; |
||
516 | $result = Cache::write('delete_test', $data, 'memcached'); |
||
517 | $this->assertTrue($result); |
||
518 | |||
519 | $result = Cache::delete('delete_test', 'memcached'); |
||
520 | $this->assertTrue($result); |
||
521 | } |
||
522 | |||
523 | /**
|
||
524 | * testDecrement method
|
||
525 | *
|
||
526 | * @return void
|
||
527 | */
|
||
528 | public function testDecrement() { |
||
529 | $result = Cache::write('test_decrement', 5, 'memcached'); |
||
530 | $this->assertTrue($result); |
||
531 | |||
532 | $result = Cache::decrement('test_decrement', 1, 'memcached'); |
||
533 | $this->assertEquals(4, $result); |
||
534 | |||
535 | $result = Cache::read('test_decrement', 'memcached'); |
||
536 | $this->assertEquals(4, $result); |
||
537 | |||
538 | $result = Cache::decrement('test_decrement', 2, 'memcached'); |
||
539 | $this->assertEquals(2, $result); |
||
540 | |||
541 | $result = Cache::read('test_decrement', 'memcached'); |
||
542 | $this->assertEquals(2, $result); |
||
543 | |||
544 | Cache::delete('test_decrement', 'memcached'); |
||
545 | } |
||
546 | |||
547 | /**
|
||
548 | * test decrementing compressed keys
|
||
549 | *
|
||
550 | * @return void
|
||
551 | */
|
||
552 | public function testDecrementCompressedKeys() { |
||
553 | Cache::config('compressed_memcached', array( |
||
554 | 'engine' => 'Memcached', |
||
555 | 'duration' => '+2 seconds', |
||
556 | 'servers' => array('127.0.0.1:11211'), |
||
557 | 'compress' => true |
||
558 | )); |
||
559 | |||
560 | $result = Cache::write('test_decrement', 5, 'compressed_memcached'); |
||
561 | $this->assertTrue($result); |
||
562 | |||
563 | $result = Cache::decrement('test_decrement', 1, 'compressed_memcached'); |
||
564 | $this->assertEquals(4, $result); |
||
565 | |||
566 | $result = Cache::read('test_decrement', 'compressed_memcached'); |
||
567 | $this->assertEquals(4, $result); |
||
568 | |||
569 | $result = Cache::decrement('test_decrement', 2, 'compressed_memcached'); |
||
570 | $this->assertEquals(2, $result); |
||
571 | |||
572 | $result = Cache::read('test_decrement', 'compressed_memcached'); |
||
573 | $this->assertEquals(2, $result); |
||
574 | |||
575 | Cache::delete('test_decrement', 'compressed_memcached'); |
||
576 | } |
||
577 | |||
578 | /**
|
||
579 | * testIncrement method
|
||
580 | *
|
||
581 | * @return void
|
||
582 | */
|
||
583 | public function testIncrement() { |
||
584 | $result = Cache::write('test_increment', 5, 'memcached'); |
||
585 | $this->assertTrue($result); |
||
586 | |||
587 | $result = Cache::increment('test_increment', 1, 'memcached'); |
||
588 | $this->assertEquals(6, $result); |
||
589 | |||
590 | $result = Cache::read('test_increment', 'memcached'); |
||
591 | $this->assertEquals(6, $result); |
||
592 | |||
593 | $result = Cache::increment('test_increment', 2, 'memcached'); |
||
594 | $this->assertEquals(8, $result); |
||
595 | |||
596 | $result = Cache::read('test_increment', 'memcached'); |
||
597 | $this->assertEquals(8, $result); |
||
598 | |||
599 | Cache::delete('test_increment', 'memcached'); |
||
600 | } |
||
601 | |||
602 | /**
|
||
603 | * test incrementing compressed keys
|
||
604 | *
|
||
605 | * @return void
|
||
606 | */
|
||
607 | public function testIncrementCompressedKeys() { |
||
608 | Cache::config('compressed_memcached', array( |
||
609 | 'engine' => 'Memcached', |
||
610 | 'duration' => '+2 seconds', |
||
611 | 'servers' => array('127.0.0.1:11211'), |
||
612 | 'compress' => true |
||
613 | )); |
||
614 | |||
615 | $result = Cache::write('test_increment', 5, 'compressed_memcached'); |
||
616 | $this->assertTrue($result); |
||
617 | |||
618 | $result = Cache::increment('test_increment', 1, 'compressed_memcached'); |
||
619 | $this->assertEquals(6, $result); |
||
620 | |||
621 | $result = Cache::read('test_increment', 'compressed_memcached'); |
||
622 | $this->assertEquals(6, $result); |
||
623 | |||
624 | $result = Cache::increment('test_increment', 2, 'compressed_memcached'); |
||
625 | $this->assertEquals(8, $result); |
||
626 | |||
627 | $result = Cache::read('test_increment', 'compressed_memcached'); |
||
628 | $this->assertEquals(8, $result); |
||
629 | |||
630 | Cache::delete('test_increment', 'compressed_memcached'); |
||
631 | } |
||
632 | |||
633 | /**
|
||
634 | * test that configurations don't conflict, when a file engine is declared after a memcached one.
|
||
635 | *
|
||
636 | * @return void
|
||
637 | */
|
||
638 | public function testConfigurationConflict() { |
||
639 | Cache::config('long_memcached', array( |
||
640 | 'engine' => 'Memcached', |
||
641 | 'duration' => '+2 seconds', |
||
642 | 'servers' => array('127.0.0.1:11211'), |
||
643 | )); |
||
644 | Cache::config('short_memcached', array( |
||
645 | 'engine' => 'Memcached', |
||
646 | 'duration' => '+1 seconds', |
||
647 | 'servers' => array('127.0.0.1:11211'), |
||
648 | )); |
||
649 | Cache::config('some_file', array('engine' => 'File')); |
||
650 | |||
651 | $this->assertTrue(Cache::write('duration_test', 'yay', 'long_memcached')); |
||
652 | $this->assertTrue(Cache::write('short_duration_test', 'boo', 'short_memcached')); |
||
653 | |||
654 | $this->assertEquals('yay', Cache::read('duration_test', 'long_memcached'), 'Value was not read %s'); |
||
655 | $this->assertEquals('boo', Cache::read('short_duration_test', 'short_memcached'), 'Value was not read %s'); |
||
656 | |||
657 | sleep(1); |
||
658 | $this->assertEquals('yay', Cache::read('duration_test', 'long_memcached'), 'Value was not read %s'); |
||
659 | |||
660 | sleep(2); |
||
661 | $this->assertFalse(Cache::read('short_duration_test', 'short_memcached'), 'Cache was not invalidated %s'); |
||
662 | $this->assertFalse(Cache::read('duration_test', 'long_memcached'), 'Value did not expire %s'); |
||
663 | |||
664 | Cache::delete('duration_test', 'long_memcached'); |
||
665 | Cache::delete('short_duration_test', 'short_memcached'); |
||
666 | } |
||
667 | |||
668 | /**
|
||
669 | * test clearing memcached.
|
||
670 | *
|
||
671 | * @return void
|
||
672 | */
|
||
673 | public function testClear() { |
||
674 | Cache::config('memcached2', array( |
||
675 | 'engine' => 'Memcached', |
||
676 | 'prefix' => 'cake2_', |
||
677 | 'duration' => 3600 |
||
678 | )); |
||
679 | |||
680 | Cache::write('some_value', 'cache1', 'memcached'); |
||
681 | $result = Cache::clear(true, 'memcached'); |
||
682 | $this->assertTrue($result); |
||
683 | $this->assertEquals('cache1', Cache::read('some_value', 'memcached')); |
||
684 | |||
685 | Cache::write('some_value', 'cache2', 'memcached2'); |
||
686 | $result = Cache::clear(false, 'memcached'); |
||
687 | $this->assertTrue($result); |
||
688 | $this->assertFalse(Cache::read('some_value', 'memcached')); |
||
689 | $this->assertEquals('cache2', Cache::read('some_value', 'memcached2')); |
||
690 | |||
691 | Cache::clear(false, 'memcached2'); |
||
692 | } |
||
693 | |||
694 | /**
|
||
695 | * test that a 0 duration can successfully write.
|
||
696 | *
|
||
697 | * @return void
|
||
698 | */
|
||
699 | public function testZeroDuration() { |
||
700 | Cache::config('memcached', array('duration' => 0)); |
||
701 | $result = Cache::write('test_key', 'written!', 'memcached'); |
||
702 | |||
703 | $this->assertTrue($result); |
||
704 | $result = Cache::read('test_key', 'memcached'); |
||
705 | $this->assertEquals('written!', $result); |
||
706 | } |
||
707 | |||
708 | /**
|
||
709 | * test that durations greater than 30 days never expire
|
||
710 | *
|
||
711 | * @return void
|
||
712 | */
|
||
713 | public function testLongDurationEqualToZero() { |
||
714 | $this->markTestSkipped('Cannot run as Memcached cannot be reflected'); |
||
715 | |||
716 | $memcached = new TestMemcachedEngine(); |
||
717 | $memcached->settings['compress'] = false; |
||
718 | |||
719 | $mock = $this->getMock('Memcached'); |
||
720 | $memcached->setMemcached($mock); |
||
721 | $mock->expects($this->once()) |
||
722 | ->method('set')
|
||
723 | ->with('key', 'value', 0); |
||
724 | |||
725 | $value = 'value'; |
||
726 | $memcached->write('key', $value, 50 * DAY); |
||
727 | } |
||
728 | |||
729 | /**
|
||
730 | * Tests that configuring groups for stored keys return the correct values when read/written
|
||
731 | * Shows that altering the group value is equivalent to deleting all keys under the same
|
||
732 | * group
|
||
733 | *
|
||
734 | * @return void
|
||
735 | */
|
||
736 | public function testGroupReadWrite() { |
||
737 | Cache::config('memcached_groups', array( |
||
738 | 'engine' => 'Memcached', |
||
739 | 'duration' => 3600, |
||
740 | 'groups' => array('group_a', 'group_b'), |
||
741 | 'prefix' => 'test_' |
||
742 | )); |
||
743 | Cache::config('memcached_helper', array( |
||
744 | 'engine' => 'Memcached', |
||
745 | 'duration' => 3600, |
||
746 | 'prefix' => 'test_' |
||
747 | )); |
||
748 | $this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups')); |
||
749 | $this->assertEquals('value', Cache::read('test_groups', 'memcached_groups')); |
||
750 | |||
751 | Cache::increment('group_a', 1, 'memcached_helper'); |
||
752 | $this->assertFalse(Cache::read('test_groups', 'memcached_groups')); |
||
753 | $this->assertTrue(Cache::write('test_groups', 'value2', 'memcached_groups')); |
||
754 | $this->assertEquals('value2', Cache::read('test_groups', 'memcached_groups')); |
||
755 | |||
756 | Cache::increment('group_b', 1, 'memcached_helper'); |
||
757 | $this->assertFalse(Cache::read('test_groups', 'memcached_groups')); |
||
758 | $this->assertTrue(Cache::write('test_groups', 'value3', 'memcached_groups')); |
||
759 | $this->assertEquals('value3', Cache::read('test_groups', 'memcached_groups')); |
||
760 | } |
||
761 | |||
762 | /**
|
||
763 | * Tests that deleteing from a groups-enabled config is possible
|
||
764 | *
|
||
765 | * @return void
|
||
766 | */
|
||
767 | public function testGroupDelete() { |
||
768 | Cache::config('memcached_groups', array( |
||
769 | 'engine' => 'Memcached', |
||
770 | 'duration' => 3600, |
||
771 | 'groups' => array('group_a', 'group_b') |
||
772 | )); |
||
773 | $this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups')); |
||
774 | $this->assertEquals('value', Cache::read('test_groups', 'memcached_groups')); |
||
775 | $this->assertTrue(Cache::delete('test_groups', 'memcached_groups')); |
||
776 | |||
777 | $this->assertFalse(Cache::read('test_groups', 'memcached_groups')); |
||
778 | } |
||
779 | |||
780 | /**
|
||
781 | * Test clearing a cache group
|
||
782 | *
|
||
783 | * @return void
|
||
784 | */
|
||
785 | public function testGroupClear() { |
||
786 | Cache::config('memcached_groups', array( |
||
787 | 'engine' => 'Memcached', |
||
788 | 'duration' => 3600, |
||
789 | 'groups' => array('group_a', 'group_b') |
||
790 | )); |
||
791 | |||
792 | $this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups')); |
||
793 | $this->assertTrue(Cache::clearGroup('group_a', 'memcached_groups')); |
||
794 | $this->assertFalse(Cache::read('test_groups', 'memcached_groups')); |
||
795 | |||
796 | $this->assertTrue(Cache::write('test_groups', 'value2', 'memcached_groups')); |
||
797 | $this->assertTrue(Cache::clearGroup('group_b', 'memcached_groups')); |
||
798 | $this->assertFalse(Cache::read('test_groups', 'memcached_groups')); |
||
799 | } |
||
800 | } |