Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
15403 manish.sha 1
<?php
2
/**
3
 * RedisEngineTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Cache.Engine
15
 * @since         CakePHP(tm) v 2.2
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Cache', 'Cache');
20
App::uses('RedisEngine', 'Cache/Engine');
21
 
22
/**
23
 * RedisEngineTest class
24
 *
25
 * @package       Cake.Test.Case.Cache.Engine
26
 */
27
class RedisEngineTest extends CakeTestCase {
28
 
29
/**
30
 * setUp method
31
 *
32
 * @return void
33
 */
34
	public function setUp() {
35
		parent::setUp();
36
		$this->skipIf(!class_exists('Redis'), 'Redis is not installed or configured properly.');
37
 
38
		$this->_cacheDisable = Configure::read('Cache.disable');
39
		Configure::write('Cache.disable', false);
40
		Cache::config('redis', array(
41
			'engine' => 'Redis',
42
			'prefix' => 'cake_',
43
			'duration' => 3600
44
		));
45
	}
46
 
47
/**
48
 * tearDown method
49
 *
50
 * @return void
51
 */
52
	public function tearDown() {
53
		parent::tearDown();
54
		Configure::write('Cache.disable', $this->_cacheDisable);
55
		Cache::drop('');
56
		Cache::drop('redis_groups');
57
		Cache::drop('redis_helper');
58
		Cache::config('default');
59
	}
60
 
61
/**
62
 * testSettings method
63
 *
64
 * @return void
65
 */
66
	public function testSettings() {
67
		$settings = Cache::settings('redis');
68
		$expecting = array(
69
			'prefix' => 'cake_',
70
			'duration' => 3600,
71
			'probability' => 100,
72
			'groups' => array(),
73
			'engine' => 'Redis',
74
			'server' => '127.0.0.1',
75
			'port' => 6379,
76
			'timeout' => 0,
77
			'persistent' => true,
78
			'password' => false,
79
			'database' => 0,
80
			'unix_socket' => false,
81
		);
82
		$this->assertEquals($expecting, $settings);
83
	}
84
 
85
/**
86
 * testConnect method
87
 *
88
 * @return void
89
 */
90
	public function testConnect() {
91
		$Redis = new RedisEngine();
92
		$this->assertTrue($Redis->init(Cache::settings('redis')));
93
	}
94
 
95
/**
96
 * testMultiDatabaseOperations method
97
 *
98
 * @return void
99
 */
100
	public function testMultiDatabaseOperations() {
101
		Cache::config('redisdb0', array(
102
			'engine' => 'Redis',
103
			'prefix' => 'cake2_',
104
			'duration' => 3600,
105
			'persistent' => false,
106
		));
107
 
108
		Cache::config('redisdb1', array(
109
			'engine' => 'Redis',
110
			'database' => 1,
111
			'prefix' => 'cake2_',
112
			'duration' => 3600,
113
			'persistent' => false,
114
		));
115
 
116
		$result = Cache::write('save_in_0', true, 'redisdb0');
117
		$exist = Cache::read('save_in_0', 'redisdb0');
118
		$this->assertTrue($result);
119
		$this->assertTrue($exist);
120
 
121
		$result = Cache::write('save_in_1', true, 'redisdb1');
122
		$this->assertTrue($result);
123
		$exist = Cache::read('save_in_0', 'redisdb1');
124
		$this->assertFalse($exist);
125
		$exist = Cache::read('save_in_1', 'redisdb1');
126
		$this->assertTrue($exist);
127
 
128
		Cache::delete('save_in_0', 'redisdb0');
129
		$exist = Cache::read('save_in_0', 'redisdb0');
130
		$this->assertFalse($exist);
131
 
132
		Cache::delete('save_in_1', 'redisdb1');
133
		$exist = Cache::read('save_in_1', 'redisdb1');
134
		$this->assertFalse($exist);
135
 
136
		Cache::drop('redisdb0');
137
		Cache::drop('redisdb1');
138
	}
139
 
140
/**
141
 * testReadAndWriteCache method
142
 *
143
 * @return void
144
 */
145
	public function testReadAndWriteCache() {
146
		Cache::set(array('duration' => 1), null, 'redis');
147
 
148
		$result = Cache::read('test', 'redis');
149
		$expecting = '';
150
		$this->assertEquals($expecting, $result);
151
 
152
		$data = 'this is a test of the emergency broadcasting system';
153
		$result = Cache::write('test', $data, 'redis');
154
		$this->assertTrue($result);
155
 
156
		$result = Cache::read('test', 'redis');
157
		$expecting = $data;
158
		$this->assertEquals($expecting, $result);
159
 
160
		$data = array(1, 2, 3);
161
		$this->assertTrue(Cache::write('array_data', $data, 'redis'));
162
		$this->assertEquals($data, Cache::read('array_data', 'redis'));
163
 
164
		Cache::delete('test', 'redis');
165
	}
166
 
167
/**
168
 * testExpiry method
169
 *
170
 * @return void
171
 */
172
	public function testExpiry() {
173
		Cache::set(array('duration' => 1), 'redis');
174
 
175
		$result = Cache::read('test', 'redis');
176
		$this->assertFalse($result);
177
 
178
		$data = 'this is a test of the emergency broadcasting system';
179
		$result = Cache::write('other_test', $data, 'redis');
180
		$this->assertTrue($result);
181
 
182
		sleep(2);
183
		$result = Cache::read('other_test', 'redis');
184
		$this->assertFalse($result);
185
 
186
		Cache::set(array('duration' => "+1 second"), 'redis');
187
 
188
		$data = 'this is a test of the emergency broadcasting system';
189
		$result = Cache::write('other_test', $data, 'redis');
190
		$this->assertTrue($result);
191
 
192
		sleep(2);
193
		$result = Cache::read('other_test', 'redis');
194
		$this->assertFalse($result);
195
 
196
		Cache::config('redis', array('duration' => '+1 second'));
197
		sleep(2);
198
 
199
		$result = Cache::read('other_test', 'redis');
200
		$this->assertFalse($result);
201
 
202
		Cache::config('redis', array('duration' => '+29 days'));
203
		$data = 'this is a test of the emergency broadcasting system';
204
		$result = Cache::write('long_expiry_test', $data, 'redis');
205
		$this->assertTrue($result);
206
 
207
		sleep(2);
208
		$result = Cache::read('long_expiry_test', 'redis');
209
		$expecting = $data;
210
		$this->assertEquals($expecting, $result);
211
 
212
		Cache::config('redis', array('duration' => 3600));
213
	}
214
 
215
/**
216
 * testDeleteCache method
217
 *
218
 * @return void
219
 */
220
	public function testDeleteCache() {
221
		$data = 'this is a test of the emergency broadcasting system';
222
		$result = Cache::write('delete_test', $data, 'redis');
223
		$this->assertTrue($result);
224
 
225
		$result = Cache::delete('delete_test', 'redis');
226
		$this->assertTrue($result);
227
	}
228
 
229
/**
230
 * testDecrement method
231
 *
232
 * @return void
233
 */
234
	public function testDecrement() {
235
		Cache::delete('test_decrement', 'redis');
236
		$result = Cache::write('test_decrement', 5, 'redis');
237
		$this->assertTrue($result);
238
 
239
		$result = Cache::decrement('test_decrement', 1, 'redis');
240
		$this->assertEquals(4, $result);
241
 
242
		$result = Cache::read('test_decrement', 'redis');
243
		$this->assertEquals(4, $result);
244
 
245
		$result = Cache::decrement('test_decrement', 2, 'redis');
246
		$this->assertEquals(2, $result);
247
 
248
		$result = Cache::read('test_decrement', 'redis');
249
		$this->assertEquals(2, $result);
250
	}
251
 
252
/**
253
 * testIncrement method
254
 *
255
 * @return void
256
 */
257
	public function testIncrement() {
258
		Cache::delete('test_increment', 'redis');
259
		$result = Cache::increment('test_increment', 1, 'redis');
260
		$this->assertEquals(1, $result);
261
 
262
		$result = Cache::read('test_increment', 'redis');
263
		$this->assertEquals(1, $result);
264
 
265
		$result = Cache::increment('test_increment', 2, 'redis');
266
		$this->assertEquals(3, $result);
267
 
268
		$result = Cache::read('test_increment', 'redis');
269
		$this->assertEquals(3, $result);
270
	}
271
 
272
/**
273
 * test clearing redis.
274
 *
275
 * @return void
276
 */
277
	public function testClear() {
278
		Cache::config('redis2', array(
279
			'engine' => 'Redis',
280
			'prefix' => 'cake2_',
281
			'duration' => 3600
282
		));
283
 
284
		Cache::write('some_value', 'cache1', 'redis');
285
		$result = Cache::clear(true, 'redis');
286
		$this->assertTrue($result);
287
		$this->assertEquals('cache1', Cache::read('some_value', 'redis'));
288
 
289
		Cache::write('some_value', 'cache2', 'redis2');
290
		$result = Cache::clear(false, 'redis');
291
		$this->assertTrue($result);
292
		$this->assertFalse(Cache::read('some_value', 'redis'));
293
		$this->assertEquals('cache2', Cache::read('some_value', 'redis2'));
294
 
295
		Cache::clear(false, 'redis2');
296
	}
297
 
298
/**
299
 * test that a 0 duration can successfully write.
300
 *
301
 * @return void
302
 */
303
	public function testZeroDuration() {
304
		Cache::config('redis', array('duration' => 0));
305
		$result = Cache::write('test_key', 'written!', 'redis');
306
 
307
		$this->assertTrue($result);
308
		$result = Cache::read('test_key', 'redis');
309
		$this->assertEquals('written!', $result);
310
	}
311
 
312
/**
313
 * Tests that configuring groups for stored keys return the correct values when read/written
314
 * Shows that altering the group value is equivalent to deleting all keys under the same
315
 * group
316
 *
317
 * @return void
318
 */
319
	public function testGroupReadWrite() {
320
		Cache::config('redis_groups', array(
321
			'engine' => 'Redis',
322
			'duration' => 3600,
323
			'groups' => array('group_a', 'group_b'),
324
			'prefix' => 'test_'
325
		));
326
		Cache::config('redis_helper', array(
327
			'engine' => 'Redis',
328
			'duration' => 3600,
329
			'prefix' => 'test_'
330
		));
331
		$this->assertTrue(Cache::write('test_groups', 'value', 'redis_groups'));
332
		$this->assertEquals('value', Cache::read('test_groups', 'redis_groups'));
333
 
334
		Cache::increment('group_a', 1, 'redis_helper');
335
		$this->assertFalse(Cache::read('test_groups', 'redis_groups'));
336
		$this->assertTrue(Cache::write('test_groups', 'value2', 'redis_groups'));
337
		$this->assertEquals('value2', Cache::read('test_groups', 'redis_groups'));
338
 
339
		Cache::increment('group_b', 1, 'redis_helper');
340
		$this->assertFalse(Cache::read('test_groups', 'redis_groups'));
341
		$this->assertTrue(Cache::write('test_groups', 'value3', 'redis_groups'));
342
		$this->assertEquals('value3', Cache::read('test_groups', 'redis_groups'));
343
	}
344
 
345
/**
346
 * Tests that deleteing from a groups-enabled config is possible
347
 *
348
 * @return void
349
 */
350
	public function testGroupDelete() {
351
		Cache::config('redis_groups', array(
352
			'engine' => 'Redis',
353
			'duration' => 3600,
354
			'groups' => array('group_a', 'group_b')
355
		));
356
		$this->assertTrue(Cache::write('test_groups', 'value', 'redis_groups'));
357
		$this->assertEquals('value', Cache::read('test_groups', 'redis_groups'));
358
		$this->assertTrue(Cache::delete('test_groups', 'redis_groups'));
359
 
360
		$this->assertFalse(Cache::read('test_groups', 'redis_groups'));
361
	}
362
 
363
/**
364
 * Test clearing a cache group
365
 *
366
 * @return void
367
 */
368
	public function testGroupClear() {
369
		Cache::config('redis_groups', array(
370
			'engine' => 'Redis',
371
			'duration' => 3600,
372
			'groups' => array('group_a', 'group_b')
373
		));
374
 
375
		$this->assertTrue(Cache::write('test_groups', 'value', 'redis_groups'));
376
		$this->assertTrue(Cache::clearGroup('group_a', 'redis_groups'));
377
		$this->assertFalse(Cache::read('test_groups', 'redis_groups'));
378
 
379
		$this->assertTrue(Cache::write('test_groups', 'value2', 'redis_groups'));
380
		$this->assertTrue(Cache::clearGroup('group_b', 'redis_groups'));
381
		$this->assertFalse(Cache::read('test_groups', 'redis_groups'));
382
	}
383
 
384
}