Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12345 anikendra 1
<?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
		);
108
		$this->assertEquals($expecting, $settings);
109
	}
110
 
111
/**
112
 * testCompressionSetting method
113
 *
114
 * @return void
115
 */
116
	public function testCompressionSetting() {
117
		$Memcached = new TestMemcachedEngine();
118
		$Memcached->init(array(
119
			'engine' => 'Memcached',
120
			'servers' => array('127.0.0.1:11211'),
121
			'compress' => false
122
		));
123
 
124
		$this->assertFalse($Memcached->getMemcached()->getOption(Memcached::OPT_COMPRESSION));
125
 
126
		$MemcachedCompressed = new TestMemcachedEngine();
127
		$MemcachedCompressed->init(array(
128
			'engine' => 'Memcached',
129
			'servers' => array('127.0.0.1:11211'),
130
			'compress' => true
131
		));
132
 
133
		$this->assertTrue($MemcachedCompressed->getMemcached()->getOption(Memcached::OPT_COMPRESSION));
134
	}
135
 
136
/**
137
 * test accepts only valid serializer engine
138
 *
139
 * @return  void
140
 */
141
	public function testInvalidSerializerSetting() {
142
		$Memcached = new TestMemcachedEngine();
143
		$settings = array(
144
			'engine' => 'Memcached',
145
			'servers' => array('127.0.0.1:11211'),
146
			'persistent' => false,
147
			'serialize' => 'invalid_serializer'
148
		);
149
 
150
		$this->setExpectedException(
151
			'CacheException', 'invalid_serializer is not a valid serializer engine for Memcached'
152
		);
153
		$Memcached->init($settings);
154
	}
155
 
156
/**
157
 * testPhpSerializerSetting method
158
 *
159
 * @return void
160
 */
161
	public function testPhpSerializerSetting() {
162
		$Memcached = new TestMemcachedEngine();
163
		$settings = array(
164
			'engine' => 'Memcached',
165
			'servers' => array('127.0.0.1:11211'),
166
			'persistent' => false,
167
			'serialize' => 'php'
168
		);
169
 
170
		$Memcached->init($settings);
171
		$this->assertEquals(Memcached::SERIALIZER_PHP, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER));
172
	}
173
 
174
/**
175
 * testJsonSerializerSetting method
176
 *
177
 * @return void
178
 */
179
	public function testJsonSerializerSetting() {
180
		$this->skipIf(
181
			!Memcached::HAVE_JSON,
182
			'Memcached extension is not compiled with json support'
183
		);
184
 
185
		$Memcached = new TestMemcachedEngine();
186
		$settings = array(
187
			'engine' => 'Memcached',
188
			'servers' => array('127.0.0.1:11211'),
189
			'persistent' => false,
190
			'serialize' => 'json'
191
		);
192
 
193
		$Memcached->init($settings);
194
		$this->assertEquals(Memcached::SERIALIZER_JSON, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER));
195
	}
196
 
197
/**
198
 * testIgbinarySerializerSetting method
199
 *
200
 * @return void
201
 */
202
	public function testIgbinarySerializerSetting() {
203
		$this->skipIf(
204
			!Memcached::HAVE_IGBINARY,
205
			'Memcached extension is not compiled with igbinary support'
206
		);
207
 
208
		$Memcached = new TestMemcachedEngine();
209
		$settings = array(
210
			'engine' => 'Memcached',
211
			'servers' => array('127.0.0.1:11211'),
212
			'persistent' => false,
213
			'serialize' => 'igbinary'
214
		);
215
 
216
		$Memcached->init($settings);
217
		$this->assertEquals(Memcached::SERIALIZER_IGBINARY, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER));
218
	}
219
 
220
/**
221
 * testMsgpackSerializerSetting method
222
 *
223
 * @return void
224
 */
225
	public function testMsgpackSerializerSetting() {
226
		$this->skipIf(
227
			!defined('Memcached::HAVE_MSGPACK') || !Memcached::HAVE_MSGPACK,
228
			'Memcached extension is not compiled with msgpack support'
229
		);
230
 
231
		$Memcached = new TestMemcachedEngine();
232
		$settings = array(
233
			'engine' => 'Memcached',
234
			'servers' => array('127.0.0.1:11211'),
235
			'persistent' => false,
236
			'serialize' => 'msgpack'
237
		);
238
 
239
		$Memcached->init($settings);
240
		$this->assertEquals(Memcached::SERIALIZER_MSGPACK, $Memcached->getMemcached()->getOption(Memcached::OPT_SERIALIZER));
241
	}
242
 
243
/**
244
 * testJsonSerializerThrowException method
245
 *
246
 * @return void
247
 */
248
	public function testJsonSerializerThrowException() {
249
		$this->skipIf(
250
			Memcached::HAVE_JSON,
251
			'Memcached extension is compiled with json support'
252
		);
253
 
254
		$Memcached = new TestMemcachedEngine();
255
		$settings = array(
256
			'engine' => 'Memcached',
257
			'servers' => array('127.0.0.1:11211'),
258
			'persistent' => false,
259
			'serialize' => 'json'
260
		);
261
 
262
		$this->setExpectedException(
263
			'CacheException', 'Memcached extension is not compiled with json support'
264
		);
265
		$Memcached->init($settings);
266
	}
267
 
268
/**
269
 * testMsgpackSerializerThrowException method
270
 *
271
 * @return void
272
 */
273
	public function testMsgpackSerializerThrowException() {
274
		$this->skipIf(
275
			defined('Memcached::HAVE_MSGPACK') && Memcached::HAVE_MSGPACK,
276
			'Memcached extension is compiled with msgpack support'
277
		);
278
 
279
		$Memcached = new TestMemcachedEngine();
280
		$settings = array(
281
			'engine' => 'Memcached',
282
			'servers' => array('127.0.0.1:11211'),
283
			'persistent' => false,
284
			'serialize' => 'msgpack'
285
		);
286
 
287
		$this->setExpectedException(
288
			'CacheException', 'msgpack is not a valid serializer engine for Memcached'
289
		);
290
		$Memcached->init($settings);
291
	}
292
 
293
/**
294
 * testIgbinarySerializerThrowException method
295
 *
296
 * @return void
297
 */
298
	public function testIgbinarySerializerThrowException() {
299
		$this->skipIf(
300
			Memcached::HAVE_IGBINARY,
301
			'Memcached extension is compiled with igbinary support'
302
		);
303
 
304
		$Memcached = new TestMemcachedEngine();
305
		$settings = array(
306
			'engine' => 'Memcached',
307
			'servers' => array('127.0.0.1:11211'),
308
			'persistent' => false,
309
			'serialize' => 'igbinary'
310
		);
311
 
312
		$this->setExpectedException(
313
			'CacheException', 'Memcached extension is not compiled with igbinary support'
314
		);
315
		$Memcached->init($settings);
316
	}
317
 
318
/**
319
 * test using authentication without memcached installed with SASL support
320
 * throw an exception
321
 *
322
 * @return void
323
 */
324
	public function testSaslAuthException() {
325
		$Memcached = new TestMemcachedEngine();
326
		$settings = array(
327
			'engine' => 'Memcached',
328
			'servers' => array('127.0.0.1:11211'),
329
			'persistent' => false,
330
			'login' => 'test',
331
			'password' => 'password'
332
		);
333
 
334
		$this->skipIf(
335
			method_exists($Memcached->getMemcached(), 'setSaslAuthData'),
336
			'Memcached extension is installed with SASL support'
337
		);
338
 
339
		$this->setExpectedException(
340
			'CacheException', 'Memcached extension is not build with SASL support'
341
		);
342
		$Memcached->init($settings);
343
	}
344
 
345
/**
346
 * testSettings method
347
 *
348
 * @return void
349
 */
350
	public function testMultipleServers() {
351
		$servers = array('127.0.0.1:11211', '127.0.0.1:11222');
352
		$available = true;
353
		$Memcached = new Memcached();
354
 
355
		foreach ($servers as $server) {
356
			list($host, $port) = explode(':', $server);
357
			//@codingStandardsIgnoreStart
358
			if (!$Memcached->addServer($host, $port)) {
359
				$available = false;
360
			}
361
			//@codingStandardsIgnoreEnd
362
		}
363
 
364
		$this->skipIf(!$available, 'Need memcached servers at ' . implode(', ', $servers) . ' to run this test.');
365
 
366
		$Memcached = new MemcachedEngine();
367
		$Memcached->init(array('engine' => 'Memcached', 'servers' => $servers));
368
 
369
		$settings = $Memcached->settings();
370
		$this->assertEquals($settings['servers'], $servers);
371
		Cache::drop('dual_server');
372
	}
373
 
374
/**
375
 * test connecting to an ipv6 server.
376
 *
377
 * @return void
378
 */
379
	public function testConnectIpv6() {
380
		$Memcached = new MemcachedEngine();
381
		$result = $Memcached->init(array(
382
			'prefix' => 'cake_',
383
			'duration' => 200,
384
			'engine' => 'Memcached',
385
			'servers' => array(
386
				'[::1]:11211'
387
			)
388
		));
389
		$this->assertTrue($result);
390
	}
391
 
392
/**
393
 * test non latin domains.
394
 *
395
 * @return void
396
 */
397
	public function testParseServerStringNonLatin() {
398
		$Memcached = new TestMemcachedEngine();
399
		$result = $Memcached->parseServerString('schülervz.net:13211');
400
		$this->assertEquals(array('schülervz.net', '13211'), $result);
401
 
402
		$result = $Memcached->parseServerString('sülül:1111');
403
		$this->assertEquals(array('sülül', '1111'), $result);
404
	}
405
 
406
/**
407
 * test unix sockets.
408
 *
409
 * @return void
410
 */
411
	public function testParseServerStringUnix() {
412
		$Memcached = new TestMemcachedEngine();
413
		$result = $Memcached->parseServerString('unix:///path/to/memcachedd.sock');
414
		$this->assertEquals(array('unix:///path/to/memcachedd.sock', 0), $result);
415
	}
416
 
417
/**
418
 * testReadAndWriteCache method
419
 *
420
 * @return void
421
 */
422
	public function testReadAndWriteCache() {
423
		Cache::set(array('duration' => 1), null, 'memcached');
424
 
425
		$result = Cache::read('test', 'memcached');
426
		$expecting = '';
427
		$this->assertEquals($expecting, $result);
428
 
429
		$data = 'this is a test of the emergency broadcasting system';
430
		$result = Cache::write('test', $data, 'memcached');
431
		$this->assertTrue($result);
432
 
433
		$result = Cache::read('test', 'memcached');
434
		$expecting = $data;
435
		$this->assertEquals($expecting, $result);
436
 
437
		Cache::delete('test', 'memcached');
438
	}
439
 
440
/**
441
 * testExpiry method
442
 *
443
 * @return void
444
 */
445
	public function testExpiry() {
446
		Cache::set(array('duration' => 1), 'memcached');
447
 
448
		$result = Cache::read('test', 'memcached');
449
		$this->assertFalse($result);
450
 
451
		$data = 'this is a test of the emergency broadcasting system';
452
		$result = Cache::write('other_test', $data, 'memcached');
453
		$this->assertTrue($result);
454
 
455
		sleep(2);
456
		$result = Cache::read('other_test', 'memcached');
457
		$this->assertFalse($result);
458
 
459
		Cache::set(array('duration' => "+1 second"), 'memcached');
460
 
461
		$data = 'this is a test of the emergency broadcasting system';
462
		$result = Cache::write('other_test', $data, 'memcached');
463
		$this->assertTrue($result);
464
 
465
		sleep(3);
466
		$result = Cache::read('other_test', 'memcached');
467
		$this->assertFalse($result);
468
 
469
		Cache::config('memcached', array('duration' => '+1 second'));
470
 
471
		$result = Cache::read('other_test', 'memcached');
472
		$this->assertFalse($result);
473
 
474
		Cache::config('memcached', array('duration' => '+29 days'));
475
		$data = 'this is a test of the emergency broadcasting system';
476
		$result = Cache::write('long_expiry_test', $data, 'memcached');
477
		$this->assertTrue($result);
478
 
479
		sleep(2);
480
		$result = Cache::read('long_expiry_test', 'memcached');
481
		$expecting = $data;
482
		$this->assertEquals($expecting, $result);
483
 
484
		Cache::config('memcached', array('duration' => 3600));
485
	}
486
 
487
/**
488
 * testDeleteCache method
489
 *
490
 * @return void
491
 */
492
	public function testDeleteCache() {
493
		$data = 'this is a test of the emergency broadcasting system';
494
		$result = Cache::write('delete_test', $data, 'memcached');
495
		$this->assertTrue($result);
496
 
497
		$result = Cache::delete('delete_test', 'memcached');
498
		$this->assertTrue($result);
499
	}
500
 
501
/**
502
 * testDecrement method
503
 *
504
 * @return void
505
 */
506
	public function testDecrement() {
507
		$result = Cache::write('test_decrement', 5, 'memcached');
508
		$this->assertTrue($result);
509
 
510
		$result = Cache::decrement('test_decrement', 1, 'memcached');
511
		$this->assertEquals(4, $result);
512
 
513
		$result = Cache::read('test_decrement', 'memcached');
514
		$this->assertEquals(4, $result);
515
 
516
		$result = Cache::decrement('test_decrement', 2, 'memcached');
517
		$this->assertEquals(2, $result);
518
 
519
		$result = Cache::read('test_decrement', 'memcached');
520
		$this->assertEquals(2, $result);
521
 
522
		Cache::delete('test_decrement', 'memcached');
523
	}
524
 
525
/**
526
 * test decrementing compressed keys
527
 *
528
 * @return void
529
 */
530
	public function testDecrementCompressedKeys() {
531
		Cache::config('compressed_memcached', array(
532
			'engine' => 'Memcached',
533
			'duration' => '+2 seconds',
534
			'servers' => array('127.0.0.1:11211'),
535
			'compress' => true
536
		));
537
 
538
		$result = Cache::write('test_decrement', 5, 'compressed_memcached');
539
		$this->assertTrue($result);
540
 
541
		$result = Cache::decrement('test_decrement', 1, 'compressed_memcached');
542
		$this->assertEquals(4, $result);
543
 
544
		$result = Cache::read('test_decrement', 'compressed_memcached');
545
		$this->assertEquals(4, $result);
546
 
547
		$result = Cache::decrement('test_decrement', 2, 'compressed_memcached');
548
		$this->assertEquals(2, $result);
549
 
550
		$result = Cache::read('test_decrement', 'compressed_memcached');
551
		$this->assertEquals(2, $result);
552
 
553
		Cache::delete('test_decrement', 'compressed_memcached');
554
	}
555
 
556
/**
557
 * testIncrement method
558
 *
559
 * @return void
560
 */
561
	public function testIncrement() {
562
		$result = Cache::write('test_increment', 5, 'memcached');
563
		$this->assertTrue($result);
564
 
565
		$result = Cache::increment('test_increment', 1, 'memcached');
566
		$this->assertEquals(6, $result);
567
 
568
		$result = Cache::read('test_increment', 'memcached');
569
		$this->assertEquals(6, $result);
570
 
571
		$result = Cache::increment('test_increment', 2, 'memcached');
572
		$this->assertEquals(8, $result);
573
 
574
		$result = Cache::read('test_increment', 'memcached');
575
		$this->assertEquals(8, $result);
576
 
577
		Cache::delete('test_increment', 'memcached');
578
	}
579
 
580
/**
581
 * test incrementing compressed keys
582
 *
583
 * @return void
584
 */
585
	public function testIncrementCompressedKeys() {
586
		Cache::config('compressed_memcached', array(
587
			'engine' => 'Memcached',
588
			'duration' => '+2 seconds',
589
			'servers' => array('127.0.0.1:11211'),
590
			'compress' => true
591
		));
592
 
593
		$result = Cache::write('test_increment', 5, 'compressed_memcached');
594
		$this->assertTrue($result);
595
 
596
		$result = Cache::increment('test_increment', 1, 'compressed_memcached');
597
		$this->assertEquals(6, $result);
598
 
599
		$result = Cache::read('test_increment', 'compressed_memcached');
600
		$this->assertEquals(6, $result);
601
 
602
		$result = Cache::increment('test_increment', 2, 'compressed_memcached');
603
		$this->assertEquals(8, $result);
604
 
605
		$result = Cache::read('test_increment', 'compressed_memcached');
606
		$this->assertEquals(8, $result);
607
 
608
		Cache::delete('test_increment', 'compressed_memcached');
609
	}
610
 
611
/**
612
 * test that configurations don't conflict, when a file engine is declared after a memcached one.
613
 *
614
 * @return void
615
 */
616
	public function testConfigurationConflict() {
617
		Cache::config('long_memcached', array(
618
			'engine' => 'Memcached',
619
			'duration' => '+2 seconds',
620
			'servers' => array('127.0.0.1:11211'),
621
		));
622
		Cache::config('short_memcached', array(
623
			'engine' => 'Memcached',
624
			'duration' => '+1 seconds',
625
			'servers' => array('127.0.0.1:11211'),
626
		));
627
		Cache::config('some_file', array('engine' => 'File'));
628
 
629
		$this->assertTrue(Cache::write('duration_test', 'yay', 'long_memcached'));
630
		$this->assertTrue(Cache::write('short_duration_test', 'boo', 'short_memcached'));
631
 
632
		$this->assertEquals('yay', Cache::read('duration_test', 'long_memcached'), 'Value was not read %s');
633
		$this->assertEquals('boo', Cache::read('short_duration_test', 'short_memcached'), 'Value was not read %s');
634
 
635
		sleep(1);
636
		$this->assertEquals('yay', Cache::read('duration_test', 'long_memcached'), 'Value was not read %s');
637
 
638
		sleep(2);
639
		$this->assertFalse(Cache::read('short_duration_test', 'short_memcached'), 'Cache was not invalidated %s');
640
		$this->assertFalse(Cache::read('duration_test', 'long_memcached'), 'Value did not expire %s');
641
 
642
		Cache::delete('duration_test', 'long_memcached');
643
		Cache::delete('short_duration_test', 'short_memcached');
644
	}
645
 
646
/**
647
 * test clearing memcached.
648
 *
649
 * @return void
650
 */
651
	public function testClear() {
652
		Cache::config('memcached2', array(
653
			'engine' => 'Memcached',
654
			'prefix' => 'cake2_',
655
			'duration' => 3600
656
		));
657
 
658
		Cache::write('some_value', 'cache1', 'memcached');
659
		$result = Cache::clear(true, 'memcached');
660
		$this->assertTrue($result);
661
		$this->assertEquals('cache1', Cache::read('some_value', 'memcached'));
662
 
663
		Cache::write('some_value', 'cache2', 'memcached2');
664
		$result = Cache::clear(false, 'memcached');
665
		$this->assertTrue($result);
666
		$this->assertFalse(Cache::read('some_value', 'memcached'));
667
		$this->assertEquals('cache2', Cache::read('some_value', 'memcached2'));
668
 
669
		Cache::clear(false, 'memcached2');
670
	}
671
 
672
/**
673
 * test that a 0 duration can successfully write.
674
 *
675
 * @return void
676
 */
677
	public function testZeroDuration() {
678
		Cache::config('memcached', array('duration' => 0));
679
		$result = Cache::write('test_key', 'written!', 'memcached');
680
 
681
		$this->assertTrue($result);
682
		$result = Cache::read('test_key', 'memcached');
683
		$this->assertEquals('written!', $result);
684
	}
685
 
686
/**
687
 * test that durations greater than 30 days never expire
688
 *
689
 * @return void
690
 */
691
	public function testLongDurationEqualToZero() {
692
		$memcached = new TestMemcachedEngine();
693
		$memcached->settings['compress'] = false;
694
 
695
		$mock = $this->getMock('Memcached');
696
		$memcached->setMemcached($mock);
697
		$mock->expects($this->once())
698
			->method('set')
699
			->with('key', 'value', 0);
700
 
701
		$value = 'value';
702
		$memcached->write('key', $value, 50 * DAY);
703
	}
704
 
705
/**
706
 * Tests that configuring groups for stored keys return the correct values when read/written
707
 * Shows that altering the group value is equivalent to deleting all keys under the same
708
 * group
709
 *
710
 * @return void
711
 */
712
	public function testGroupReadWrite() {
713
		Cache::config('memcached_groups', array(
714
			'engine' => 'Memcached',
715
			'duration' => 3600,
716
			'groups' => array('group_a', 'group_b'),
717
			'prefix' => 'test_'
718
		));
719
		Cache::config('memcached_helper', array(
720
			'engine' => 'Memcached',
721
			'duration' => 3600,
722
			'prefix' => 'test_'
723
		));
724
		$this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups'));
725
		$this->assertEquals('value', Cache::read('test_groups', 'memcached_groups'));
726
 
727
		Cache::increment('group_a', 1, 'memcached_helper');
728
		$this->assertFalse(Cache::read('test_groups', 'memcached_groups'));
729
		$this->assertTrue(Cache::write('test_groups', 'value2', 'memcached_groups'));
730
		$this->assertEquals('value2', Cache::read('test_groups', 'memcached_groups'));
731
 
732
		Cache::increment('group_b', 1, 'memcached_helper');
733
		$this->assertFalse(Cache::read('test_groups', 'memcached_groups'));
734
		$this->assertTrue(Cache::write('test_groups', 'value3', 'memcached_groups'));
735
		$this->assertEquals('value3', Cache::read('test_groups', 'memcached_groups'));
736
	}
737
 
738
/**
739
 * Tests that deleteing from a groups-enabled config is possible
740
 *
741
 * @return void
742
 */
743
	public function testGroupDelete() {
744
		Cache::config('memcached_groups', array(
745
			'engine' => 'Memcached',
746
			'duration' => 3600,
747
			'groups' => array('group_a', 'group_b')
748
		));
749
		$this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups'));
750
		$this->assertEquals('value', Cache::read('test_groups', 'memcached_groups'));
751
		$this->assertTrue(Cache::delete('test_groups', 'memcached_groups'));
752
 
753
		$this->assertFalse(Cache::read('test_groups', 'memcached_groups'));
754
	}
755
 
756
/**
757
 * Test clearing a cache group
758
 *
759
 * @return void
760
 */
761
	public function testGroupClear() {
762
		Cache::config('memcached_groups', array(
763
			'engine' => 'Memcached',
764
			'duration' => 3600,
765
			'groups' => array('group_a', 'group_b')
766
		));
767
 
768
		$this->assertTrue(Cache::write('test_groups', 'value', 'memcached_groups'));
769
		$this->assertTrue(Cache::clearGroup('group_a', 'memcached_groups'));
770
		$this->assertFalse(Cache::read('test_groups', 'memcached_groups'));
771
 
772
		$this->assertTrue(Cache::write('test_groups', 'value2', 'memcached_groups'));
773
		$this->assertTrue(Cache::clearGroup('group_b', 'memcached_groups'));
774
		$this->assertFalse(Cache::read('test_groups', 'memcached_groups'));
775
	}
776
}